首页 > 解决方案 > 如何在引号内的公式中写&?

问题描述

我目前正在弄清楚如何在公式中编写“&”,以便 VBA 将其识别为字符串而不是 & 运算符。

我的公式如下所示:

"=AVERAGEIF(RC[-4]:R[" & Total & "]C[-4],"">""&0.5*MAX(RC[-4]:R[" & Total & "]C[-4]))"

但它应该看起来像这样,因为我想使用变量 z 而不是 0.5

"=AVERAGEIF(RC[-4]:R[" & Total & "]C[-4],"">"" & Chr(34)& Chr(38) & Chr(34)& z & *MAX(RC[-4]:R[" & Total & "]C[-4]))"

如您所见,我已经尝试将“”和 & 写为 ASCII,但似乎即使这样也行不通。

在此先感谢您的帮助!

编辑:结果应该是这样的:

=AVERAGEIF(C31:C6413;">"&0.5*MAX(C31:C6413))

编辑:将用整个代码发布另一个问题。看这里

标签: excelvbaexcel-formula

解决方案


我不会使用Chr(34)for"Chr(38)for &,它们是不必要的间接性,使代码更难推理。&不需要转义,并且要"在字符串中包含文字,您可以通过将其加倍来对其进行转义,""""包含单个"字符的字符串也是如此。

用转义的双引号连接长字符串可能是一种令人沮丧的体验……如果我们分解这些步骤,并在运算符周围添加一些空间怎么办?

认知负荷立即减少,逻辑中的任何错误都更容易发现:

Dim avgSourceRangePart As String
avgSourceRangePart = "RC[-4]:R[" & Total & "]C[-4]"

Dim maxPart As String
maxPart = "MAX(RC[-4]:R[" & Total & "]C[-4])"

Dim avgConditionPart As String
avgConditionPart = """>"" & " & z & " * " & maxPart & ")"

现在最终的连接看起来像这样:

"=AVERAGEIF(" & avgSourceRangePart & "; " & avgConditionPart ")"

推荐阅读