Диапазон Excel VBA до последней доступной ячейки - PullRequest
0 голосов
/ 29 октября 2018

У меня проблемы с реализацией кода VBA с использованием «Range»:

Я использую 2 листа. Первый - «Импорт», а другой - «Данные», где я использую данные из «Импорт», используя различные формулы для редактирования / фильтрации моих данных. Данные из таблицы «Импорт» меняются еженедельно, поэтому количество строк (5000-10000 строк).

Я установил Range до 10000, чтобы всегда покрывать мои данные, но когда строки меньше 10000, он помещает N/A в ячейки, которые должны быть удалены каждый раз.

Это то, что я использую на листе «Данные» (каждый столбец из данных импортирует другой столбец из импорта):

Range("A2:A10000").Formula = "='Import'!RC"
Range("B2:B10000").Formula = "=VLOOKUP(RC[-1],'Import'!R1C[-1]:R10000C[43],45,FALSE)"`

Есть ли способ заставить Range видеть, сколько строк в каждом столбце в "Импорт", так что я могу избежать всего N / A?

Ответы [ 3 ]

0 голосов
/ 29 октября 2018

Я думаю, что лучше взглянуть на последний ряд, а затем применять его только к соответствующим строкам.

Но вы можете обернуть VLOOKUP в функцию IFERROR (). Поэтому, когда значений не существует, он будет показывать # N / A в виде пустых ячеек ...

Range("A2:A10000").Formula = "='Import'!RC"

Range("B2:B10000").Formula = "=IFERROR(VLOOKUP(RC[-1],'Import'!R1C[-1]:R10000C[43],45,FALSE),"""")"
0 голосов
/ 29 октября 2018

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

Dim tw As Workbook: Set tw = ThisWorkbook
Dim shImp As Worksheet: Set shImp = tw.Worksheets("Import")
Dim shData As Worksheet: Set shData = tw.Worksheets("Data")
Dim nrRows As Long

nrRows = shImp.Cells(shImp.Rows.Count, "A").End(xlUp).Row
shData.Range("A2:A" & nrRows).FormulaR1C1 = "=Import!RC"
shData.Range("B2:B" & nrRows).FormulaR1C1 = "=VLOOKUP(RC[-1], 'Import'!C1:C45, 45, FALSE)"
0 голосов
/ 29 октября 2018

Попробуйте,

dim lr as long

with worksheets("Import")
    lr = .cells(.rows.count, "A").end(xlup).row
end with

with worksheets("Data")
    .Range(.cells(2, "A"), .cells(lr, "A")).Formular1c1 = "='Import'!RC"
    .Range(.cells(2, "B"), .cells(lr, "B")).Formular1c1 = _
         "=VLOOKUP(RC[-1], 'Import'!C1:C45, 45, FALSE)"
end with

Действительно ли необходимо перенести значения столбца A? Похоже, формула в столбце B может быть так же легко,

with worksheets("Data")
    .Range(.cells(2, "B"), .cells(lr, "B")).Formular1c1 = "=RC45"
end with
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...