A.S*_*erh 5 arrays excel performance vba excel-vba
这很奇怪......有人知道或者可以弄清楚为什么会这样?
在过去,我能够为Excel范围分配一个公式数组(快速赋值示例:) Range("A1:A1000") = ArrayOfFormulas.与逐个细胞分配相比,它工作得很好并且非常快(非常 快)(逐个细胞的示例:Range("A" & i).Formula=ArrayOfFormula(i)在循环内.很慢!).
我现在正在使用Excel 2013,并且当尝试将存储在字符串数组中的公式分配给excel范围时,它不起作用(excel显示公式,但不是根据下图左侧部分的计算)遗憾的是,我无法检索旧代码进行比较.例如,以下代码在A1到A1000的范围内显示"= 1 + 2"而不是"3".
Sub AssignFormulas_1()
Dim i as Long
Dim FORML_ARRAY(1 To 1000, 1 To 1) As String
For i = 1 To 1000
FORML_ARRAY(i, 1) = "=1+2"
Next i
Range("A1:A1000").Formula = FORML_ARRAY '<- Don't work as formula
' It put the value!
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,当我不使用公式数组时,它工作正常(所有单元格显示"3"而不是"= 1 + 2",如下图右侧所示).这里的代码:
Sub AssignFormulas_2()
Dim i as Long
Dim FORML_SINGLE As String
FORML_SINGLE = "=1+2"
Range("A1:A1000").Formula = FORML_SINGLE '<- works ok, not practical for my
' real life case as I need
' different formula for each cell.
End Sub
Run Code Online (Sandbox Code Playgroud)
下面的代码也可以正常工作(在这种情况下,我逐个单元地分配公式,因此对于大型公式来说更灵活但是很有用).
Sub AssignFormulas_3()
Dim i as Long
Dim FORML_ARRAY(1 To 1000, 1 To 1) As String
For i = 1 To 1000
FORML_ARRAY(i, 1) = "=1+2"
Range("A1:A" & i).Formula = FORML_ARRAY(i, 1) '<- works ok, but slowly
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)
上面所有代码输出的图片:

注意:单元格格式正确,不是文本!
你的第一个代码应该工作.
而不是将其声明为字符串,将其声明为变体.
所以改变你的声明:
Dim FORML_ARRAY(1 To 1000, 1 To 1) As String
Run Code Online (Sandbox Code Playgroud)
对此:
Dim FORML_ARRAY(1 To 1000, 1 To 1) As Variant
Run Code Online (Sandbox Code Playgroud)
我无法在Excel 2013上尝试它,但它应该工作.
希望它能做到.