Запись диапазона в таблицу без значений с использованием массива - PullRequest
1 голос
/ 26 октября 2019

Можно ли записать диапазон на лист только там, где существуют значения? Предполагая, что вы можете дать какой-то специальный тип данных для переменной, такой как нуль? Но очевидно, что 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 - это какой-то пользовательский класс ... Я полагаю, я не могу увеличить производительность сверх этого?

1 Ответ

0 голосов
/ 26 октября 2019

сначала заполните массив значениями диапазона, затем измените требуемые значения массива и, наконец, поместите значения массива в диапазон:

Dim a() As Variant

a = Selection.Value


a(1, 1) = "a"
a(3, 1) = "c"

Selection.Value = a

массив, полученный из значений диапазона, представляет собой массив на основе единицы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...