ArrayFormula超过255个字符。替换不起作用

时间:2014-04-18 17:55:53

标签: arrays string excel vba

我有一个包含大量数组公式的大型工作表。我想使用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进行任何替换。如果初始字符串未被分解,则代码进行适当的替换。很奇怪......

1 个答案:

答案 0 :(得分:0)

我在这里发了一个答案:Array formula with more than 255 characters

原因是,公式必须在任何时候被替换。所以你不能用字符串代替。我在A1表示法中创建了一个适用于英语功能的功能。如果您在公式中多次使用if-command并且从未使用过1337行,则可以将其复制并在没有任何efford的情况下使用它。