【问题标题】:FormulaArray issue公式数组问题
【发布时间】:2020-06-11 17:25:00
【问题描述】:

如果在一张纸上查看第二张纸,我有一个数组公式,我发现在处理第二张纸时,一切都变慢了很多,因为数组公式的不断计算基于新推算的数据表 2。我真的只需要它在有人去表一查看信息时运行。我决定编写一个宏以在激活工作表时触发,然后将数组公式粘贴到正确的单元格中,复制返回的值,然后粘贴为一个值,这样公式就不会保持活动状态。

我遇到的问题是我的宏似乎不想粘贴我的公式(我什至尝试使用宏记录器工具输入公式,但当我尝试重新运行录制的宏时它失败了)。我的错误是“无法设置 Range 类的 FormulaArray 属性”。

代码如下:

Range("U5").Select
Selection.FormulaArray = _
   "=IF(ISERROR(INDEX('Maintenance Setup'!C3,SMALL(IF('Maintenance Setup'!C4=""Switchgear_Switchboard"",ROW('Maintenance Setup'!C4)-ROW(INDEX('Maintenance Setup'!C4,1,1))+1),RC[-1])))=TRUE,"""",INDEX('Maintenance Setup'!C3,SMALL(IF('Maintenance Setup'!C4=""Switchgear_Switchboard"",ROW('Maintenance Setup'!C4)-ROW(INDEX('Maintenance Setup'!C4,1,1))+1),RC[-1])))"

当我手动输入公式时,公式工作正常,“维护设置”是包含所有数据的工作表,Switchgear_Switchboard 是文档正在查找的一些文本,公式中有一个空白,即“”“” "

我也试过让代码使用 A1 符号而不是 R1C1 输入公式

谢谢。

【问题讨论】:

    标签: excel vba excel-formula array-formulas


    【解决方案1】:

    FormulaArray 有 255 个字符的限制。但是,我们可以通过首先对公式的某些部分使用占位符,然后相应地替换这些占位符来解决此限制。

    顺便说一句,使用整列引用是非常低效的。我建议你避免使用它们。

    另外,您可以使用IFERROR 来测试公式是否返回错误,并在错误时返回空白。

    试试下面的代码...

    Dim sourceWorksheet As Worksheet
    Set sourceWorksheet = Worksheets("Maintenance Setup")
    
    Dim lastRow As Long
    Dim formulaPart1 As String
    Dim formulaPart2 As String
    Dim formulaPart3 As String
    With sourceWorksheet
        lastRow = .Cells(.Rows.Count, "D").End(xlUp).Row
        formulaPart1 = "'" & .Name & "'!$C2:$C" & lastRow
        formulaPart2 = "'" & .Name & "'!$D2:$D" & lastRow & "=""Switchgear_Switchboard"""
        formulaPart3 = "ROW('" & .Name & "'!$D2:$D" & lastRow & ")-ROW(INDEX('" & .Name & "'!$D2:$D" & lastRow & ",1,1))+1"
    End With
    
    With Range("U5")
        .FormulaArray = "=IFERROR(INDEX(A_A_A,SMALL(IF(B_B_B,C_C_C),T5)),"""")"
        .Replace "A_A_A", formulaPart1
        .Replace "B_B_B", formulaPart2
        .Replace "C_C_C", formulaPart3
    End With
    

    【讨论】:

      猜你喜欢
      • 2020-12-13
      • 2012-07-06
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多