excel - 公式数组问题

标签 excel vba excel-formula array-formulas

如果在一张纸上查看第二张纸,我有一个数组公式,我发现在处理第二张纸时,由于数组公式根据第 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/

相关文章:

excel - 如果单元格编号 123456 包含 1 如果不为空,则将 x 放入单元格中

excel - 如何在 Excel 中一次替换多个字符串?

vba - 将集合添加为另一个集合中的项目 - 类 - Excel VBA

vba - 有没有一种方法可以导出 Excel 工作表而不复制到工作簿?

c# - 有没有办法以编程方式将数字签名添加到 word 文档中的 VBA 宏?

vba - 多行 If 语句

excel - VBA 将复杂的嵌套 IF AND 公式写入工作表

vba - 如何自动移动列表框上的滚动条以显示所选项目 - VBA

sql - adodb:createparameter 有什么作用?

vba - 如何通过VBA选择SAP系统