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