如何在excelmacros中指定列作为范围

我想写一个macros来比较两列,如果值是相等的,那么它应该复制另一个单元格的值到一个新的单元格。 我在下面写了macros:

Sub Value() Dim rng1 As Range Set rng1 = Worksheets("Sheet1").Range("L2:L11860") Dim rng2 As Range Set rng2 = Worksheets("Sheet1").Range("W2:W12000") Dim rng3 As Range Set rng3 = Worksheets("Sheet1").Range("A2:A12000") Dim rng4 As Range Set rng4 = Worksheets("Sheet1").Range("X2:X12000") If rng1.Value = rng2.Value Then rng3.Value = rng4.Value End If End Sub 

它给我下面的行代码Run Time error 13

 If rng1.Value = rng2.Value Then 

请帮忙解决这个问题。

这应该没有循环:

 Sub Value() Dim rng1 As Range Set rng1 = Worksheets("Sheet1").Range("L2:L12000") Dim rng2 As Range Set rng2 = Worksheets("Sheet1").Range("W2:W12000") Dim rng3 As Range Set rng3 = Worksheets("Sheet1").Range("A2:A12000") Dim rng4 As Range Set rng4 = Worksheets("Sheet1").Range("X2:X12000") rng3.Value = Worksheets("Sheet1").Evaluate("=IF(INDEX(" & rng1.Address(0, 0) & "=" & rng2.Address(0, 0) & ",)," & rng4.Address(0, 0) & ","""")") End Sub 

或者像德克build议你可以只是:

 Sub Value() Dim rng1 As Range Set rng1 = Worksheets("Sheet1").Range("L2:L12000") Dim rng2 As Range Set rng2 = Worksheets("Sheet1").Range("W2:W12000") Dim rng3 As Range Set rng3 = Worksheets("Sheet1").Range("A2:A12000") Dim rng4 As Range Set rng4 = Worksheets("Sheet1").Range("X2:X12000") rng3.Value = Worksheets("Sheet1").Evaluate("=IF(" & rng1.Address(0, 0) & "=" & rng2.Address(0, 0) & "," & rng4.Address(0, 0) & ","""")") End Sub