【问题标题】:Converting formula to string将公式转换为字符串
【发布时间】:2019-01-24 01:29:18
【问题描述】:

我在函数中输入了以下公式。

dim minfee, feetier3, feetier4, feetier5, bpspread1, bpsread2, bpspread3 as double

call insformulaincell("=IF(K2 = 100, ""#NA"", IF(K2 <" & minfee & "," & feetier3 & ",IF(K2<" & feetier4 & ",K2+ " & bpspread1 & ",IF(K2<" & feetier5 & ",K2+ " & bpspread2 & ",K2+ " & bpspread3 & "))))")

'all the function does is paste the formula into a cell 
'How would I format the formula so that it can be stored as a single string?
'Ex:

dim sFormula as string 

sformula = ""=IF(K2 = 100, ""#NA"", IF(K2 <" & minfee & "," & feetier3 & ",IF(K2<" & feetier4 & ",K2+ " & bpspread1 & ",IF(K2<" & feetier5 & ",K2+ " & bpspread2 & ",K2+ " & bpspread3 & "))))""

call insformulaincell(sFormula)

主要问题是 minfee 等变量不会引用其实际值,而是出现实际的字符串变量名称。

例如:“... If(K2

【问题讨论】:

  • 删除多余的前导和尾随引号。
  • 我试过了,但它并没有解决变量名不再引用变量值的主要问题

标签: vba


【解决方案1】:

在 VBA 中," 用作 字符串文字 的分隔符,如下所示:

Dim foo As String
foo = "some string"

如果您的字符串文字需要包含" 双引号,则需要转义它们,方法是将它们加倍在字符串分隔符之间

foo = """some string"""

打印上面的内容将产生"some string"包括双引号。

所以你确实需要remove the leading & trailing double quotes

sformula = "=IF(K2 = 100, ""#NA"", IF(K2 <" & minfee & "," & feetier3 & ",IF(K2<" & feetier4 & ",K2+ " & bpspread1 & ",IF(K2<" & feetier5 & ",K2+ " & bpspread2 & ",K2+ " & bpspread3 & "))))"

分解一下,它是以下文字的串联:

  • "=IF(K2 = 100, ""#NA"", IF(K2 &lt;"(注意,"#NA" 是 IMO 的一个坏主意。使用 NA() 函数来产生实际的工作表错误,而不是 看起来像一个字符串值)
  • ","
  • ",IF(K2&lt;"
  • ",K2+ "
  • ",IF(K2&lt;"
  • ",K2+ "
  • ",K2+ "
  • "))))"

我觉得很合适。

可以说,这种串联令人讨厌。自定义 StringFormat 函数可以通过抽象连接来帮助缓解这种情况:

sFormula = StringFormat("=IF(K2=100, ""#NA"", IF(K2<{0},{1},IF(K2<{2},K2+{3},IF(K2<{4},K2+{5},K2+{6}", _
    minfee, feetier3, feetier4, bpspread1, feetier5, bpspread2, bpspread3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    相关资源
    最近更新 更多