克服255个字符。 Excel VBA中的公式数组限制

我需要一个数组插入到一个特定的单元格,我一直运行到1004错误。 这里是代码:

Range("o37").FormulaArray = "=CONCATENATE(SUM(IF(('2016 Summary'!$T$4:$T$39<=" & mon & ")*" & _ "('2016 Summary'!$D$4:$D$39>0)*('2016 Summary'!$T$4:$T$39+'2016 Summary'!$D$4:$D$39>" & mon & ")*" & _ "('2016 Summary'!$S$4:$S$39=TRUE),(1),IF(('2016 Summary'!$T$4:$T$39<=" & mon & ")*('2016 Summary'!$S$4:$S$39=TRUE)*" & _ "('2016 Summary'!$D$4:$D$39=0),(1),0)))&"" - Employees"")" 

该arrays应该被插入到O37 ,并且基于活动单元列的“mon”variables。 当我手动将它放在工作表中时,该公式将起作用。 我试图用.replace拆分它,并得到相同的错误。 我能做些什么来使这个配方数组工作?

取决于monvariables中的值的长度,看起来你的数组公式只是略微超过290-310个字符的限制,其中很大一部分是由外部工作表名称组成的(例如“2016 Summary”) 。 暂时将工作表名称更改为单个字符足以将公式降低到〜190-210个字符范围; 足以将公式填充到单元格的Range.FormulaArray属性中 。

  Dim strWS As String, chrWS As String strWS = "2016 Summary" chrWS = Chr(167) '<~~ any unque, legal, single character that can be temporarily used as a worksheet name With Worksheets(strWS) .Name = Chr(167) End With With Worksheets("worksheet_with_array_formula") .Range("o37").FormulaArray = "=CONCATENATE(SUM(IF((" & chrWS & "!$T$4:$T$39<=" & mon & ")*" & _ "(" & chrWS & "!$D$4:$D$39>0)*(" & chrWS & "!$T$4:$T$39+" & chrWS & "!$D$4:$D$39>" & mon & ")*" & _ "(" & chrWS & "!$S$4:$S$39=TRUE),(1),IF((" & chrWS & "!$T$4:$T$39<=" & mon & ")*(" & chrWS & "!$S$4:$S$39=TRUE)*" & _ "(" & chrWS & "!$D$4:$D$39=0),(1),0)))&"" - Employees"")" End With With Worksheets(chrWS) .Name = strWS End With 

Excel将更改公式中的工作表名称,添加包装刻度(例如'2016 Summary'!$T$4:$T$39 )以补偿新(旧)工作表名称中的空间。

如果您提供了更多关于mon的价值以及“2016年摘要”工作表中的一些样本数据的详细信息,那么也可以改进公式。 乍一看,看起来arrays公式可能不是绝对必要的。