Excel 我如何写作&;在带引号的公式中?
我正在研究如何在公式中写入“&”,以便VBA将其识别为字符串而不是&-运算符 我的公式如下:Excel 我如何写作&;在带引号的公式中?,excel,vba,excel-formula,Excel,Vba,Excel Formula,我正在研究如何在公式中写入“&”,以便VBA将其识别为字符串而不是&-运算符 我的公式如下: "=AVERAGEIF(RC[-4]:R[" & Total & "]C[-4],"">""&0.5*MAX(RC[-4]:R[" & Total & "]C[-4]))" =AVERAGEIF(C31:C6413;">"&
"=AVERAGEIF(RC[-4]:R[" & Total & "]C[-4],"">""&0.5*MAX(RC[-4]:R[" & Total & "]C[-4]))"
=AVERAGEIF(C31:C6413;">"&0.5*MAX(C31:C6413))
"=AVERAGEIF(" & avgSourceRangePart & "; " & avgConditionPart ")"
但是它应该是这样的,因为我想使用变量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(RC[-4]:R[" & Total & "]C[-4],"">""&0.5*MAX(RC[-4]:R[" & Total & "]C[-4]))"
=AVERAGEIF(C31:C6413;">"&0.5*MAX(C31:C6413))
"=AVERAGEIF(" & avgSourceRangePart & "; " & avgConditionPart ")"
编辑:将发布另一个包含完整代码的问题 我不会对使用Chr(34)
“
和Chr(38)
对&
使用Chr(34)
,它们是不必要的间接寻址,使代码更难推理。&
不需要转义,而且在字符串中包含“
文本,可以通过将其加倍来转义,所以”“
是包含单个“
字符的字符串
将长字符串与转义双引号连接起来可能是一种令人沮丧的经历……如果我们将步骤分解,并在运算符周围添加一些空间,会怎么样
认知负荷立即减少,逻辑中的任何错误都更容易发现:
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(RC[-4]:R[" & Total & "]C[-4],"">""&0.5*MAX(RC[-4]:R[" & Total & "]C[-4]))"
=AVERAGEIF(C31:C6413;">"&0.5*MAX(C31:C6413))
"=AVERAGEIF(" & avgSourceRangePart & "; " & avgConditionPart ")"
这应该是您正在寻找的:
“=AVERAGEIF(RC[-4]:R[“&Total&”]C[-4],”>“&z&”*MAX(RC[-4]:R[“&Total&”]C[-4]))
试试这个:“=AVERAGEIF(RC[-4]:R[“&Total&”]C[-4],”>“&&z&”*MAX(RC[-4]:R[“&Total&”]C[-4]))仍然是错误'1004',注意语法高亮显示(在VBE中使用标准高亮显示可能不太明显):&Total&
正在由VBA作为变量进行评估(如果未声明,并且您有显式的选项
代码未编译?);如果您希望Excel计算引擎而不是VBA对&Total&
进行计算,则需要将(/escape)这些引号加倍(/escape):=AVERAGEIF(RC[-4]:R[&Total&][C[-4],“>”&0.5*MAX(RC[-4]:R[&Total&]C[-4]))“
,现在Total
有望被Excel解析(命名范围?)”。感谢您的提示,但我希望将&Total&注册为变量。这与第一个代码窗口中所写的一样完美。我只希望将公式中的0.5替换为一个名为z的双精度变量。因此,我在公式中还需要一个“&”,但VBA识别出“&”作为一个操作符,你缺少了双引号。单元格(21,7)。公式=“=AVERAGEIF(RC[-4]:R[”&Total&“]C[-4],“>”&&z&“&MAX(RC[-4]:R[”&Total&“]C[-4])仍然会给我同样的错误:(我做单元格(21,7)时没有错误。公式=“=AVERAGEIF(RC[-4]:R[&Total&]C[-4],“>”&z&&MAX(RC[-4]:R[-4],“&Total&]C[-4],”)
。单元格值是#DIV/0
,因为我的工作表是空的,但当我添加数字时,它会按预期工作。我能看到错误的唯一方法是如果总计
是无效输入,如果z
不是数字或。单元格
不在带z的中,并且是两倍的总和。错误消息age 1004“应用程序定义或对象定义错误”关于.Cells
,在With
语句中是否有有效的范围引用?键入错误匹配error@Proliner不在此代码中。您没有向任何人显示Total
和z
的来源。如果它们来自单元格值,则它们可以是变量/错误
,并且不能隐式将这样一个值转换为字符串(或其他任何形式)。哦,抱歉,当然;将z调为双z=工作表(1)。范围(“O1”)。将总计调为长总计的值调为长总计=wb。工作表(1)。范围(“a:a”)。单元格。特殊单元格(xlCellTypeConstants).count看起来不需要z
,并且应该在生成的公式中显示为Sheet1!O1
。但是,哪条指令引发了类型不匹配?如果涉及变量/错误
,则位于z=工作表(1).范围(“O1”).Value
,或者在Total=…
处,如果计数
产生一个错误值。刚刚找到答案/问题:由于我使用德语作为办公语言,我们通常将双位数写为0,5。VBA希望公式中的双位数为0.5,这会导致一个错误。因此,我必须找出如何从“,”到“,”无论如何,在我获得足够的声誉后,我会投票支持你的两个答案。谢谢你的耐心和帮助!:)