我不能让这个公式接受变量作为R1C1公式中的行。
ActiveCell.FormulaR1C1 = _
"=+IF(TipoLinea(NomeFoglioCorrente2(),""Grafico 2"",1,1)=""Esponenziale"",(R" & NumeroRighe + 13 & "C9*EXP(R" & NumeroRighe + 13 & "C10*RC8))," & Chr(10) & "IF(TipoLinea(NomeFoglioCorrente2(),""Grafico 2"",1,1)=""Logaritmica"",(R" & NumeroRighe + 13 & "C9*LN(RC8)+R" & NumeroRighe + 13 & "C10)," & Chr(10) & "IF(TipoLinea(NomeFoglioCorrente2(),""Grafico 2"",1,1)=""Lineare"",(R" & NumeroRighe + 13 & "C9*RC8+R" & NumeroRighe + 13 & "C10)," & Chr(10) & "IF(TipoLinea(NomeFoglioCorrente2(),""Grafico 2"",1,1)=""Potenza"",(R" & NumeroRighe + 13 & "C9*(RC8^(R" & NumeroRighe + 13 & "C10)" & _
"rore""))))"
TipoLinea()
和NomeFoglioCorrente2()
是自定义函数。
NumeroRighe
+ 13在我的测试中等于313,但这会改变其他细胞。
答案 0 :(得分:0)
当处理包含带引号字符串的动态构造的公式时,我喜欢避免使用单引号来使用双引号,并在公式填充到单元格之前替换它们。
Dim sFRM As String, sLFSP As String
sLFSP = Chr(10) & Chr(32) & Chr(32)
NumeroRighe = 300
sFRM = _
"=IF(TipoLinea(NomeFoglioCorrente2(),'Grafico 2',1,1)='Esponenziale',R" & NumeroRighe + 13 & "C9*EXP(R" & NumeroRighe + 13 & "C10*RC8)," & sLFSP & _
"IF(TipoLinea(NomeFoglioCorrente2(),'Grafico 2',1,1)='Logaritmica', R" & NumeroRighe + 13 & "C9*LN(RC8)+R" & NumeroRighe + 13 & "C10," & sLFSP & _
"IF(TipoLinea(NomeFoglioCorrente2(),'Grafico 2',1,1)='Lineare', R" & NumeroRighe + 13 & "C9*RC8+R" & NumeroRighe + 13 & "C10," & sLFSP & _
"IF(TipoLinea(NomeFoglioCorrente2(),'Grafico 2',1,1)='Potenza', R" & NumeroRighe + 13 & "C9*POWER(RC8, R" & NumeroRighe + 13 & "C10), 'rore'))))"
ActiveCell.FormulaR1C1 = Replace(sFRM, Chr(39), Chr(34))
'ActiveCell.FormulaR1C1 = Chr(39) & Replace(sFRM, Chr(39), Chr(34)) ' use this to check formula
我保留了在公式中使用换行符的帮助,以便在公式栏中对其进行手动检查。我还从计算部分中删除了不必要的括号,因为数学层次的一般规则应该足以涵盖这一点。不过,我确实介绍了POWER
,这更符合您对EXP
和LN
的使用。
我在尝试使连锁公式正确时学到的另一个技巧是用单引号作为前缀,以便它作为字符串进入单元格。如果你回到工作表并删除单引号,Excel会很快告诉你是否正确地得到了公式的语法,如果你这样做了,结果会告诉你是否正确的公式。