gpt4 book ai didi

excel - 将字符串数组传递给 Excel VBA 中的 Range().Formula

转载 作者:行者123 更新时间:2023-12-02 17:22:30 25 4
gpt4 key购买 nike

众所周知,在 VBA 中用值逐个填充单元格的效率比用一组值批量填充单元格的效率要低得多。出于同样的优化原因,我想使用一系列公式来做到这一点。一个非常简单的例子如下:

Sub Fill_Using_Arrays()
Dim i As Long
Dim formulae(1 To 10000) As String

For i = 1 To 10000
formulae(i) = "=$A$" & i
Next i

[A2].Resize(10000).Formula = formulae
End Sub

但是,如果我这样做,它将用“=$A$1”等填充 10k 单元格,而不实际评估表达式。我也尝试在范围内运行 .Calculate ,但这没有任何作用。有可能实现这种行为吗?

最佳答案

在写这个问题时我找到了解决方案:

问题出在字符串数组上。由于开销很小,我通常会远离 Variant。来自 C++ 的人将所有内容都声明为变体感觉非常肮脏,但无论如何,在这种情况下,这显然是必要的,因为传递 String 会将值粘贴为文字字符串。

这对我来说有点违反直觉,因为将单个字符串(而不是数组)传递给 .Formula 属性是有效的。如果有人知道为什么我会很感激这些信息。

无论如何,工作代码是:

Sub Fill_Using_Arrays()
Dim i As Long
Dim formulae(1 To 10000) As Variant ' Only change here

For i = 1 To 10000
formulae(i) = "=$A$" & i
Next i

[A2].Resize(10000).Formula = formulae
End Sub

编辑:明确地说,作为后续行动,我很好奇为什么会这样:

  [A2].Formula = formulae(1)

并将其填充为实际公式,而不是字符串。

关于excel - 将字符串数组传递给 Excel VBA 中的 Range().Formula,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53086946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com