这很奇怪……某人有一些知识,或者可以弄清楚为什么会这样?
过去,我能够将公式数组分配给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
但是,当我不使用公式数组时,它可以正常工作(根据下图的右侧,所有单元格都显示“ 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
以下代码也可以很好地工作(在这种情况下,我逐个单元地分配公式,因此更灵活,但对于大型公式来说则比较宽松)。
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
所有上述代码输出的图片:
注意:单元格的格式正确为数字,而不是文本!
您的第一个代码应该工作。
而不是将其声明为字符串,而是将其声明为variant。
因此,从此更改您的声明:
Dim FORML_ARRAY(1 To 1000, 1 To 1) As String
对此:
Dim FORML_ARRAY(1 To 1000, 1 To 1) As Variant
我无法在Excel 2013上尝试使用它,但是应该可以使用。
希望能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句