如果在一张纸上查看第二张纸,我有一个数组公式,我发现在处理第二张纸时,由于数组公式根据第 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 输入公式
谢谢。
最佳答案
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
关于excel - 公式数组问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60437626/