我有一个包含大量数组公式的大型工作表。我想使用VBA更新这些公式以包含if语句。基本上我希望新公式为If(year> max_year,If_True_Formula,If_False_Formula)。
通过连接三个字符串并设置ActiveCell.ArrayFormula =三个字符串的结果,这是一个相当简单的任务。但是,如果结果字符串超过255个字符,事情就会变得复杂。在几个实例中,我需要的公式超过255个字符,因此我为If_True_Formula添加了占位符“X_X”,为If_False_Formula添加了“Y_Y”,并使用此方法创建了完整的公式:
With ActiveCell
.FormulaArray = If_Statement
.Replace "X_X", If_True
.Replace "Y_Y", If_False
End With
这很好用,但是我的几个数组公式太长了,所以If_True部分和If_False部分都超过255个字符。为了解决这个问题,我想我可以将每个字符串分成三个部分(我不会超过750个字符的字符串),然后使用修改后的方法在最后创建完整的字符串:
True_1 = ""
If len(If_True) > 255 Then
True_1 = Left(If_True, len(If_True)/3) & "X2_X2"
True_2 = Mid(If_True, len(If_True)/3, len(If_True)/3) & "X3_X3"
True_3 = Mid(If_True, len(True_1) + len(True_2) - 10, len(If_True))
End If
此方法将我的大字符串拆分为三个子字符串,然后我可以使用三个替换语句将三个部分添加到现有字符串中。
With ActiveCell
.FormulaArray = If_Statement
If True_1 = "" Then
.Replace "X_X", If_True
Else
.Replace "X_X", True_1
.Replace "X2_X2", True_2
.Replace "X3_X3", True_3
End If
End With
由于某些奇怪的原因,代码运行时没有错误,但不会对True_1,True_2,True_3进行任何替换。如果初始字符串未被分解,则代码进行适当的替换。很奇怪......
答案 0 :(得分:0)
我在这里发了一个答案:Array formula with more than 255 characters
原因是,公式必须在任何时候被替换。所以你不能用字符串代替。我在A1表示法中创建了一个适用于英语功能的功能。如果您在公式中多次使用if-command并且从未使用过1337行,则可以将其复制并在没有任何efford的情况下使用它。