VBA Excel vlookup в цикле проблемы - PullRequest
       21

VBA Excel vlookup в цикле проблемы

0 голосов
/ 18 августа 2011

У меня проблема с моим кодом VBA в таблице Excel, содержащей заказы.Каждая строка содержит номер клиента, который я использую для поиска адреса электронной почты клиента, который содержится на отдельном листе в рабочей книге.

Код vlookup отлично работает для отдельной ячейки, но проблема заключается в том, что когда я пытаюсьцикл по всем строкам электронной таблицы.Формула Excel для отдельной ячейки, например,

=VLOOKUP(B2,Customers!A2:D1000,4,FALSE)

Код VBA, сгенерированный для этого:

    Range("M2").Select
ActiveCell.FormulaR1C1 = _
    "=VLOOKUP(RC[-11],Customers!RC[-12]:R[999]C[-9],4,FALSE)"

Включение этого в цикл после выбора начальной ячейки, Iиметь следующее:

Cells(2, 13).Select
Do
  ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-11],Customers!RC[-12]:R[999]C[-9],4,FALSE)"
  ActiveCell.Offset(1, 0).Select
Loop Until IsEmpty(ActiveCell.Offset(0, -10))    

Проблема в том, что я хочу, чтобы "массив таблиц" был фиксирован , а не относительно ячейки, значение которой ищется.Но я абсолютно не могу понять, как это сделать.Если я изменяю код следующим образом, я получаю ошибку во время выполнения:

ActiveCell.FormulaR1C1 = _
    "=VLOOKUP(RC[-11],Customers!A2:D1000,4,FALSE)"

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

Большое вам спасибо.

1 Ответ

0 голосов
/ 18 августа 2011

Я уверен, что квадратные скобки в вашей формуле R1C1 указывают, что вы указываете относительный диапазон (особенно с отрицательными значениями в них). Если вы хотите указать абсолютный диапазон, вам нужно указать ячейки R1C1 без скобок; например R2C2:. R4C4

В качестве простого примера:

Sub test()
  Sheet1.Range("C5").FormulaR1C1 = "=VLOOKUP(1,R1C1:R3C3,2,FALSE)"
End Sub

Выполнение этого дает абсолютную формулу в стиле «А1» в ячейке C5.

Я думаю, что ваша проблема может быть:

Customers!RC[-12]:R[999]C[-9]

Потому что это относительный диапазон. Вы должны явно указать, где находится ваша таблица данных; например Customers!RC12:R999C9 (вам нужно выяснить, где он находится на вашем листе).

Простой способ понять это - выделить таблицу данных на рабочем листе, затем переключиться в редактор Visual Basic и запустить его вручную (поместите курсор в Sub и нажмите кнопку Play или перейдите в Run -> Run)

.
Sub test2()
    Dim r As Range
    Set r = Application.Selection
    InputBox "your r1c1 range:", , r.Address(True, True, xlR1C1)
End Sub
...