VBA插入大数组公式-替换问题

时间:2019-05-29 08:50:10

标签: excel vba array-formulas

最近,我遇到了一个Excel限制,并得知我们不能使用VBA直接在单元格上写一个长度超过255个字符的数组公式。 我在网络上(包括在SO:here上)发现的此问题的解决方案是,将公式的一部分插入单元格后,对其进行替换。

这就是我想要做的:

Sub WriteFormulaArray()
    '------
        Dim SH As Worksheet: Set SH = ThisWorkbook.ActiveSheet
    '------
        Dim StrF1 As String: StrF1 = "=IFERROR(""PART2""/""PART3"",""PART4"")"
        Dim StrF2 As String: StrF2 = "SUMPRODUCT(IF(('01 - Histórico'!R5C6:R101641C6>=RC1-1)*('01 - Histórico'!R5C6:R101641C6<RC1+1)*('01 - Histórico'!R5C8:R101641C8>=R4C-0.125)*('01 - Histórico'!R5C8:R101641C8<R4C+0.125),'01 - Histórico'!R5C5:R101641C5),'01 - Histórico'!R5C10:R101641C10)"
        Dim StrF3 As String: StrF3 = "SUM(IF(('01 - Histórico'!R5C6:R101641C6>=RC1-1)*('01 - Histórico'!R5C6:R101641C6<RC1+1)*('01 - Histórico'!R5C8:R101641C8>=R4C-0.125)*('01 - Histórico'!R5C8:R101641C8<R4C+0.125),'01 - Histórico'!R5C5:R101641C5))"
        Dim StrF4 As String: StrF4 = "MIN(IF(('01 - Histórico'!R5C6:R101641C6>=RC1-1)*('01 - Histórico'!R5C6:R101641C6<RC1+1),'01 - Histórico'!R5C10:R101641C10))"
    '------
        SH.Cells(5, 2).FormulaArray = StrF1
        SH.Cells(5, 2).Replace """PART2""", StrF2, LookAt:=xlPart
        SH.Cells(5, 2).Replace """PART3""", StrF3, LookAt:=xlPart
        SH.Cells(5, 2).Replace """PART4""", StrF4, LookAt:=xlPart
    '------
End Sub

好,由于公式的长度和复杂性,以前的代码很难分析,但是例程不会进行任何替换,只是编写

{=IFERROR("PART2"/"PART3","PART4")}

在单元格B5上(并正确返回"PART4")。

然后我尝试简化代码以查找问题:

Sub WriteFormulaArrayTest()
    '------
        Dim SH As Worksheet: Set SH = ThisWorkbook.ActiveSheet
    '------
        SH.Cells(6, 2).FormulaArray = "=""TEST1"""
        SH.Cells(6, 2).Replace """TEST1""", """TEST2""", LookAt:=xlPart
    '------
End Sub

它工作正常。 但是当我写:

Sub WriteFormulaArrayTest()
    '------
        Dim SH As Worksheet: Set SH = ThisWorkbook.ActiveSheet
    '------
        SH.Cells(6, 2).FormulaArray = "=""TEST1"""
        SH.Cells(6, 2).Replace """TEST1""", "SUM(R5C6:R5C7)", LookAt:=xlPart
    '------
End Sub

替换不再起作用,我感觉这与第一个代码的问题相同。

请注意,例程不会出现任何错误。只是根本不做替换。

我在这里想念什么?谢谢。

0 个答案:

没有答案