Excel 为什么公式1C1将不需要的括号放入公式中?

Excel 为什么公式1C1将不需要的括号放入公式中?,excel,vba,Excel,Vba,我正在制作一个模板,它将在C列的每个单元格中包含一个公式,我的同事可以将其复制到他的工作表中。为此,我设置了一个可变的行号,以便在同事的工作环境中正常工作 对于i=2到x 表格(“工作表”)。范围(“C”和i)。公式1c1=_ =索引('S2.0-Setup'!B:I,匹配(间接('C”“&ROW()),'S2.0-Setup'!I:I,0),1) 下一个 我希望在C2: =INDEX('S2.0-Setup'!B:I);匹配(间接(“C”&ROW());“S2.0-Setup”!I:I;0)

我正在制作一个模板,它将在
C
列的每个单元格中包含一个公式,我的同事可以将其复制到他的工作表中。为此,我设置了一个可变的行号,以便在同事的工作环境中正常工作

对于i=2到x
表格(“工作表”)。范围(“C”和i)。公式1c1=_
=索引('S2.0-Setup'!B:I,匹配(间接('C”“&ROW()),'S2.0-Setup'!I:I,0),1)
下一个
我希望在
C2

=INDEX('S2.0-Setup'!B:I);匹配(间接(“C”&ROW());“S2.0-Setup”!I:I;0);1)
但结果是:

=INDEX('S2.0-Setup'!B:(I);MATCH(间接(“C”&ROW());'S2.0-Setup'!I:(I);0);1)
因此Excel将这些括号放在范围
B:I
I:I

VBA到Excel公式中 代码
为什么要在一个公式中同时使用A1和R1C1样式?对于列
C
B:I
应该是
C[-1]:C[6]
I:I
应该是
C[6]
。你的意思很可能是
$B:$I
$I:$I
,但是,不管目标单元格是什么,这将是
C2:C9
C9
。你应该使用
.Formula
而不是
.FormulaR1C1
。实际上,看看这个公式,你似乎不需要从R1C1开始。分配给
.Formula
,而不是
.FormulaR1C1
。感谢您的回复。我只是把
.Formula
.formula1c1
混在一起了。现在它工作得完美无缺。
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