Почему FormulaR1C1 помещает нежелательные скобки в формулу? - PullRequest
0 голосов
/ 04 января 2019

Я делаю шаблон, который будет включать формулу в каждую ячейку столбца C, которую мой коллега может просто скопировать на свои рабочие листы. Для этого я поместил переменный номер строки для правильной работы в рабочей среде моего коллеги.

For i = 2 To x
    Sheets("Worksheet").Range("C" & i).FormulaR1C1 = _
        "=INDEX('S2.0 - Setup'!B:I,MATCH(INDIRECT(""C"" & ROW()),'S2.0 - Setup'!I:I,0),1)"
Next

Я ожидаю быть в C2:

=INDEX('S2.0 - Setup'!B:I);MATCH(INDIRECT("C" & ROW());'S2.0 - Setup'!I:I;0);1)

Но результат:

=INDEX('S2.0 - Setup'!B:(I);MATCH(INDIRECT("C" & ROW());'S2.0 - Setup'!I:(I);0);1)

Таким образом, Excel помещает эти скобки в диапазоны B:I и I:I.

1 Ответ

0 голосов
/ 04 января 2019

Формула VBA в Excel

Код

Sub VBAtoExcelFormula()

    Const cVntSource As String = "S2.0 - Setup"   ' Source Worksheet Name/Index
    Const cVntTarget As String = "Worksheet"      ' Target Worksheet Name/Index
    Const cStrFirstColumn As String = "B"  ' Source First Column Letter
    Const cStrLRColumn As String = "I"     ' Source Last Row Column Letter
    Const cStrFormula As String = "C"      ' Target Formula Column Letter

    Dim i As Long             ' Row Counter
    Dim lngLastRow As Long    ' Source/Target Last Row
    Dim strFormula As String  ' Formula String

    With Sheets(cVntSource)
        lngLastRow = .Cells(.Rows.Count, cStrLRColumn).End(xlUp).Row
    End With

    For i = 2 To lngLastRow
        strFormula = "=INDEX('" & cVntSource & "'!" & cStrFirstColumn _
                & ":" & cStrLRColumn & ",MATCH(INDIRECT(""" & cStrFormula _
                & """&ROW()),'" & cVntSource & "'!" & cStrLRColumn _
                & ":" & cStrLRColumn & ",0),1)"
        Debug.Print strFormula
        Sheets(cVntTarget).Cells(i, cStrFormula).Formula = strFormula
    Next

End Sub

Sub VBAtoExcelFormulaShort()

    Const cVntLRColumn As Variant = "I"  ' Source Last Row Column Letter/Number

    Dim i As Long             ' Row Counter
    Dim lngLastRow As Long    ' Source/Target Last Row
    Dim strFormula As String  ' Formula String

    With Sheets("S2.0 - Setup")
        lngLastRow = .Cells(.Rows.Count, cVntLRColumn).End(xlUp).Row
    End With
    For i = 2 To lngLastRow
        strFormula = "=INDEX('S2.0 - Setup'!B:I,MATCH(INDIRECT(""C""&ROW()),'" _
                & "S2.0 - Setup'!I:I,0),1)"
        Debug.Print strFormula
        Sheets("Worksheet").Cells(i, "C").Formula = strFormula
    Next

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