Найти в Дзене
SineD

Создание функции в VBA Excel по возврату массива индексов совпадений

Массив в VBA - это структура данных, которая позволяет хранить набор значений одного типа данных под одним именем переменной. Каждый элемент массива имеет свой индекс (номер), начинающийся с нуля (как правило), и содержит значение определенного типа данных. Достаточно хорошо известно, что для более быстрой работы с кодом в VBA Excel рекомендуется работать с массивами и уже из значения передавать на листы Excel. К примеру, если у вас есть необходимость в том, чтобы определить индексы в массиве, значение в которых совпадает в заданным, то вам может пригодиться функция, описанная ниже. Функция принимает в качестве аргумента массив и значение ячейки, и возвращает новый массив со списком индексов совпадений: Function FindMatches(arr As Variant, val As Variant) As Variant
Dim i, c As Long
ReDim indexArr(0 To 0)
For i = LBound(arr) To UBound(arr)
If arr(i) = val Then
ReDim Preserve indexArr(0 To c)
indexArr(c) = i
c = c + 1
End I
Оглавление

Массив в VBA - это структура данных, которая позволяет хранить набор значений одного типа данных под одним именем переменной. Каждый элемент массива имеет свой индекс (номер), начинающийся с нуля (как правило), и содержит значение определенного типа данных.

Достаточно хорошо известно, что для более быстрой работы с кодом в VBA Excel рекомендуется работать с массивами и уже из значения передавать на листы Excel.

К примеру, если у вас есть необходимость в том, чтобы определить индексы в массиве, значение в которых совпадает в заданным, то вам может пригодиться функция, описанная ниже.

Функция принимает в качестве аргумента массив и значение ячейки, и возвращает новый массив со списком индексов совпадений:

Function FindMatches(arr As Variant, val As Variant) As Variant
Dim i, c As Long
ReDim indexArr(0 To 0)
For i = LBound(arr) To UBound(arr)
If arr(i) = val Then
ReDim Preserve indexArr(0 To c)
indexArr(c) = i
c = c + 1
End If
Next i
FindMatches = indexArr
End Function

Объяснение кода:

  1. Функция называется "FindMatches" и принимает два аргумента: массив "arr" и значение "val", которое нужно найти в массиве.
  2. Для хранения индексов совпадений мы создаем пустой массив "indexArr".
  3. Используем цикл "For" для перебора всех элементов массива "arr".
  4. Если текущий элемент массива "arr" равен значению "val", то мы добавляем индекс этого элемента в массив "indexArr".
  5. Мы увеличиваем счетчик "c" и изменяем размерность массива "indexArr" с помощью функции "ReDim Preserve" каждый раз, когда мы добавляем новый индекс в массив.
  6. В конце функции мы возвращаем массив "indexArr", который содержит список индексов совпадений.

Пример использования функции:

Sub test()
Dim arr, val, indexArr As Variant
arr = Array("DFG", "PLY", "PLY", "XDT", "ZPL", "DFG", "XDT", "PLY")
val = "
PLY"
indexArr = FindMatches(arr, val)
Debug.Print "Indexes of " & val & ": " & Join(indexArr, ", ")
End Sub

В этом примере мы создаем массив "arr", который содержит несколько различных фруктов, включая несколько элементов "PLY". Затем мы вызываем функцию "FindMatches" для поиска всех индексов совпадений для "banana". Результат выводится в окно "Immediate" с помощью функции "Debug.Print". Результатом должно быть: "Indexes of PLY: 1, 2, 7".