2016-06-02 2 views
1

Я пытаюсь написать макрос, чтобы сравнить два столбца, и если значение равно, то оно должно скопировать значение другой ячейки в новую ячейку. Я написал ниже макрос:Как указать столбец как диапазон в макросе excel

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 

Пожалуйста, помогите в решении этого.

+0

Вы пытаетесь чтобы сделать все или ничего? то есть. если весь столбец равен, то делайте то, что хотите, или вы хотите сравнивать строки за строкой? –

+0

Вы не можете сравнить более 1 ячейки с более чем 1 ячейкой. Попробуйте цикл 'for', который увеличивается по строке. – findwindow

+0

Чтобы указать весь столбец, обозначение будет «A: A». НО, как говорит findwindow, вы не можете сравнить весь столбец с другим с одним сравнением. – Taelsin

ответ

2

Это должно сделать это без петель:

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 

Или, как Dirk Отдается вы могли бы просто:

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 
+0

Спасибо Скотту, он работал –

+1

Как подсказка: также 'rng3.Value = Рабочие листы (« Sheet1 »). Оцените (« = IF («& rng1.Address &» = «& rng2.Address &", "& rng4 .Address & "," & rng3.Address & ")") 'будет ... нет необходимости в индексе (и диапазон 3 не будет перезаписан), но это необходимо использовать по мере необходимости;) –

+0

@ Dirk good to знать. –

Смежные вопросы