VBA Excel. Метод WorksheetFunction.Match (поиск позиции)

    Поиск относительного положения элемента в массиве (диапазоне) с помощью метода VBA Excel WorksheetFunction.Match. Синтаксис, параметры, примеры.

    Метод WorksheetFunction.Match

    WorksheetFunction.Match – это метод VBA Excel, который возвращает относительное положение элемента в массиве (диапазоне), соответствующее его порядковому номеру в массиве (диапазоне). Метод соответствует функции рабочего листа =ПОИСКПОЗ (поиск позиции).

    Обратите внимание на то, что

    • поиск позиции в массиве возможен, если он одномерный или двумерный, но с набором элементов только по одному измерению, например: myArray(8, 0) или myArray(1 To 1, 1 To 20);
    • поиск позиции в диапазоне рабочего листа возможен, если он содержит только одну строку или один столбец;
    • нумерация относительного положения элемента в массиве начинается с единицы, независимо от заданной индексации массива.

    Синтаксис

    Синтаксис метода WorksheetFunction.Match в VBA Excel:

    Параметры

    Описание параметров метода WorksheetFunction.Match:

    Параметр Описание
    Arg1 Обязательный параметр. Значение элемента массива, по которому будет произведен поиск относительного положения элемента в массиве.
    Arg2 Обязательный параметр. Непрерывный диапазон ячеек или массив, в котором будет произведен поиск позиции элемента, значение которого совпадет со значением параметра Arg1.
    Arg3 Необязательный параметр. Задает тип сопоставления значения Arg1 со значениями в массиве Arg2.

    В параметре Arg1 можно использовать знаки подстановки для шаблонов, те же, что и для методов Find и Replace.

    Значения параметра Arg3, задающие тип сопоставления:

    Значение Тип сопоставления
    -1 Метод WorksheetFunction.Match находит наименьшее значение элемента в Arg2, большее или равное Arg1. Значения элементов Arg2 должны быть расположены в убывающем порядке: [m, … 2, 1, 0, -1, -2, … -n], [z – a], [True, False] и т. д.
    0 Метод WorksheetFunction.Match находит в Arg2 первое значение, равное Arg1. Значения элементов Arg2 могут быть расположены в любом порядке.
    1 Значение по умолчанию. Метод WorksheetFunction.Match находит наибольшее значение элемента в Arg2, меньшее или равное Arg1. Значения элементов Arg2 должны быть расположены в возрастающем порядке: [-n, … -2, -1, 0, 1, 2, … m], [a – z], [False, True] и т. д.

    При сопоставлении строк регистр не учитывается.

    Примеры

    Пример 1

    Поиск относительного положения элемента в массиве, индексация которого начинается с нуля:

    Пример 2

    Определение индекса элемента в массиве по его относительному положению, возвращенному методом WorksheetFunction.Match:

    Пример 3

    Определение адреса ячейки на рабочем листе по найденному методом WorksheetFunction.Match относительному положению этой ячейки в заданном диапазоне:


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    3 комментария для “VBA Excel. Метод WorksheetFunction.Match (поиск позиции)”

    1. Сбитый Лётчик Небосводов

      Здравствуйте, Евгений! Здравствуйте, коллеги!
      Почему код

      даёт n=14 (кол-во элементов myArray) вместо верных 9?
      А если кол-во элементов myArray сократить до 13, удалив «, "14?"», то 13.
      А при 12 тот же код даёт верную 9.
      Что это за нечистая сила?
      P.S. «при чем» лучше заменить на «причём»

      1. Евгений

        Здравствуйте!
        Если тип сопоставления используется по умолчанию — 1, элементы массива должны быть расположены по возрастанию, в том числе и текстовые значения. Для вашего примера следует использовать тип сопоставления — 0:

        1. Сбитый Лётчик Небосводов

          Спасибо, Евгений.
          Как пользоваться, более-менее понятно.
          Как работает при 1 (по умолчанию) – не до конца: почему при 12 элементах для «Столб» n=9, а не ожидаемым 12; почему при 14 для «Небо» n=8, а не 13. Это всё при типе сопоставления = 1.

    Добавить комментарий

    Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора.