Это странно ... Кто-то знает или может понять, почему это происходит?Странное поведение при назначении массива VBA формулам диапазона excel
В прошлом мне удалось присвоить массив формул диапазону Excel (Пример быстрого назначения:Range("A1:A1000") = ArrayOfFormulas
). Он работал отлично и БЫСТРО (оченьБЫСТРО) по сравнению с назначения по ячейкам (Пример клеточной клетки:. Range("A" & i).Formula=ArrayOfFormula(i)
внутри цикла медленный!).
Я работаю с Excel 2013 сейчас, и при попытке присвоить формулы, хранящиеся в массиве строк, в диапазон excel, он не работает (Эксел показывает формулировку, но не вычисляет как левую часть на картинке ниже), к сожалению, я не могу получить старый код для сравнения. Например, следующий код показывает «= 1 + 2» вместо «3» в диапазоне от A1 до A1000.
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
Следующий код работы также хорошо (В данном случае я задаю формул по ячейкам, так является более гибким, но sloooowly для больших формул).
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
Изображения с выходом всех выше кода:
Примечание: Клетки правильно отформатированные как число, а не текст!
Нет 2013, чтобы проверить, но я нашел [этот документ MSDN] (http://msdn.microsoft.com/en-us/library/ff837104.aspx), которые могут быть полезны. – Passerby
@Passerby, спасибо, но FormulaArray() предназначен для чего-то другого. Он предназначен для работы с матрицами или массивами Excel, но не для массива VBA. Используя FormulaArray(), вы получите в своей ячейке формулу '{= Sum (A1: A3)}', а не '= Sum (A1: A3)'. –
Из любопытства, Когда это когда-нибудь будет практичным? Ваше время тратится на заполнение массива формулой, чтобы написать формулы в диапазон, который затем должен быть рассчитан?!?! Почему бы не просто заполнить диапазон формулами? Или делать вычисления в массиве и заполнять диапазон вычислениями? Какую причину у вас есть для вас, не говоря о том, что он ошибается, просто пытаясь понять, почему. Просто кажется, что в то время, которое вы сделали бы, чтобы заполнить массив, который вы могли бы выполнять вычисление (быстрее, чем позволить вычислениям), ИЛИ чтобы вы могли полностью пропустить массив и просто добавить формулы напрямую. – user2140261