首页 文章

将数组中的公式放入Excel表列

提问于
浏览
0

使用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”

有没有办法在表格中存储适当的公式?

1 回答

  • 0

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

    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,则将范围的 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 .

相关问题