VBA Excel R1C1 Формула с использованием метода ячеек - PullRequest
2 голосов
/ 09 января 2012

Я много раз сталкивался с этой проблемой и до сих пор не нашел решения или почему это не сработает.Я хочу использовать метод ячейки для ввода формулы через столбец, и поэтому я пишу это: (просто пример)

    With ws
        iEndCol = .cells(4650,1).End(Xlup).Column
        For i = 2 To iEndCol
            .Cells(i, 2) = "=VLOOKUP([RC-1],Somesheet!someTable,10,FALSE)"
        Next
    End With

, когда это не работает (Ошибка метода) Я пытаюсь что-то вроде этого:

    Cells(i,2).Select
    Do While IsEmpty(ActiveCell.Offset(0, -1)) = False
        ActiveCell.Formula = "=VLOOKUP([RC-1],Somesheet!someTable,10,FALSE))"
        ActiveCell.Offset(1, 0).Select
    Loop

или вместо. Formula, я пробую .FormulaR1C1, .Formulalocal и т. Д., И это тоже не работает.Тогда вот что работает:

    Range("B2").Select
        Do Until IsEmpty(ActiveCell.Offset(0, 5)) And IsEmpty(ActiveCell.Offset(0, 6))
            If IsEmpty(ActiveCell) = False Then
                ActiveCell.Offset(0, 1).Formula = "=VLOOKUP(B2,Somesheet!someTable,10,FALSE)"
            End If
            ActiveCell.Offset(1, 0).Select
        Loop

Что я не понимаю при использовании ячеек для ввода формул?

Ответы [ 2 ]

2 голосов
/ 09 января 2012

Введите формулу с помощью интерфейса Excel (не ваш код).

Теперь перейдите в редактор кода, нажмите Ctrl + G и введите: ? activecell.FormulaR1C1

Результат, =VLOOKUP(RC[-1],Somesheet!sometable,10,FALSE), скажет вам, что вы делаете неправильно. Вы не предоставляете правильный синтаксис RC.

Сказав это, вы всегда должны убедиться, что ваш синтаксис формулы соответствует свойству, которое вы выбрали для установки этой формулы. Используйте обозначение A1 для .Formula и обозначение RC для FormulaR1C1. И не используйте .Value для установки формулы.

1 голос
/ 09 января 2012

Во-первых, у меня сработало следующее:

Set oCell = ActiveCell

Do
    Set oCell = oCell.Offset(0, 1)
    oCell.FormulaR1C1 = "=VLOOKUP(RC[-1],SomeTable,10,FALSE)"
    Set oCell = oCell.Offset(1, -1)
Loop Until IsEmpty(oCell)

Обратите внимание, что в моем синтаксисе я предположил, что SomeTable было определенным именем с областью видимости Workbook, и поэтому мне не нужен префикс.Если SomeTable - это определенное имя, относящееся к определенной рабочей таблице, только тогда вам нужно добавить префикс имени листа (например, Somesheet!SomeTable).

Во-вторых, вы должны проверить, в какую ячейку он пытается поместить формулу, используя Debug.Print oCell.Address.Возможно, он пытается вставить формулу буквально в первый столбец, что приведет к ошибке в формуле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...