превосходит быстрый доступ к двумерному массиву, избегая цикла?
У меня есть много листов в моей книге, что я должен получить доступ к hundresds раз. Поэтому я преобразовываю их в массив, и я работаю с данными массива; намного быстрее.
Аспирация массива
dim myArray(1 to 1000, 1 to 2)
если я ищу значение в столбце 2 в соответствии со столбцом 1, прямой прямой путь использует цикл
- Сортировочный массив VBA (Улучшение)
- Excel Array - Множественный индекс соответствия - не обнаружение одного критерия
- Я пытаюсь добавить значения в массив через a для каждого цикла
- Как я могу загрузить индекс цвета каждой ячейки диапазона в массив?
- VBA Хранение нескольких столбцов в массиве во время цикла, а затем возвращаемое значение
for i=1 to 1000 if myArray(i,1)="XXX" then myValue=myArray(i,2) next i
так как я знаю сотни раз, мне интересно, есть ли что-то вроде функции поиска для двухмерного массива или что-то вроде этого:
myvalue=function(myarray(1)="XXX",myarray(2))
благодаря
хосе
- Массивы VBA и операторы
- Смешение VBA Array / Sharepoint
- Проблемы с Vlookup, массивами и коллекциями. в VBA
- Что использовать в качестве логической функции, отличной от If in excel
- Для каждой ячейки в диапазоне добавьте значение ячейки в состояние-IF.
- C # Чтение данных с использованием Microsoft.Office.Interop.Excel
- Vba, выберите динамическую матрицу
- Поиск значений внутри диапазона ячеек
Альтернативным подходом было бы сортировать данные в массиве с помощью QuickSort и использовать алгоритм поиска двоичного поиска. В зависимости от размера ваших массивов и количества раз, когда вы хотите выполнять поиск на массивах, это может быть быстрее. Или вы можете попробовать использовать словарь или коллекцию.
См. Мои сообщения в блогах для примеров и сравнений этих методов.
https://fastexcel.wordpress.com/2011/08/02/developing-faster-lookups-part-3-a-binary-search-udf/
https://fastexcel.wordpress.com/2011/10/26/match-vs-find-vs-variant-array-vba-performance-shootout/
вашему коду нужно « выйти для»,
For i = 1 To 1000 If myArray(i, 1) = "XXX" Then myValue = myArray(i, 2) Exit For End If Next i