Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 我如何写作&;在带引号的公式中?_Excel_Vba_Excel Formula - Fatal编程技术网

Excel 我如何写作&;在带引号的公式中?

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;">"&

我正在研究如何在公式中写入“&”,以便VBA将其识别为字符串而不是&-运算符

我的公式如下:

"=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,这会导致一个错误。因此,我必须找出如何从“,”到“,”无论如何,在我获得足够的声誉后,我会投票支持你的两个答案。谢谢你的耐心和帮助!:)