【问题标题】:Put formulas from an array to Excel table column将公式从数组放入 Excel 表格列
【发布时间】:2014-11-12 19:26:01
【问题描述】:

使用 Excel VBA 宏,我正在构建一个 Excel 表 (listobject),其中包含多个数据列(其中包含值)和一个包含公式的列。这些公式对于每一行都是不同的。这些公式由vba构造并存储在一个数组中,最后只在表格列中放置一次。这是速度问题所必需的。

我的问题是存储在列中的结果公式都是相同的。它们是数组的第一个元素。

注意事项:

  • “AutoFillFormulasInLists”设置为 FALSE。
  • 如果我尝试存储值而不是公式,则一切正常。
  • 如果我尝试执行相同的逻辑但将公式放在一个简单的单元格区域中,一切正常。

这是我用来用公式填充表格列的代码的一个非常简化的示例:

Dim sformulas(1 To 3) As String
sformulas(1) = "=""x"""
sformulas(2) = "=""y"""
sformulas(3) = "=""z"""
ActiveSheet.ListObjects("Table1").ListColumns("ColumnX").DataBodyRange.Formula = Application.Transpose(sformulas)

ColumnX 中的结果公式都是 ="x"

但我希望有 ="x"、="y" 和 ="z"

有没有办法在表格中存储正确的公式?

【问题讨论】:

    标签: arrays excel excel-formula vba


    【解决方案1】:

    我可以重现您的错误的唯一方法是当第一个值是字符串公式的字符串时。我无法以其他方式重现它。

    Dim a As Variant
    a = Array("x", "=""y""", "=""z""")
    
    Dim xRange As Range
    Set xRange = ActiveSheet.ListObjects("Table1").ListColumns("Column2").DataBodyRange
    
    xRange.Formula = Application.Transpose(a)
    

    工作得很好。但a = Array("=""x""", "y", "z") 产生所有“x”。

    虽然我无法解释为什么会发生这种情况,但我可以提供一个解决方法。您不必要地使用常数公式。只需使用Array("x", "y", "z")DataBodyRange.Value 代替公式即可(尽管它们的效果相同。)

    如果您使用公式将单元格保留为 TEXT,则将范围从 General 设置为 Text 的 Numberformat

    Dim a As Variant
    a = Array("0001", "0004", "0002")
    
    Dim xRange As Range
    Set xRange = ActiveSheet.ListObjects("Table1").ListColumns("Column2").DataBodyRange
    
    With xRange
        .NumberFormat = "@" ' text format
        .value = Application.Transpose(a)
    End With
    

    这将给出“0001”、“0004”、“0002”而不是 1、4、2。

    【讨论】:

    • 感谢您的回答。但是,我确实需要存储复杂的 Excel 公式,而不仅仅是常量或值。 "="x"" 只是输入公式的一种简单方法。我将使用的公式是使用函数,具有同一个表格的单元格,以及其他工作表的单元格。我真的需要找到一个可以在表格中输入复杂公式的解决方案。我发现的唯一解决方法是在存储公式数组的 excel 表之外创建一个名称范围,然后在 excel 表中使用 INDEX() 函数使用此名称范围来获得结果值。
    • 您是否只是将函数用引号括起来,例如"=""Average(A1:A5)""",或者您的方程式中是否有字符串常量,例如"=CONCATENATE(A1, "" sales"")"
    猜你喜欢
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多