在R1C1公式构造中使用变量

时间:2014-11-26 17:55:36

标签: excel vba reference

我不能让这个公式接受变量作为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,但这会改变其他细胞。

1 个答案:

答案 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,这更符合您对EXPLN的使用。

我在尝试使连锁公式正确时学到的另一个技巧是用单引号作为前缀,以便它作为字符串进入单元格。如果你回到工作表并删除单引号,Excel会很快告诉你是否正确地得到了公式的语法,如果你这样做了,结果会告诉你是否正确的公式。