Вы также можете вернуть Variant()
, который представляет массив значений. Вот пример для функции, которая инвертирует значения из диапазона в новый диапазон:
Public Function ReverseValues(ByRef r_values As Range) As Variant()
Dim i As Integer, j As Integer, N As Integer, M As Integer
Dim y() As Variant
N = r_values.Rows.Count
M = r_values.Columns.Count
y = r_values.value 'copy values from sheet into an array
'y now is a Variant(1 to N, 1 to M)
Dim t as Variant
For i = 1 To N / 2
For j = 1 To M
t = y(i, j)
y(i, j) = y(N - i + 1, j)
y(N - i + 1, j) = t
Next j
Next i
ReverseValues = y
End Function
В рабочей таблице вы должны применить эту функцию как формулу массива (с Ctrl
- Shift
- Enter
) с соответствующим количеством выбранных ячеек. Детали функции Swap () здесь не важны.
Обратите внимание , что для многих строк это очень эффективно. Выполнение операций x = Range.Value
и Range.Value = x
, когда x
является массивом, а диапазон содержит столбцы из нескольких строк, в много раз быстрее, чем выполнение операций одна за другой непосредственно в ячейках.