变体数组删除 excel 中的公式

Varriant Array remove formulas in excel

你好,我最近发现了通过变体数组进行循环的非常快速的方法

    With Sht
        LongY = .Rows.Count
        Dat = .Formula

         For r = 5 To 6 'LongY
          If (Dat(r, 1) = "" Or Dat(r, 4) = "") Then GoTo IgnoRow

          LongX = .Columns.Count
          For s = 26 To 27 'LongX
           If (Dat(2, s) = 0 Or Dat(2, s) = "") Then GoTo IgnoCol 'Or Dat(1, s).EntireColumn.Hidden = True
           Price = Dat(2, s)
           Ammount = Dat(r, 4)
           Base = Dat(r, s)

           Material = Application.WorksheetFunction.RoundUp((Base * Ammount), 2) 'no .values => text
           'MsgBox (Material)
           'CPrice = Material * Price
           'Cost = Cost + CPrice
IgnoCol:
                 Next

         'Dat(r, 5) = Cost
         'Cost = ""
IgnoRow:
          Next
         Sht.Formula = Dat
    End With

End Sub

但我不知道它是如何工作的,这给我带来了麻烦。我有很大的输入区域(也有公式),所以当我在这个区域循环时,我所有的 EXCEL FORMULAS 转换为 .values,我不知道如何避免这种情况。

感谢您的任何想法。

删除了无关紧要的内容后,您的原始代码将执行以下操作:

With Table          ' Note: Table is a Range
    Dat = .Value    ' Dat is now an array of values, with Table.Rows.Count rows
                    '     and Table.Columns.Count columns.
    .Value = .Dat   ' This copies all the values back into the Table cells, 
                    '     replacing any existing formulas with their values.
End With

将 Excel 范围内的所有值提取到 VBA 数组中是一种我以前从未见过的技术,但它速度非常快并且代码易于阅读,所以我会从现在开始使用它。

但这种便利是有代价的。如果将 VBA 数组中的所有值都传回范围,则会清除所有公式。

如果您提取的是公式而不是值(这样您就可以安全地复制回来),您将无法访问任何基于公式的单元格的值。这就是您最近的代码失败的原因。

最简单的解决方案是提取值和公式,但只复制回公式。

Dim Formulas() As Variant, Values() As Variant
With Sht        ' Sht is a Range object
    Values = .Value
    Formulas = .Formula
    For r = ...
        For s = ...
            price = Values(2, s)
            Ammount = Values(r, 4)
            Base = Values(r, s)
            Material = Round(Base * Ammount + 0.005, 2) ' Round Up
            Cost = ...
        Next
        Formulas(r, 5) = Cost
    Next
    .Formula = Formulas
End With