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

时间:2014-09-18 12:43:04

标签: arrays excel excel-vba excel-formula vba

使用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 :(得分: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,则将范围的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。