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

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

Вот мой код, который у меня сейчас есть:

' Section5 Macro
        ActiveCell.FormulaR1C1 = _
            "=VLOOKUP(RC[6],'[PERSONAL.XLSB]Task and Sections'!R2C1:R254C2,2,FALSE)"
        Range("C2").Select
        Selection.Copy 'Copy Vlookup Formula

        Dim lastRow As Long
        lastRow = Range("B" & Rows.Count).End(xlUp).Row
        Range("C3").AutoFill destination:=Range("C3:C" & lastRow) 'Specify range for Column C based off of row count in Column B

        Application.CutCopyMode = False
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False 'Paste Vlookup equation down the column
  End Sub

Формула, которую я хочу скопировать: «= ВПР (RC [6], '[PERSONAL.XLSB] Task and Sections'! R2C1: R254C2,2, FALSE». Я хочу скопировать эту формулу вниз, это столбец C ( во всех строках, кроме C1, который является заголовком). Столбец, который я хочу указать для определения длины строки, - это соседний столбец B.

В настоящее время я получаю сообщение об ошибке «Ошибка компиляции: именованный аргумент не найден».

Любая помощь будет принята с благодарностью!

Спасибо,

0
WJJ 29 Фев 2016 в 21:43

2 ответа

Лучший ответ

Как указано в комментарии, у вас была простая опечатка ("назначение") ... Тем не менее, ваш код, похоже, не работает, даже когда это исправлено. Есть гораздо более простой подход. Попробуй это:

Sub FillWithFormula()
    Dim lastRow As Long
    lastRow = Range("B" & Rows.Count).End(xlUp).Row
    Range("C2:C" & lastRow).FormulaLocal = "=B2*2"
End Sub

Обратите внимание, что я заменил вашу формулу на более простую (не зависящую от внешних данных), чтобы я мог убедиться, что процедура работает.

1
dnep 29 Фев 2016 в 19:05

Вот.

Sub thing()
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, 2).End(xlUp).Row

    Range("C3:C" & lastRow).FormulaR1C1 = "=VLOOKUP(RC[6],'[PERSONAL.XLSB]Task and Sections'!R2C1:R254C2,2,FALSE)"

    Range("C3:C" & lastRow).Value = Range("C3:C" & lastRow).Value
End Sub

Проще, элегантнее. Разве подобные вещи не решались миллион раз в Интернете? В любом случае, копипаст - самое медленное, что вы можете сделать в макросе. Избегай это. Просто установите значения диапазона как значения диапазона. :)

Кроме того, вы можете назначить формулу всему диапазону.

0
vacip 29 Фев 2016 в 19:03