@ ExcelHero указал мне, как это сделать, вот как.
Если ваш диапазон горизонтальный, просто передайте ему массив, построенный из строк формата:
[a1:c1].NumberFormat = Array("hh:mm", "General", "$#,##0.00")
Если ваш диапазон вертикальный, то транспонируйте этот массив, так как Excel считает массивы горизонтальными:
[a1:a3].NumberFormat = WorksheetFunction.Transpose(Array("hh:mm", "General", "$#,##0.00"))
Старый ответ:
Нет, вы не можете делать каждую ячейку отдельно, хотя вы можете массово назначить один формат всему диапазону.
Свойство Range для присваивания - .NumberFormat
. Если вы создаете вариантный массив строк для назначения в качестве формата, а затем назначаете его диапазону, применяется только первый элемент (и он применяется ко всем ячейкам диапазона).
Итак, лучшее, что вы можете сделать, это цикл:
Dim r As Range
Dim v(1 To 3) As Variant
Dim i As Integer
Set r = Range("A1:A3")
v(1) = "hh:mm:ss"
v(2) = "General"
v(3) = "$#,##0.00_);[Red]($#,##0.00)"
For i = 1 to 3
r(i).NumberFormat = v(i)
Next i