2017-05-03 81 views
3

我试图进入一个长期的数组公式进入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 

任何帮助表示赞赏,谢谢。

+0

你真的想在'theFormulaPart2'开始有一个等于?似乎将错误有2等于级联公式中的标志... – Wolfie

+0

嗨@Wolfie,没有,但我已经尝试了两种方式,仍然落得同样的结果。 –

回答

2

你应该保留你的截断公式在句法上是正确的。试着这样说:

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可以接受它。然后更换可以在第二步中进行。

+0

嗨,谢谢你的帮助!脚本运行到其中脚本粘贴“一个小问题= SUM(IF(CONCATENATE($ C $ 3,[@路线],[@ [假定涂布型]],[@直径],[@ [安装年份(涂层)]])=“X_X_X”,HCA!P $ 26:P $ 13642))'在AZ7中。它似乎并没有取代“X_X_X”。有任何想法吗? –

+0

我相信.Replace函数存在问题。我尝试了一些变化,并且试图取代X_X_X并没有取得成功。 –

+1

@WilliamC。被替换的形式不会出现在公式栏中,直到您取消选择然后选择单元格(我不知道为什么)。此外,由此产生的公式也必须是正确的,否则它不会成功。调试这个公式非常困难,所以我认为它是正确的,并用更小的“正确”公式来测试我的代码。 –

0

你也可以试试这个(
请不要从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}"