多头排列VBA问题
我试图进入一个长期的数组公式进入VBA即> 255个字符。我遵循了过去的建议,将公式的两个部分变暗并稍后合并它们。我仍然有错误让阵列正常工作,并希望有人可以帮助审查代码。多头排列VBA问题
这里有超过字数限制,我想获得工作的原代码:
Sub TestMacro()
Range("AZ7").Select
Selection.FormulaArray = _
"=SUM(IF(CONCATENATE(R3C3,[@Route],[@[Assumed Coating Type]],[@Diameter],[@[Year Installed (Coating)]])=CONCATENATE(HCA!R26C[86]:R13642C[86],HCA!R26C[-48]:R13642C[-48],HCA!R26C[87]:R13642C[87],HCA!R26C[-19]:R13642C[-19],HCA!R26C[88]:R13642C[88]),HCA!R26C[-36]:R13642C[-36]))"
末次
下面是在半按照以往的建议拆分代码我的最新尝试:https://www.mrexcel.com/forum/excel-questions/853889-long-array-visual-basic-applications-issue.html
http://dailydoseofexcel.com/archives/2005/01/10/entering-long-array-formulas-in-vba/
Sub LongArrayFormula()
Dim theFormulaPart1 As String
Dim theFormulaPart2 As String
theFormulaPart1 = "=SUM(IF(CONCATENATE(R3C3,[@Route],[@[Assumed Coating Type]],[@Diameter],[@[Year Installed (Coating)]])""X_X_X)"")"
theFormulaPart2 = "=CONCATENATE(HCA!R26C[86]:R13642C[86],HCA!R26C[-48]:R13642C[-48],HCA!R26C[87]:R13642C[87],HCA!R26C[-19]:R13642C[-19],HCA!R26C[88]:R13642C[88]),HCA!R26C[-36]:R13642C[-36]))"
With ActiveSheet.Range("AZ7")
.FormulaArray = theFormulaPart1
.Replace """X_X_X)"")", theFormulaPart2
End With
任何帮助表示赞赏,谢谢。
你应该保留你的截断公式在句法上是正确的。试着这样说:
theFormulaPart1 = "=SUM(IF(CONCATENATE(R3C3,[@Route],[@[Assumed Coating Type]],
[@Diameter],[@[Year Installed (Coating)]])=X_X_X,HCA!R26C[-36]:R13642C[-36]))"
' ^^^^^
theFormulaPart2 = "CONCATENATE(HCA!R26C[86]:R13642C[86],HCA!R26C[-48]:R13642C[-48],HCA!R26C[87]:R13642C[87],HCA!R26C[-19]:R13642C[-19],HCA!R26C[88]:R13642C[88])"
With ActiveSheet.Range("AZ7")
.FormulaArray = theFormulaPart1
.Replace "X_X_X", theFormulaPart2
End With
这里我插X_X_X
配方食品中的一些“封闭表达”的地方(可以是任何东西)。从语法的角度来看,截断的公式是正确的,所以语句.FormulaArray = theFormulaPart1
可以接受它。然后更换可以在第二步中进行。
嗨,谢谢你的帮助!脚本运行到其中脚本粘贴“一个小问题= SUM(IF(CONCATENATE($ C $ 3,[@路线],[@ [假定涂布型]],[@直径],[@ [安装年份(涂层)]])=“X_X_X”,HCA!P $ 26:P $ 13642))'在AZ7中。它似乎并没有取代“X_X_X”。有任何想法吗? –
我相信.Replace函数存在问题。我尝试了一些变化,并且试图取代X_X_X并没有取得成功。 –
@WilliamC。被替换的形式不会出现在公式栏中,直到您取消选择然后选择单元格(我不知道为什么)。此外,由此产生的公式也必须是正确的,否则它不会成功。调试这个公式非常困难,所以我认为它是正确的,并用更小的“正确”公式来测试我的代码。 –
你也可以试试这个(
请不要从VBE运行它,试着从表单环境运行它。转到开发宏 - 你的宏运行或从一个按钮或快捷方式运行它将工作没有问题):
Range("AZ7").Select
Selection.Formula = _
"=SUM(IF(CONCATENATE(R3C3,[@Route],[@[Assumed Coating Type]],[@Diameter],[@[Year Installed (Coating)]])=CONCATENATE(HCA!R26C[86]:R13642C[86],HCA!R26C[-48]:R13642C[-48],HCA!R26C[87]:R13642C[87],HCA!R26C[-19]:R13642C[-19],HCA!R26C[88]:R13642C[88]),HCA!R26C[-36]:R13642C[-36]))"
SendKeys "{F2}"
SendKeys "^+{ENTER}"
你真的想在'theFormulaPart2'开始有一个等于?似乎将错误有2等于级联公式中的标志... – Wolfie
嗨@Wolfie,没有,但我已经尝试了两种方式,仍然落得同样的结果。 –