VBA比较两列并复制行

VBA比较两列并复制行,vba,excel,Vba,Excel,在Excel中,我试图创建一个宏,检查一行中的两个条件,并将其复制到另一个页面。这就是我目前所拥有的。如果我去掉所有的AK引用,它对第一个变量起作用,但是第二个变量让我很伤心。有什么想法吗?提前感谢您抽出时间 Sub GenMonthWeekend() Dim aj As Range Dim ak As Range Dim abc As Integer Dim Source As Worksheet Dim Target As Worksheet ' Change worksheet desi

在Excel中,我试图创建一个宏,检查一行中的两个条件,并将其复制到另一个页面。这就是我目前所拥有的。如果我去掉所有的AK引用,它对第一个变量起作用,但是第二个变量让我很伤心。有什么想法吗?提前感谢您抽出时间

Sub GenMonthWeekend()
Dim aj As Range
Dim ak As Range
Dim abc As Integer
Dim Source As Worksheet
Dim Target As Worksheet

' Change worksheet designations as needed
Set Source = ActiveWorkbook.Worksheets("Month Raw Data")
Set Target = ActiveWorkbook.Worksheets("Month Volume - Weekend")

abc = 2     ' Start copying to row 2 in target sheet
For Each aj In Source.Range("aj1:ak10000")   ' Do 10000 rows
    If aj = "1" And ak = "False" Then ' If colum aj is 1 and ak false copy
       Source.Rows(aj.Row).Copy Target.Rows(abc)
       abc = abc + 1
ElseIf aj = "7" And ak = "False" Then ' If colum aj is 7 and ak false copy
       Source.Rows(aj.Row).Copy Target.Rows(abc)
       abc = abc + 1
    End If
Next aj
End Sub

您的范围变量ak的工作方式与您认为的不同

只需在列
AJ
中循环,并使用
Offset(,1)
检查
AK
中的值,该值将查看右侧的一列

abc = 2
For Each aj In Source.Range("AJ1000")
    If aj = "1" And aj.offset(,1) = "False" Then
       Source.Rows(aj.Row).Copy Target.Rows(abc)
       abc = abc + 1
ElseIf aj = "7" And aj.offset(,1) = "False" Then
       Source.Rows(aj.Row).Copy Target.Rows(abc)
       abc = abc + 1
    End If
Next aj

您可以通过组合您的条件并使用
For i
循环来清理这个问题

Sub GenMonthWeekend()
Dim i As Range

Dim Source As Worksheet: Set Source = ActiveWorkbook.Worksheets("Month Raw Data")
Dim Target As Worksheet: Set Target = ActiveWorkbook.Worksheets("Month Volume - Weekend")

For i = 2 To 1000
    If (Source.Range("AJ" & i) = 1 Or Source.Range("AJ" & i) = 7) And Source.Range("AJ" & i).Offset(, 1) = "False" Then
        Source.Rows(i).Copy Target.Rows(Target.Range("A" & Target.Rows.Count).End(xlUp).Offset(1).Row)
    End If
Next i

End Sub

您没有仅仅因为列引用的名称而将范围设置为
ak
。列引用不会使vba自动将范围指定给它。键入的是
False
,还是与实际布尔值中的
False
相同?在框中键入False,因为if和Elseif上的输出相同。如果可以组合它们:
if(aj=“1”或者aj=“7”)和aj.Offset(,1)=“False”,然后我现在正在处理这个问题,并将其替换为I=1到1000的
循环。之前只是解决主要问题editing@RobbyStolle更新。也许值得一试稍微干净一点的方法。容易理解