Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 数组公式超过255个字符。替换为不工作_Arrays_String_Excel_Vba - Fatal编程技术网

Arrays 数组公式超过255个字符。替换为不工作

Arrays 数组公式超过255个字符。替换为不工作,arrays,string,excel,vba,Arrays,String,Excel,Vba,我有一个很大的工作表,里面有一堆数组公式。我想使用VBA更新这些公式以包含if语句。基本上,我希望新公式是Ifear>max\u year,If\u True\u公式,If\u False\u公式 通过连接三个字符串并设置ActiveCell.ArrayFormula=这三个字符串的结果,这是一项相当简单的任务。但是,如果结果字符串超过255个字符,事情就会变得复杂起来。在一些情况下,我需要的公式确实超过了255个字符,因此我为If_True_公式添加了占位符X_X,为If_False_公式添加

我有一个很大的工作表,里面有一堆数组公式。我想使用VBA更新这些公式以包含if语句。基本上,我希望新公式是Ifear>max\u year,If\u True\u公式,If\u False\u公式

通过连接三个字符串并设置ActiveCell.ArrayFormula=这三个字符串的结果,这是一项相当简单的任务。但是,如果结果字符串超过255个字符,事情就会变得复杂起来。在一些情况下,我需要的公式确实超过了255个字符,因此我为If_True_公式添加了占位符X_X,为If_False_公式添加了占位符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
这个方法将我的大字符串拆分为三个子字符串,然后我可以使用三个replace语句将三个片段添加到现有字符串中

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。如果初始字符串没有被分解,代码将进行适当的替换。非常奇怪…

我在这里发布了一个答案:

原因是,这些公式必须有意义,才能随时被替换。所以不能用字符串替换。我制作了一个用A1符号表示英语函数的函数。如果您在公式中多次使用If命令,但从未使用过第1337行,则可以复制它并使用它,而不会产生任何影响。

也可以尝试。替换内容:=X\u X,替换:=True\u 1,查看:=xlPart等等