Тестирование скорости чтения и записи диапазонов
В процессе работы с электронными таблицами часто приходится переносить значения из массива в диапазон или из диапазона в массив. При этом скорость получения данных из диапазона обычно выше скорости записи. С помощью трюка, который мы сейчас рассмотрим, можно тестировать скорость записи данных массива в диапазон и переноса этих данных обратно в массив.
В стандартном модуле редактора VBA нужно написать код, содержимое которого представлено в листинге 2.42.
Листинг 2.42. Тестирование скорости чтения и записи диапазонов
Sub TableSpeedTest()
Dim alngData() As Long ' Массив с числами
Dim lngCount As Long ' Количество элементов в массиве
Dim dtStart As Date ' Хранит время (и даже дату)
начала _ тестирования
Dim strArrayToTable As String ' Время записи в таблицу
Dim strTableToArray As String ' Время чтения из таблицы
Dim strMessage As String
Dim i As Long
' Подготовка диапазона ячеек
Range(«A:A»).ClearContents
' Ввод размера массива, формирование массива заданного размера
lngCount = InputBox(«Введите количество элементов»)
ReDim alngData(1 To lngCount)
' Заполнение массива данными
For i = 1 To lngCount
alngData(i) = i
Next i
' Перенос массива в таблицу
Application.ScreenUpdating = False
dtStart = Timer
For i = 1 To lngCount
Cells(i, 1) = i
Next i
strArrayToTable = Format(Timer – dtStart, «00:00»)
' Чтение данных из таблицы обратно в массив
dtStart = Timer
For i = 1 To lngCount
alngData(i) = Cells(i, 1)
Next i
strTableToArray = Format(Timer – dtStart, «00:00»)
Application.ScreenUpdating = True
' Вывод на экран результатов тестирования
strMessage = "Запись: " & strArrayToTable & vbCrLf & _
"Чтение: " & strTableToArray
MsgBox strMessage, , lngCount & « элементов»
End Sub
В результате написания данного кода в окне выбора макросов появится макрос TableSpeedTest. После его запуска откроется окно, в котором в поле Введите количество элементов следует с клавиатуры ввести количество элементов и нажать кнопку ОК. По окончании работы макроса на экране отобразится окно, в котором будет показано время (в секундах), необходимое для записи данных массива в диапазон и для считывания их обратно в массив. Например, у одного из авторов этой книги на запись массива из 30 000 элементов было затрачено 17 секунд, а на считывание данных из диапазона обратно в массив – только 1 секунда; массив из 65 000 элементов записывался 37 секунд, а перенос этих данных обратно в массив занял лишь 2 секунды.