Excel match функция не работает
Я пытаюсь создать уникальный идентификатор с префиксом. для этого я генерирую случайное число от 0000 до 9999 и добавляю его в конец своего префикса. Затем я хочу проверить лист в столбце A, чтобы увидеть, существует ли уже этот идентификатор, и если да, то он просто генерирует другое случайное число и продолжается до тех пор, пока не будет найдено уникальное. Для этого я использую цикл while. Ниже мой код. Проблема, с которой я столкнулся, заключается в том, что после того, как функции match () ничего не находят, значение остается как последнее значение, то есть: номер строки, в которой было найдено последнее значение. Например, если мой идентификатор - T26 - 7055, он ищет лист и обнаруживает, что он уже существует в строке 59. Затем он генерирует другой идентификатор на этот раз, скажем, T26 -2099, который не существует, но функция сопоставления по-прежнему возвращает 59, а пока циклы просто переходят в бесконечный цикл. Я не понимаю, почему это происходит, и надеялся, что один из вас, ребята, сможет мне помочь.
3 ответа
Вы не сбрасываете match на 0 после того, как найдете совпадение.
Наличие Dim match as Long в начале цикла не сбрасывает его.
Вы используете Application.WorksheetFunction.match. Это вызовет ошибку, если совпадение не будет найдено и вы нашли способ его обойти. Но это также подавит любые обнаруженные законные ошибки.
Если вы используете Application.match, мы сможем отловить ошибку следующим образом:
Это, по крайней мере, даст вам представление об ошибке, с которой вы столкнулись. Также: вы не используете точное соответствие для вашего соответствия. Я предполагаю, что, исходя из вашей истории, вам это понадобится (это может быть причиной ваших проблем. Просто измените последний 0 на 1. Вы получите более точный результат.
Попробуйте переименовать переменную "match" во что-нибудь другое. Match - это имя встроенной функции Excel.
Используйте Application.Match вместо WorksheetFunction.Match (есть тонкие различия)
Excel for Microsoft 365 Excel for Microsoft 365 for Mac Excel for the web Excel 2021 Excel 2021 for Mac Excel 2019 Excel 2019 for Mac Excel 2016 Excel 2016 for Mac Excel 2013 Excel 2010 Excel 2007 Excel for Mac 2011 Excel for Windows Phone 10 More. Less
Problem: There is no data to match
If you believe that the data is present in the spreadsheet, but MATCH is unable to locate it, it may be because:
The cell has unexpected characters or hidden spaces.
The cell may not be formatted as a correct data type. For example, the cell has numerical values, but it may be formatted as Text.
SOLUTION: To remove unexpected characters or hidden spaces, use the CLEAN or TRIM function, respectively. Also, verify if the cells are formatted as correct data types.
You have used an array formula without pressing Ctrl+Shift+Enter
When you use an array in INDEX, MATCH, or a combination of those two functions, it is necessary to press Ctrl+Shift+Enter on the keyboard. Excel will automatically enclose the formula within curly braces <>. If you try to enter the brackets yourself, Excel will display the formula as text.
Note: If you have a current version of Microsoft 365, then you can simply enter the formula in the output cell, then press ENTER to confirm the formula as a dynamic array formula. Otherwise, the formula must be entered as a legacy array formula by first selecting the output range, entering the formula in the output cell, and then pressing CTRL+SHIFT+ENTER to confirm it. Excel inserts curly brackets at the beginning and end of the formula for you. For more information on array formulas, see Guidelines and examples of array formulas.
Problem: There is an inconsistency in the match type and the sorting order of the data
If match_type is 1 or not specified, the values in lookup_array should be in an ascending order. For example, -2, -1, 0 , 1 , 2…, A, B, C…, FALSE, TRUE, to name a few.
If match_type is -1, the values in lookup_array should be in a descending order.
In the following example, the MATCH function is
=MATCH(40,B2:B10,-1)
SOLUTION: Either change the match_type argument to 1, or sort the table in descending format. Then try it again.
Need more help?
You can always ask an expert in the Excel Tech Community or get support in the Answers community.
Возвращает относительное положение элемента в массиве, которое соответствует указанному значению в указанном порядке. Используйте Match вместо одной из функций Lookup , когда требуется расположение элемента в диапазоне, а не самого элемента.
Синтаксис
выражения. Match (Arg1, Arg2, Arg3)
выражение Переменная, представляюная объект WorksheetFunction .
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
Arg1 | Обязательный | Variant | Lookup_value: значение, которое используется для поиска нужного значения в таблице. |
Arg2 | Обязательный | Variant | Lookup_array: сопо-ный диапазон ячеек, содержащий возможные значения. Lookup_array должен быть массив или ссылка массива. |
Arg3 | Необязательный | Variant | Match_type: число -1, 0 или 1. Match_type указывает, Microsoft Excel совпадает lookup_value со значениями в lookup_array. |
Возвращаемое значение
64-разрядное число с плавающей запятой двойной точности.
Примечания
Lookup_value это значение, которое необходимо соответствовать в lookup_array. Например, когда вы смотрите номер в телефонной книге, вы используете имя человека в качестве значения смотра, но телефонный номер — это необходимое значение.
Lookup_value может быть значением (число, текст или логическое значение) или ссылкой ячейки на число, текст или логическое значение.
Если match_type 1, Match находит самое большое значение, которое меньше или равно lookup_value. Lookup_array должны быть размещены в порядке подъема: . -2, -1, 0, 1, 2, . A-Z, FALSE, TRUE.
Если match_type 0, match находит первое значение, которое точно равно lookup_value. Lookup_array может быть в любом порядке. Обратите внимание , что Match является нечувствительным к делу.
Если match_type —1, match находит наименьшее значение, которое больше или равно lookup_value. Lookup_array должны быть размещены в порядке убывания: TRUE, FALSE, Z-A, . 2, 1, 0, -1, -2, . и так далее.
Если match_type опущен, предполагается, что это будет 1.
Match возвращает положение совпадаемого значения в lookup_array, а не само значение. Например, MATCH("b",,0) возвращает 2 относительное положение "b" в массиве .
Match не различает буквы верхнего и нижнего регистра при совпадении текстовых значений.
Если match_type 0 и lookup_value является текстом, в lookup_value можно использовать символы подпольной карты, знак вопроса (?)* и звездочка. Знак вопроса совпадает с любым одним персонажем; звездочка соответствует любой последовательности символов. Если вы хотите найти фактический знак вопроса или звездочки, введите тильду (~) перед персонажем.
Пример
Для каждого значения в первом столбце первого таблицы в этом примере выполняется поиск по всей книге для совпадающих значений. Если макрос находит совпадающие значения, он задает исходное значение на первом таблице, чтобы быть смелым.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
This thread is locked. You can follow the question or vote as helpful, but you cannot reply to this thread.
Report abuse
Harassment is any behavior intended to disturb or upset a person or group of people. Threats include any threat of suicide, violence, or harm to another. Any content of an adult theme or inappropriate to a community web site. Any image, link, or discussion of nudity. Any behavior that is insulting, rude, vulgar, desecrating, or showing disrespect. Any behavior that appears to violate End user license agreements, including providing product keys or links to pirated software. Unsolicited bulk mail or bulk advertising. Any link to or advocacy of virus, spyware, malware, or phishing sites. Any other inappropriate content or behavior as defined by the Terms of Use or Code of Conduct. Any image, link, or discussion related to child pornography, child nudity, or other child abuse or exploitation.
Replies (8)
Without seeing any data trying to guess… Please try: = MATCH(A1, B1:B42, 0)
Report abuse
Harassment is any behavior intended to disturb or upset a person or group of people. Threats include any threat of suicide, violence, or harm to another. Any content of an adult theme or inappropriate to a community web site. Any image, link, or discussion of nudity. Any behavior that is insulting, rude, vulgar, desecrating, or showing disrespect. Any behavior that appears to violate End user license agreements, including providing product keys or links to pirated software. Unsolicited bulk mail or bulk advertising. Any link to or advocacy of virus, spyware, malware, or phishing sites. Any other inappropriate content or behavior as defined by the Terms of Use or Code of Conduct. Any image, link, or discussion related to child pornography, child nudity, or other child abuse or exploitation.
1 person found this reply helpful
Was this reply helpful?
Sorry this didn't help.
Great! Thanks for your feedback.
How satisfied are you with this reply?
Thanks for your feedback, it helps us improve the site.
How satisfied are you with this reply?
Thanks for your feedback.
I haven't heard from you for a couple of days. Is this good news? Is your problem solved?
Report abuse
Harassment is any behavior intended to disturb or upset a person or group of people. Threats include any threat of suicide, violence, or harm to another. Any content of an adult theme or inappropriate to a community web site. Any image, link, or discussion of nudity. Any behavior that is insulting, rude, vulgar, desecrating, or showing disrespect. Any behavior that appears to violate End user license agreements, including providing product keys or links to pirated software. Unsolicited bulk mail or bulk advertising. Any link to or advocacy of virus, spyware, malware, or phishing sites. Any other inappropriate content or behavior as defined by the Terms of Use or Code of Conduct. Any image, link, or discussion related to child pornography, child nudity, or other child abuse or exploitation.
Was this reply helpful?
Sorry this didn't help.
Great! Thanks for your feedback.
How satisfied are you with this reply?
Thanks for your feedback, it helps us improve the site.
How satisfied are you with this reply?
Thanks for your feedback.
That might be your problem: the "15 digit" maximum is a myth.
Does your posted syntax contain a typo, and your actual formula has a third parameter, which is zero?
If the posted syntax is correct, be sure that B1:B42 is sorted in ascending order.
Report abuse
Harassment is any behavior intended to disturb or upset a person or group of people. Threats include any threat of suicide, violence, or harm to another. Any content of an adult theme or inappropriate to a community web site. Any image, link, or discussion of nudity. Any behavior that is insulting, rude, vulgar, desecrating, or showing disrespect. Any behavior that appears to violate End user license agreements, including providing product keys or links to pirated software. Unsolicited bulk mail or bulk advertising. Any link to or advocacy of virus, spyware, malware, or phishing sites. Any other inappropriate content or behavior as defined by the Terms of Use or Code of Conduct. Any image, link, or discussion related to child pornography, child nudity, or other child abuse or exploitation.
Вчера в марафоне 30 функций Excel за 30 дней мы находили текстовые строки при помощи функции SEARCH (ПОИСК), а также использовали IFERROR (ЕСЛИОШИБКА) и ISNUMBER (ЕЧИСЛО) в ситуациях, когда функция выдаёт ошибку.
В 19-й день нашего марафона мы займёмся изучением функции MATCH (ПОИСКПОЗ). Она ищет значение в массиве и, если значение найдено, возвращает его позицию.
Итак, давайте обратимся к справочной информации по функции MATCH (ПОИСКПОЗ) и разберем несколько примеров. Если у Вас есть собственные примеры или подходы по работе с этой функцией, пожалуйста, делитесь ими в комментариях.
Функция 19: MATCH (ПОИСКПОЗ)
Как можно использовать функцию MATCH (ПОИСКПОЗ)?
Функция MATCH (ПОИСКПОЗ) возвращает позицию элемента в массиве, и этот результат может быть использован другими функциями, такими как INDEX (ИНДЕКС) или VLOOKUP (ВПР). Например:
- Найти положение элемента в несортированном списке.
- Использовать вместе с CHOOSE (ВЫБОР), чтобы перевести успеваемость учащихся в буквенную систему оценок.
- Использовать вместе с VLOOKUP (ВПР) для гибкого выбора столбца.
- Использовать вместе с INDEX (ИНДЕКС), чтобы найти ближайшее значение.
Синтаксис MATCH (ПОИСКПОЗ)
Функция MATCH (ПОИСКПОЗ) имеет следующий синтаксис:
- lookup_value (искомое_значение) – может быть текстом, числом или логическим значением.
- lookup_array (просматриваемый_массив) – массив или ссылка на массив (смежные ячейки в одном столбце или в одной строке).
- match_type (тип_сопоставления) – может принимать три значения: -1, 0 или 1. Если аргумент пропущен, это равносильно 1.
Ловушки MATCH (ПОИСКПОЗ)
Функция MATCH (ПОИСКПОЗ) возвращает положение найденного элемента, но не его значение. Если требуется вернуть значение, используйте MATCH (ПОИСКПОЗ) вместе с функцией INDEX (ИНДЕКС).
Пример 1: Находим элемент в несортированном списке
Для несортированного списка можно использовать 0 в качестве значения аргумента match_type (тип_сопоставления), чтобы выполнить поиск точного совпадения. Если требуется найти точное совпадение текстовой строки, то в искомом значении допускается использовать символы подстановки.
В следующем примере, чтобы найти положение месяца в списке, мы можем написать название месяца либо целиком, либо частично с применением символов подстановки.
Пример 2: Изменяем оценки учащихся c процентов на буквы
Вы можете преобразовать оценки учащихся в буквенную систему, используя функцию MATCH (ПОИСКПОЗ) так же, как Вы делали это с VLOOKUP (ВПР). В этом примере функция использована в сочетании с CHOOSE (ВЫБОР), которая и возвращает нужную нам оценку. Аргумент match_type (тип_сопоставления) принимаем равным -1, поскольку баллы в таблице отсортированы в порядке убывания.
Когда аргумент match_type (тип_сопоставления) равен -1, результатом будет наименьшее значение, которое больше искомого или эквивалентное ему. В нашем примере искомое значение равно 54. Поскольку такого значения нет в списке баллов, то возвращается элемент, соответствующий значению 60. Так как 60 стоит на четвёртом месте списка, то результатом функции CHOOSE (ВЫБОР) будет значение, которое находится на 4-й позиции, т.е. ячейка C6, в которой находится оценка D.
Пример 3: Создаем гибкий выбор столбца для VLOOKUP (ВПР)
Чтобы придать больше гибкости функции VLOOKUP (ВПР), Вы можете использовать MATCH (ПОИСКПОЗ) для поиска номера столбца, а не жестко вписывать его значение в функцию. В следующем примере пользователи могут выбрать регион в ячейке H1, это искомое значение для VLOOKUP (ВПР). Далее, они могут выбрать месяц в ячейке H2, и функция MATCH (ПОИСКПОЗ) возвратит номер столбца, соответствующий этому месяцу.
Пример 4: Находим ближайшее значение при помощи INDEX (ИНДЕКС)
Функция MATCH (ПОИСКПОЗ) отлично работает в сочетании с функцией INDEX (ИНДЕКС), которую мы рассмотрим более пристально чуть позже в рамках данного марафона. В этом примере функция MATCH (ПОИСКПОЗ) использована для того, чтобы найти из нескольких угаданных чисел ближайшее к правильному.
Читайте также: