Можно ли записать диапазон на лист только там, где существуют значения? Предполагая, что вы можете дать какой-то специальный тип данных для переменной, такой как нуль? Но очевидно, что null просто очищает ячейку.
например:
Sub test2()
Dim a(2, 1) As Variant
a(0, 0) = "a"
a(1, 0) = Null
a(2, 0) = "c"
Selection = a
End Sub
Зачем мне это нужно? Чтобы ускорить обновление значений листа, потому что запись всего массива на лист намного быстрее, чем запись одной строки.
EDIT1: Вот что я сделал:
For i = 0 To rowi
Call CellAddMerged(RngData(1 + i, mvaln), rsrows(j, i), mcol)
Next
Private Sub CellAddMerged(ByRef DestCell As Range, ByVal SourceItems As Collection, ByRef qcolumn As settingscolumns)
Dim sitm As Variant
Select Case qcolumn.Preprocess
Case 1 ' trim
sitm = Application.WorksheetFunction.Trim$(SourceItems(1))
Case 2 ' degrees
If IsNumeric(SourceItems(1)) = True Then
sitm = Application.WorksheetFunction.Degrees(SourceItems(1))
Else
sitm = SourceItems(1)
End If
Case 3 ' radians
If IsNumeric(SourceItems(1)) = True Then
sitm = Application.WorksheetFunction.Radians(SourceItems(1))
Else
sitm = SourceItems(1)
End If
Case Else
sitm = SourceItems(1)
End Select
If LenB(SourceItems(1)) > 0 Then
If Opt.ValidationExists(DestCell) = True Then
DestCell.Validation.Modify Formula1:=DestCell.Validation.Formula1 & listdelim & sitm
Else
DestCell.Validation.Add Type:=xlValidateList, Formula1:=sitm
If qcolumn.PullDownAllNotOn = True Then DestCell.Validation.ShowError = True Else DestCell.Validation.ShowError = False
End If
If LenB(DestCell) = 0 Then DestCell = sitm
End If
End Sub
RngData - это листассортимент. rsrows (j, i) массив с коллекциями. mcol - это какой-то пользовательский класс ... Я полагаю, я не могу увеличить производительность сверх этого?