Важно:
Внимание! Неправильное изменение реестра может привести к серьезному повреждению системы и вызвать необходимость ее переустановки. Корпорация Майкрософт не гарантирует успешного устранения неполадок, вызванных ошибками при редактировании реестра. Перед изменением реестра сохраните архивные копии любых важных данных. Новейшие сведения об использовании и защите реестра вашего компьютера см. в справке Microsoft Windows.
В этой статье описаны синтаксис формулы и использование функций ВЫЗВАТЬ, РЕГИСТРАТОР и РЕГИСТРАТОР.ИД в Microsoft Excel.
Примечание: Функции ВЫЗВАТЬ и РЕГИСТРИРУЙТЕ недоступны в Excel в Интернете.
В этой статье
-
Описание
-
Типы данных
-
Замечания
-
Дополнительные сведения о типах данных
-
Типы данных F и G
-
Тип данных K
-
Тип данных O
-
Тип данных P
-
Тип данных R — вызов функций Microsoft Excel из библиотек DLL
-
Переменные функции и повторные вычисления
-
Изменение на месте — функции, объявленные как недействительные
-
Описание
Ниже описаны аргументы и типы возвращаемых значений функций ВЫЗВАТЬ, РЕГИСТРАТОР и РЕГИСТРАТОР.ИД. Аргументы и возвращаемые значения зависят от операционной среды; эти различия отражены в таблице типов данных.
К началу страницы
Типы данных
В функциях ВЫЗВАТЬ, РЕГИСТРАТОР и РЕГИСТРАТОР.ИД аргумент «типы_данных» задает типы данных возвращаемых значений и всех аргументов для функции библиотеки DLL или кодового ресурса. Первый знак определяет тип данных возвращаемого значения. Остальные знаки указывают типы данных всех аргументов. Например, функция DLL, возвращающая число с плавающей запятой и принимающая целое число и число с плавающей запятой в качестве аргументов, требует в качестве аргумента «типы_данных» строку «BIB».
Приведенная ниже таблица содержит полный список кодов типов данных, распознаваемых Microsoft Excel, описание каждого типа данных и способ передачи значения, а также типичные объявления типов данных в языке программирования C.
Код |
Описание |
Передается |
Объявление в языке C |
А |
Логическое значение |
Значение |
short int |
B |
8-байтовое число с плавающей запятой |
Значение Ссылка (Макинтош) |
double double * (Макинтош) |
C |
Строка, заканчивающаяся кодом 0 (максимальная длина строки = 255) |
Ссылка |
char * |
D |
Строка со счетчиком байтов (первый байт содержит длину строки, максимальная длина строки = 255 знаков) |
Ссылка |
Unsigned char * |
E |
8-байтовое число с плавающей запятой |
Ссылка |
double * |
F |
Строка, заканчивающаяся кодом 0 (максимальная длина строки = 255 знаков) |
Ссылка (изменяется на месте) |
char * |
G |
Строка со счетчиком байтов (первый байт содержит длину строки, максимальная длина строки = 255 знаков) |
Ссылка (изменяется на месте) |
unsigned char * |
H |
2-байтовое беззнаковое целое |
Значение |
unsigned short int |
I |
2-байтовое целое число со знаком |
Значение |
short int |
J |
4-байтовое целое число со знаком |
Значение |
long int |
K |
Массив |
Ссылка |
FP * |
L |
Логическое значение |
Ссылка |
short int * |
M |
2-байтовое целое число со знаком |
Ссылка |
short int * |
N |
4-байтовое целое число со знаком |
Ссылка |
long int * |
O |
Массив |
Ссылка |
Передаются три аргумента: |
P |
Структура данных Microsoft Excel OPER |
Ссылка |
OPER * |
R |
Структура данных Microsoft Excel XLOPER |
Ссылка |
XLOPER * |
К началу страницы
Замечания
-
Объявления для языка C основаны на предположении, что компилятор использует по умолчанию 8 байт для хранения чисел с двойной точностью, 2 байта — для коротких целых и 4 — для длинных целых.
-
В среде программирования Microsoft Windows все указатели являются дальними. Например, в Microsoft Windows код типа данных D должен быть объявлен как unsigned char far *.
-
При вызове всех функций в библиотеках DLL и кодовых ресурсах используются соглашения о вызове Pascal. Большинство компиляторов C позволяют использовать соглашения о вызове Pascal, добавив ключевое слово pascal в объявление функции, как показано в примере: pascal void main (rows,columns,a)
-
Если функция использует для возвращаемого значения тип данных pass-by-reference, в качестве возвращаемого значения можно передать null-указатель. Microsoft Excel будет интерпретируется как #NUM! (значение ошибки).
К началу страницы
Дополнительные сведения о типах данных
Этот раздел содержит подробную информацию о типах данных F, G, K, O, P и R, а также другие сведения об аргументе «типы_данных».
Типы данных F и G
При работе с типами данных F и G функция может модифицировать буфер строки, выделенный приложением Microsoft Excel. Если код типа возвращаемого значения — F или G, значение, возвращаемое функцией, игнорируется. Вместо этого в списке аргументов функции выполняется поиск первого подходящего типа данных (F или G), и текущее содержимое выделенного буфера строки рассматривается как возвращаемое значение. В приложении Microsoft Excel для аргумента выделяется 256 байт, поэтому возвращаемая функцией строка может оказаться длиннее полученной.
К началу страницы
Тип данных K
Тип данных K использует указатель на структуру FP, имеющую переменную длину. Необходимо следующим образом определить эту структуру в динамической библиотеке или программном ресурсе:
typedef struct _FP
{
unsigned short int rows;
unsigned short int columns;
double array[1]; /* Actually, array[rows][columns] */
} FP;
Объявление double array[1] выделяет память только для массива, содержащего один элемент. Число элементов в реальном массиве равно числу строк, умноженному на число столбцов.
К началу страницы
Тип данных O
Тип данных O может использоваться только как аргумент, но не как возвращаемое значение. Этот тип передает три элемента: указатель на число строк в массиве, указатель на число столбцов в массиве и указатель на двухмерный массив чисел с плавающей запятой.
Вместо того чтобы возвращать значение, функция может изменять массив, переданный типом данных O. Для этого в качестве >O можно использовать type_text O. Дополнительные сведения см. в приведенной ниже таблице «Изменение на месте — функции, объявленные как недействительным».
Тип данных O был создан для обеспечения прямой совместимости с динамическими библиотеками Fortran, которые передают аргументы по ссылке.
К началу страницы
Тип данных P
Тип данных P представляет собой указатель на структуру OPER. Структура OPER содержит 8 байт данных, за которыми следует 2-байтовый идентификатор, который определяет тип данных. При работе с типом данных P функция DLL или программный ресурс могут возвращать любой тип данных Microsoft Excel.
Структура OPER определяется следующим образом:
typedef struct _oper
{
union
{
double num;
unsigned char *str;
unsigned short int bool;
unsigned short int err;
struct
{
struct _oper *lparray;
unsigned short int rows;
unsigned short int columns;
} array;
} val;
unsigned short int type;
} OPER;
Поле тип содержит одно из следующих значений:
Тип |
Описание |
Используемое поле в val |
1 |
Число |
num |
2 |
Строка (первый байт содержит длину строки) |
str |
4 |
Логическое значение |
bool |
16 |
Ошибка. Значения ошибок: 0#ПУСТО! 7#ДЕЛ/0! 15#ЗНАЧ! 23#ССЫЛ! 29#ИМЯ? 36#ЧИСЛО! 42#Н/Д |
err |
64 |
Массив |
массив |
128 |
Пропущенный аргумент |
|
256 |
Пустая ячейка |
Последние два значения могут использоваться только как аргументы, но не как возвращаемые значения. Значение 128 (пропущенный аргумент) передается в том случае, если при вызове опущен какой-либо аргумент. Значение 256 (пустая ячейка) передается в случае ссылки на пустую ячейку при вызове функции.
К началу страницы
Тип данных R — вызов функций Microsoft Excel из библиотек DLL
Тип данных R — это указатель на структуру XLOPER, которая является расширенной версией структуры OPER. В Microsoft Excel 4.0 и более поздних версиях приложения тип данных R можно использовать для создания библиотек DLL и ресурсов кода, которые вызывают функции Microsoft Excel. Используя структуру XLOPER, функции DLL могут передавать ссылки на лист и осуществлять не только передачу данных, но и управление потоком. Полное описание типа данных R и программного интерфейса приложения Microsoft Excel выходит за рамки данного раздела. Подробные сведения о типе данных R, программном интерфейсе Microsoft Excel и многих других технических аспектах этого приложения можно найти в пакете Руководство разработчика Microsoft Office XP.
К началу страницы
Переменные функции и повторные вычисления
Microsoft Excel обычно вычисляет функцию из динамической библиотеки (или программный ресурс) тогда, когда она вводится в ячейку, когда изменяется одна из влияющих ячеек или когда ячейка вычисляется в процессе выполнения макроса. Можно сделать функцию DLL или программный ресурс на листе временными, то есть они будут вычисляться всякий раз, когда пересчитывается лист. Для этого в конец аргумента «типы_данных» надо добавить восклицательный знак (!).
Например, в Microsoft Excel для Windows приведенная ниже формула будет пересчитываться всякий раз, когда будет пересчитываться лист:
ВЫЗВАТЬ(«Kernel32″,»GetTickCount»,»J!»)
К началу страницы
Изменение на месте — функции, объявленные как недействительные
В качестве типа возвращаемого значения в аргументе «типы_данных» можно использовать одну цифру n (от 1 до 9). Это указывает приложению Microsoft Excel на необходимость изменить переменную, указанную аргументом номер n в аргументе «типы_данных», а не возвращать значение. Этот прием иногда называют изменением на месте. Типом n-го аргумента должен быть тип, передаваемый по ссылке (C, D, E, F, G, K, L, M, N, O, P или R). Функция DLL или программный ресурс при работе с языком C должны быть объявлены с ключевым словом void (или, при программировании на языке Pascal, с ключевым словом procedure).
Например, функция DLL, которая получает строку, заканчивающуюся знаком 0, и два указателя на целые числа в качестве аргументов, может отредактировать строку на месте. Используйте «1FMM» в качестве аргумента «типы_данных» и объявите функцию как void.
В предыдущих версиях Microsoft Excel 4.0 для изменения первого аргумента использовался знак > 4.0; изменить любой из аргументов, кроме первого, не существует. Знак > эквивалентен n = 1 в Microsoft Excel 4.0 и более поздних версиях.
К началу страницы
Как показано в примере ниже, когда ячейка E6 содержит значение «Да», ячейка F6 будет автоматически заполнена значением «одобрить». Если вы измените «Да» на «Нет» или «Нейтралитет» в E6, значение в F6 будет немедленно изменено на «Отклонить» или «Пересмотреть». Как вы можете сделать, чтобы достичь этого? В этой статье собраны некоторые полезные методы, которые помогут вам легко решить эту проблему.
Возвращаемое значение в другой ячейке, если ячейка содержит определенный текст с формулой
Чтобы вернуть значение в другой ячейке, если ячейка содержит только определенный текст, попробуйте следующую формулу. Например, если B5 содержит «Да», то верните «Утвердить» в D5, в противном случае верните «Нет квалификации». Пожалуйста, сделайте следующее.
Выберите D5, скопируйте в нее формулу ниже и нажмите Enter ключ. Смотрите скриншот:
Формула: Возвращаемое значение в другой ячейке, если ячейка содержит определенный текст
= ЕСЛИ (ЕЧИСЛО (ПОИСК («Да«,D5)), «Утвердить»,«Нет квалификации«)
Ноты:
1. В формуле «Да», D5«утвердить(Основной ключ) и Нет квалификации»Указывают на то, что если ячейка B5 содержит текст« Да », указанная ячейка будет заполнена текстом« одобрить », в противном случае она будет заполнена« Нет квалификации ». Вы можете изменить их в зависимости от ваших потребностей.
2. Для возврата значения из других ячеек (например, K8 и K9) на основе указанного значения ячейки используйте эту формулу:
= ЕСЛИ (ЕЧИСЛО (ПОИСК («Да«,D5)),K8,K9)
Возвращает значения в другой ячейке, если ячейка содержит другой текст с формулой
Этот раздел покажет вам формулу для возврата значений в другой ячейке, если ячейка содержит другой текст в Excel.
1. Вам необходимо создать таблицу с конкретными значениями и возвращаемыми значениями, расположенными отдельно в двух столбцах. Смотрите скриншот:
2. Выберите пустую ячейку для возврата значения, введите в нее формулу ниже и нажмите Enter ключ для получения результата. Смотрите скриншот:
Формула: Возвращает значения в другой ячейке, если ячейка содержит другой текст
= ВПР (E6,B5: C7,2,ЛОЖНЫЙ)
Ноты:
В формуле E6 содержит ли ячейка конкретное значение, на основе которого вы вернете значение, B5: C7 это диапазон столбцов, содержащий конкретные значения и возвращаемые значения, 2 число означает, что возвращаемые значения находятся во втором столбце диапазона таблицы.
Отныне при изменении значения в E6 на конкретное, соответствующее ему значение будет немедленно возвращено в F6.
Легко возвращать значения в другую ячейку, если ячейка содержит другой текст
На самом деле, вы можете решить эту проблему более простым способом. В Найдите значение в списке полезности Kutools for Excel может помочь вам добиться этого всего за несколько кликов без запоминания формулы.
1. Так же, как и в описанном выше методе, вам также необходимо создать таблицу с конкретными значениями и возвращаемыми значениями, которые располагаются отдельно в двух столбцах.
2. Выберите пустую ячейку для вывода результата (здесь я выбираю F6), а затем нажмите Кутулс > Формула Помощник > Формула Помощник. Смотрите скриншот:
3. в Формула Помощник диалоговое окно, настройте следующим образом:
- 3.1 В Выберите формулу коробка, найдите и выберите Найдите значение в списке;
Tips: Вы можете проверить Фильтр введите определенное слово в текстовое поле, чтобы быстро отфильтровать формулу. - 3.2 В Таблица_массив поле выберите таблицу без заголовков, которую вы создали на шаге 1;
- 3.2 В Искомое_значение в поле выберите ячейку, содержащую конкретное значение, на основе которого вы вернете значение;
- 3.3 В Колонка поле укажите столбец, из которого вы вернете совпадающее значение. Или вы можете ввести номер столбца в текстовое поле, если вам нужно.
- 3.4 Щелкните значок OK кнопка. Смотрите скриншот:
Отныне при изменении значения в E6 на конкретное, соответствующее ему значение будет немедленно возвращено в F6. Смотрите результат, как показано ниже:
Если вы хотите получить бесплатную пробную версию (30-день) этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.
Kutools for Excel — Помогает всегда закончить работу раньше времени, чтобы у вас было больше времени, чтобы наслаждаться жизнью
Вы часто играете в догонялки с работой, не хватает времени на себя и семью? Kutools for Excel может помочь вам справиться с 80% Совершенствуйте головоломки и повысьте эффективность работы на 80%, дайте вам больше времени, чтобы заботиться о семье и наслаждаться жизнью.
300 расширенных инструментов для 1500 рабочих сценариев сделают вашу работу намного проще, чем когда-либо.
Больше не нужно запоминать формулы и коды VBA, теперь дайте вашему мозгу отдохнуть.
Сложные и повторяющиеся операции могут быть выполнены разовой обработкой за секунды.
Сократите количество операций с клавиатурой и мышью каждый день, попрощайтесь с профессиональными заболеваниями прямо сейчас.
Станьте экспертом по Excel за 3 минуты, это поможет вам быстро получить признание и продвижение по службе.
110,000 300 высокоэффективных людей и выбор XNUMX+ всемирно известных компаний.
Сделайте так, чтобы ваши 39.0 доллара были больше, чем обучение других людей.
Полнофункциональная бесплатная пробная версия 30-день. 60-дневная гарантия возврата денег без объяснения причин.
На чтение 3 мин. Просмотров 60 Опубликовано 21.05.2021
Как правило, вы получаете значение ячейки, когда используете формулу для поиска значения в Excel. Но здесь я представлю несколько формул для поиска значения и возврата относительного адреса ячейки.
Найдите значение и верните адрес ячейки с формулой
Содержание
- Найти значение и вернуть адрес ячейки с формулой
- Пакетное преобразование ссылки формулы в абсолютное, относительное, абсолютное значение столбца или абсолютное значение строки
- Относительные статьи
Найти значение и вернуть адрес ячейки с формулой
Чтобы найти значение и вернуть соответствующий адрес ячейки вместо значения ячейки в Excel, вы можете использовать приведенные ниже формулы.
Формула 1 Чтобы вернуть ячейку абсолютная ссылка
Например, у вас есть диапазон данных, как показано на скриншоте ниже, и вы хотите найти продукт AA и вернуть абсолютную ссылку на относительную ячейку.
1. Выберите ячейку и введите в нее AA, здесь я ввожу AA в ячейку A26. См. Снимок экрана:
2. Затем введите эту формулу = ЯЧЕЙКА (“адрес”, ИНДЕКС ($ A $ 18: $ A $ 24, ПОИСКПОЗ (A26, $ A $ 18: $ A $ 24,1))) в ячейке рядом с ячейкой A26 (ячейка, которую вы ввели AA ), затем нажмите клавиши Shift + Ctrl + Enter , и вы получите относительную ссылку на ячейку. См. Снимок экрана:
Совет:
1. В приведенной выше формуле A18: A24 – это диапазон столбцов, в котором находится ваше значение поиска, A26 – значение поиска.
2. Эта формула может найти только первый относительный адрес ячейки, который соответствует значению поиска.
Формула 2 Чтобы вернуть номер строки значения ячейки в таблице
Например, у вас есть данные, как показано на скриншоте ниже, вы хотите найти продукт BB и вернуть все его адреса ячеек в таблице.
1. Введите BB в ячейку, здесь я ввожу BB в ячейку A10. См. Снимок экрана:
2. В ячейке, смежной с ячейкой A10 (ячейка, в которую вы ввели BB), введите эту формулу = МАЛЕНЬКИЙ (ЕСЛИ ($ A $ 10 = $ A $ 2: $ A $ 8, ROW ($ A $ 2: $ A $ -ROW ($ A $ 2) +1), ROW (1: 1)) и нажмите клавиши Shift + Ctrl + Enter , затем перетащите дескриптор автозаполнения вниз, чтобы применить эту формулу, пока не появится # ЧИСЛО! . см. снимок экрана:
3. Затем вы можете удалить # ЧИСЛО !. См. Снимок экрана:
Советы:
1. В этой формуле A10 указывает значение поиска, а A2: A8 – это диапазон столбцов, в котором находится ваше значение поиска.
2. С помощью этой формулы вы можете получить только номера строк относительных ячеек в таблице, кроме заголовка таблицы..
Пакетное преобразование ссылки формулы в абсолютное, относительное, абсолютное значение столбца или абсолютное значение строки
|
Иногда вам может потребоваться преобразовать ссылку на формулу в абсолютную, но в Excel можно использовать только горячие клавиши. преобразовывать ссылки одну за другой, что может напрасно тратить время при наличии сотен формул. Преобразование ссылки Kutools for Excel может пакетно преобразовывать ссылки в выбранных ячейках в относительные, абсолютные по мере необходимости. Нажмите, чтобы получить полнофункциональную 30-дневную бесплатную пробную версию! |
Kutools для Excel: с более чем 300 удобными надстройками Excel, попробуйте бесплатно, без ограничений в течение 30 дней. |
Относительные статьи
- ВПР и возврат нескольких значений по горизонтали
- ВПР и возврат наименьшего значения
- ВПР и вернуть ноль вместо # Н/Д
Хитрости »
11 Июль 2016 126441 просмотров
ВПР с возвратом всех значений
Все, кто сталкивался с функцией ВПР знают, что она умеет возвращать исключительно одно значений — первое найденное. Но что делать, когда надо видеть все значения? К примеру имеется такая таблица:
И из этой таблицы необходимо получить фамилии(поле ФИО) всех сотрудников из отдела Сбыта:
Тут два варианта:
- Вариант 1: все значения необходимо получить в одной ячейке через разделитель(скажем запятую). Такое возможно только через использование VBA(на момент написания статьи). Такую функцию я написал давно: Как сцепить несколько значений в одну ячейку по критерию? СцепитьЕсли
- Вариант 2: каждое значение должно быть в отдельной ячейке. Этот вариант мы и рассмотрим более подробно в данной статье. Причем решать задачу будем без использования макросов — только встроенными функциями
. В результате получим что-то вроде: Александров Иван,Александров Петр,Андреев Алексей.
Здесь надо сразу оговориться — при помощи непосредственно ВПР(VLookup) это сделать ну никак не получится. Но это можно сделать при помощи её родственников — связки ИНДЕКС(ПОИСКПОЗ)(INDEX(MATCH)). Плюс еще пара функций. В сборе функция выглядит так:
=ИНДЕКС($A$12:$G$111;НАИМЕНЬШИЙ(ЕСЛИ($I$12=$C$12:$C$111;СТРОКА($C$12:$C$111)-11);СТРОКА(A1));1)
=INDEX($A$12:$G$111;SMALL(IF($I$12=$C$12:$C$111;ROW($C$12:$C$111)-11);ROW(A1));1)
где:
- $A$12:$G$111 — таблица с ФИО и всеми данными
- $I$12 — ячейка с названием отдела
- $C$12:$C$111 — столбец с названиями отделов в таблице $A$12:$G$111
А теперь начнем разбирать формулу по кусочкам
Предлагаю сразу скачать пример файла с данными и формулами — тогда понять будет проще:
Tips_All_VlookupAllVals.xls (84,5 KiB, 23 009 скачиваний)
- Первое и самое главное — формула вводится в ячейку как формула массива. Это значит, что для приложенного к статье примера необходимо будет выделить ячейку J12, записать в неё формулу и завершить ввод нажатием сразу трех клавиш: Ctrl+Shift+Enter. После этого скопировать ячейку, выделить диапазон J13:J39 и вставить туда скопированную ячейку.
- За отбор ФИО указанного отдела отвечает этот кусок: ЕСЛИ($I$12=$C$12:$C$111;СТРОКА($C$12:$C$111)-11)
IF($I$12=$C$12:$C$111;ROW($C$12:$C$111)-11)
Как видно здесь идет сравнение отдела, записанного в $I$12 со всеми отделами в таблице: $C$12:$C$111. Если отдел совпадает, то функция возвращает номер строки СТРОКА($C$12:$C$111). Но нам нужен не номер строки на листе, а номер строки внутри таблицы(потому что в формулу ИНДЕКС(INDEX) у нас передан диапазон $A$12:$G$111 и если передать в его второй аргумент(номер_строки) 14, то получим не Александров Иван, а Андреев Олег). Поэтому отнимаем от номера строки 11, чтобы было возвращено число 3(а не 14). Т.к. формула записана формулой массива — ЕСЛИ(IF) возвращает массив из номеров строк и логического ЛОЖЬ(FALSE)(если отдел не совпадает):
шаг 1: ЕСЛИ({ЛОЖЬ:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ};{12:13:14:15:16:17:18:19:20}-11)
шаг 2: ЕСЛИ({ЛОЖЬ:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ};{1:2:3:4:5:6:7:8:9})
шаг 3: {ЛОЖЬ:ЛОЖЬ:3:ЛОЖЬ:ЛОЖЬ:6:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ} - Т.к. ЕСЛИ(IF) в данном случае возвращает массив значений, включая ненужные нам ЛОЖЬ(FALSE) — применяем НАИМЕНЬШИЙ(SMALL), которая будет брать только числа (сначала 3, затем 6 и т.д.), а логические значения ЛОЖЬ(FALSE) будет игнорировать:
НАИМЕНЬШИЙ({ЛОЖЬ:ЛОЖЬ:3:ЛОЖЬ:ЛОЖЬ:6:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ};СТРОКА(A1))
SMALL({ЛОЖЬ:ЛОЖЬ:3:ЛОЖЬ:ЛОЖЬ:6:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ};ROW(A1))
Функция НАИМЕНЬШИЙ(SMALL) отбирает из указанного массива чисел наименьшее. При этом можно отобрать по рангу — первое наименьшее, второе наименьшее, третье наименьшее и т.д.- с первым аргументом разобрались — это уже отобранные записи, где число — строка в таблице с нужной ФИО и ненужные нам логические ЛОЖЬ(FALSE).
- второй аргумент СТРОКА(A1) для каждой следующей строки будет меняться. В приложенном примере первая ячейка с формулой — J12. В ней СТРОКА(A1) равна 1, т.е. НАИМЕНЬШИЙ(SMALL) вернет первое наименьшее из массива чисел — 3. В ячейке J13 это уже будет СТРОКА(A2) и она равна 2, а значит НАИМЕНЬШИЙ(SMALL) вернет второе наименьшее из массива чисел — 6. И т.д. Когда все числа закончатся — НАИМЕНЬШИЙ(SMALL) вернет значение ошибки #ЧИСЛО!(#NUM!)
ячейка J12
шаг 1: НАИМЕНЬШИЙ({ЛОЖЬ:ЛОЖЬ:3:ЛОЖЬ:ЛОЖЬ:6:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ};СТРОКА(A1))
шаг 2: НАИМЕНЬШИЙ({ЛОЖЬ:ЛОЖЬ:3:ЛОЖЬ:ЛОЖЬ:6:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ};1)
шаг 3: НАИМЕНЬШИЙ(3)
ячейка J13
шаг 1: НАИМЕНЬШИЙ({ЛОЖЬ:ЛОЖЬ:3:ЛОЖЬ:ЛОЖЬ:6:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ};СТРОКА(A2))
шаг 2: НАИМЕНЬШИЙ({ЛОЖЬ:ЛОЖЬ:3:ЛОЖЬ:ЛОЖЬ:6:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ};2)
шаг 3: НАИМЕНЬШИЙ(6)
- И последний штрих — все это передается в функцию ИНДЕКС(INDEX). Для ячейки J12 это будет значение ячейки, расположенной на пересечении 3-й строки и 1-го столбца диапазона $A$12:$G$111. На листе это ячейка A14. Т.е. третья сверху ячейка столбца А в диапазоне $A$12:$G$111 — Александров Иван.
ячейка J12
шаг 1: =ИНДЕКС($A$12:$G$111;НАИМЕНЬШИЙ(3);1)
шаг 2: =ИНДЕКС($A$12:$G$111;3;1)
шаг 3: Александров Иван
ячейка J13
шаг 1: =ИНДЕКС($A$12:$G$111;НАИМЕНЬШИЙ(6);1)
шаг 2: =ИНДЕКС($A$12:$G$111;6;1)
шаг 3: Александров Петр
И в довершение неплохо бы убрать ошибку в случае, если ни одно значение не соответствует критерию или значений больше, чем ячеек с формулами. Более подробно подобное решение я описывал в этой статье: Как в ячейке с формулой вместо ошибки показать 0
Для всех версий Excel:
=ЕСЛИ(ЕОШ(ИНДЕКС($A$12:$G$111;НАИМЕНЬШИЙ(ЕСЛИ($I$12=$C$12:$C$111;СТРОКА($C$12:$C$111)-11);СТРОКА(A1));1));»»;ИНДЕКС($A$12:$G$111;НАИМЕНЬШИЙ(ЕСЛИ($I$12=$C$12:$C$111;СТРОКА($C$12:$C$111)-11);СТРОКА(A1));1))
=IF(ISERR(INDEX($A$12:$G$111;SMALL(IF($I$12=$C$12:$C$111;ROW($C$12:$C$111)-11);ROW(A1));1));»»;INDEX($A$12:$G$111;SMALL(IF($I$12=$C$12:$C$111;ROW($C$12:$C$111)-11);ROW(A1));1))
Для Excel 2007 и выше:
=ЕСЛИОШИБКА(ИНДЕКС($A$12:$G$111;НАИМЕНЬШИЙ(ЕСЛИ($I$12=$C$12:$C$111;СТРОКА($C$12:$C$111)-11);СТРОКА(A1));1);»»)
=IFERROR(INDEX($A$12:$G$111;SMALL(IF($I$12=$C$12:$C$111;ROW($C$12:$C$111)-11);ROW(A1));1);»»)
Плюс к этому в приложенном к статье файле я привел формулу, которая возвращает список всех сотрудников выбранного отдела без повторений и формулу с возможностью просто поменять заголовок в результирующем столбце(в файле это столбец K, ячейка K11) на любой из исходной таблицы и данные будут отображены из этого столбца.
Например, если вместо столбца ФИО записать в K11 Адрес — будут отображены все адреса сотрудников выбранного отдела. Если записать Телефон — все телефоны сотрудников выбранного отдела.
Скачать пример:
Tips_All_VlookupAllVals.xls (84,5 KiB, 23 009 скачиваний)
Так же см.:
Как найти значение в другой таблице или сила ВПР
ВПР с поиском по нескольким листам
ВПР_МН
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
Ссылка на это место страницы:
#title
- Получить первое не пустое значение в списке
- Получить первое текстовое значение в списке
- Получить первое текстовое значение с ГПР
- Получить позицию последнего совпадения
- Получить последнее совпадение содержимого ячейки
- Получить n-е совпадение
- Получить n-ое совпадение с ИНДЕКС/ПОИСКПОЗ
- Получить n-ое совпадение с ВПР
- Если ячейка содержит одну из многих вещей
- Поиск первой ошибки
- Поиск следующего наибольшего значения
- Несколько совпадений в списке, разделенных запятой
- Частичное совпадение чисел с шаблоном
- Частичное совпадение с ВПР
- Положение первого частичного совпадения
- Скачать файл
Ссылка на это место страницы:
#punk01
{ = ИНДЕКС( диапазон ; ПОИСКПОЗ( ЛОЖЬ; ЕПУСТО ( диапазон ); 0 )) }
{ = INDEX( диапазон ; MATCH( FALSE; ISBLANK ( диапазон ); 0 )) }
Если вам нужно получить первое не пустое значение (текст или число) в диапазоне в одной колонке вы можете использовать формулу массива на основе функций ИНДЕКС, ПОИСКПОЗ и ЕПУСТО.
В данном примере мы используем эту формулу:
{ = ИНДЕКС( B3: B11; ПОИСКПОЗ( ЛОЖЬ; ЕПУСТО ( B3: B11 ); 0 )) }
{ = INDEX( B3:B11; MATCH( FALSE; ISBLANK ( B3:B11 ); 0 )) }
Таким образом, суть проблемы заключается в следующем: мы хотим получить первую не пустую ячейку, но для этого нет конкретной формулы в Excel. Мы могли бы использовать ВПР с шаблоном *, но это будет работать только для текста, а не для чисел.
Таким образом, нам нужно строить функциональные возможности для нужных нам формул. Способ сделать это состоит в использовании функции массива, которая «тестирует» ячейки и возвращает массив истина/ложь значения, которые мы можем сопрягать с ПОИСКПОЗ.
Работая изнутри, ЕПУСТО оценивает ячейки в диапазоне В3: В11 и возвращает результат и массив, который выглядит следующим образом:
{ИСТИНА; ЛОЖЬ; ИСТИНА; ЛОЖЬ; ЛОЖЬ; ИСТИНА; ИСТИНА; ИСТИНА; ИСТИНА}
Каждая ЛОЖЬ представляет собой ячейку в диапазоне, который не является пустой.
Далее, ПОИСКПОЗ ищет ЛОЖЬ внутри массива и возвращает позицию первого наденного совпадения, в этом случае 2. На данный момент, формула в примере теперь выглядит следующим образом:
{ = ИНДЕКС( B3: B11; 2; 0 )) }
{ = INDEX( B3:B11; 2; 0 )) }
И, наконец, функция ИНДЕКС выводит значение в положении 2 в массиве, в этом случае число 10.
Ссылка на это место страницы:
#punk02
= ВПР ( «*»; диапазон; 1; ЛОЖЬ)
= VLOOKUP ( «*»; диапазон; 1; FALSE)
Если вам нужно получить первое текстовое значение в списке (диапазон один столбец), вы можете использовать функцию ВПР, чтобы установить точное соответствие, с шаблонным символом для поиска.
В данном примере формула в D7 является:
= ВПР ( «*» ; B5: B11 ; 1 ; ЛОЖЬ)
= VLOOKUP ( «*» ; B5:B11 ; 1 ; FALSE)
Групповой символ звездочка (*) соответствует любому текстовому значению.
Ссылка на это место страницы:
#punk03
= ГПР ( «*»; диапазон; 1; ЛОЖЬ)
= HLOOKUP ( «*»; диапазон; 1; FALSE)
Для поиска и получения первого текстового значения во всем диапазоне столбцов, вы можете использовать функцию ГПР с групповым символом. В примере формула в F5 является:
= ГПР ( «*»; диапазон; 1; ЛОЖЬ)
= HLOOKUP ( «*»; диапазон; 1; FALSE)
Значение поиска является «*», групповым символом, который соответствует одному или более текстовому значению.
Ссылка на это место страницы:
#punk04
= ГПР ( «*»; диапазон; 1; ЛОЖЬ)
= HLOOKUP ( «*»; диапазон; 1; FALSE)
Для того, чтобы получить позицию последнего совпадения (т.е. последнего вхождения) от значения поиска, вы можете использовать формулу, основанную на ЕСЛИ, СТРОКА, ИНДЕКС, ПОИСКПОЗ и MAКС функций.
=МАКС(ЕСЛИ(B4:B11=G5;СТРОКА(B4:B11)-СТРОКА(ИНДЕКС(B4:B11;1;1))+1))
=MAX(IF(B4:B11=G5;ROW(B4:B11)-ROW(INDEX(B4:B11;1;1))+1))
Суть этой формулы состоит в том, что мы строим список номеров строк для данного диапазона, соответствующие по значению, а затем используем функцию MAКС, чтобы получить наибольшее количество строк, что соответствует последнему значению соответствия.
Ссылка на это место страницы:
#punk05
=МАКС(ЕСЛИ(B4:B11=G5;СТРОКА(B4:B11)-СТРОКА(ИНДЕКС(B4:B11;1;1))+1))
=MAX(IF(B4:B11=G5;ROW(B4:B11)-ROW(INDEX(B4:B11;1;1))+1))
Чтобы проверить ячейку для одной из нескольких вещей, и вернуть последнее совпадение, найденное в списке, вы можете использовать формулу, основанную на ПРОСМОТР и ПОИСК функций. В случае нескольких найденных совпадений, формула вернет последнее совпадение из списка «вещей».
=ПРОСМОТР(2;1/ПОИСК($E$4:$E$7;B4);$E$4:$E$7)
=LOOKUP(2;1/SEARCH($E$4:$E$7;B4);$E$4:$E$7)
Ссылка на это место страницы:
#punk06
= НАИМЕНЬШИЙ( ЕСЛИ( логический тест; СТРОКА( список ) — МИН( СТРОКА( список )) + 1 ); n )
= SMALL( IF( логический тест; СТРОКА( список ) — MIN( ROW( список )) + 1 ); n )
Для того, чтобы получить позицию n-го совпадения (например, второе значение соответствия заданному, третье значение соответствия и т.д.), вы можете использовать формулу, основанную на функции НАИМЕНЬШИЙ.
= НАИМЕНЬШИЙ( ЕСЛИ( список = E5 ; СТРОКА( список ) — МИН( СТРОКА( список )) + 1 ); F5 )
= SMALL( IF( список = E5 ; ROW( список ) — MIN( ROW( список )) + 1 ); F5 )
Эта формула возвращает позицию второго появления «красных» в списке.
Сутью этой формулы является функция НАИМЕНЬШИЙ, которая просто возвращает n-е наименьшее значение в списке значений, которое соответствует номеру строки. Номера строк были «отфильтрованы» функцией ЕСЛИ, которая применяет логику для совпадения.
Ссылка на это место страницы:
#punk07
{ = ИНДЕКС( массив; НАИМЕНЬШИЙ( ЕСЛИ( величины = знач ; СТРОКА ( величины ) — СТРОКА ( ИНДЕКС( величины; 1 ; 1 )) + 1 ); n-й )) }
{ = INDEX( массив; SMALL( IF( величины = знач ; ROW ( величины ) — ROW ( INDEX( величины; 1 ; 1 )) + 1 ); n-й )) }
Эта формула возвращает позицию второго появления «красных» в списке.
Сутью этой формулы является функция НАИМЕНЬШИЙ, которая просто возвращает n-е наименьшее значение в списке значений, которое соответствует номеру строки. Номера строк были «отфильтрованы» функцией ЕСЛИ, которая применяет логику для совпадения.
Ссылка на это место страницы:
#punk08
= ВПР( id_формулы; стол; 4; 0 )
= VLOOKUP( id_формулы; стол; 4; 0 )
Чтобы получить n-ое совпадение с ВПР, вам необходимо добавить вспомогательный столбец в таблицу , которая строит уникальный идентификатор , который включает счетчик.
Эта формула зависит от вспомогательного столбца, который добавляется в качестве первого столбца таблицы исходных данных.
Вспомогательный столбец содержит формулу, которая строит уникальное значение взгляда вверх от существующего идентификатора и счетчика. Счетчик подсчитывает сколько раз уникальный идентификатор появился в таблице данных.
В примере, формула ячейки J6 вспомогательного столбца выглядит следующим образом:
=ВПР(J3&»-«&I6;B4:G11;4;0)
=VLOOKUP(J3&»-«&I6;B4:G11;4;0)
Ссылка на это место страницы:
#punk09
{ = ИНДЕКС( результаты ;ПОИСКПОЗ( ИСТИНА ; ЕЧИСЛО( ПОИСК( вещи ; A1 )); 0 )) }
{ = INDEX( результаты ;MATCH( TRUE ; ISNUMBER( SEARCH( вещи ; A1 )); 0 )) }
Чтобы проверить ячейку для одной из нескольких вещей, и вернуть пользовательский результат для первого найденного совпадения, вы можете использовать формулу ИНДЕКС/ПОИСКПОЗ, основанную на функции поиска.
{ = ИНДЕКС( результаты ; ПОИСКПОЗ( ИСТИНА ; ЕЧИСЛО( ПОИСК ( вещи ; B5 )); 0 )) }
= INDEX( результаты ; MATCH( TRUE ; ISNUMBER( SEARCH ( вещи ; B5 )); 0 ))
Эта формула использует два названных диапазона: E5: E8 называется «вещи» и F5: F8 называется «Результаты». Убедитесь, что вы используете диапазоны имен с одинаковыми именами (на основе ваших данных). Если вы не хотите использовать именованные диапазоны, используйте абсолютные ссылки вместо этого.
Ссылка на это место страницы:
#punk10
{ = ПОИСКПОЗ( ИСТИНА ; ЕОШИБКА(диап ); 0 ) }
{ = MATCH( TRUE ; ISERROR(диап ); 0 ) }
Если вам нужно найти первую ошибку в диапазоне ячеек, вы можете использовать формулу массива, основанную на ПОИСКПОЗ и ЕОШИБКА функциях.
В приведенном примере формула:
{ = ПОИСКПОЗ( ИСТИНА ; ЕОШИБКА( B4: B11 ); 0 ) }
{ = MATCH( TRUE ; ISERROR( B4:B11 ); 0 ) }
Работая изнутри, функция ЕОШИБКА возвращает значение ИСТИНА, если значение является признанной ошибкой, и ЛОЖЬ, если нет.
Когда дается диапазон ячеек (массив ячеек) функция ЕОШИБКА будет возвращать массив истина/ложь значений. В примере, это результирующий массив выглядит следующим образом:
{ЛОЖЬ; ЛОЖЬ; ЛОЖЬ; ЛОЖЬ; ЛОЖЬ; ИСТИНА; ЛОЖЬ; ЛОЖЬ}
Обратите внимание, что 6-е значение (что соответствует 6-й ячейке в диапазоне) истинно, так как ячейка В9 содержит #Н/A.
Ссылка на это место страницы:
#punk11
=ИНДЕКС ( данные; ПОИСКПОЗ( поиск ; значения ) + 1 )
=INDEX ( данные; MATCH( поиск ; значения ) + 1 )
Для того, чтобы найти «следующее наибольшее» значение в справочной таблице, можно использовать формулу, основанную на ИНДЕКС и ПОИСКПОЗ. В примере формула в F6 является:
=ИНДЕКС ( данные; ПОИСКПОЗ( поиск ; значения ) + 1 )
=INDEX ( данные; MATCH( поиск ; значения ) + 1 )
Ссылка на это место страницы:
#punk12
{ = ОБЪЕДИНИТЬ ( «;» ; ИСТИНА ; ЕСЛИ( диапазон1 = E5 ; диапазон2 ; «» )) }
{ = ОБЪЕДИНИТЬ ( «;» ; TRUE ; IF( диапазон1 = E5 ; диапазон2 ; «» )) }
Для поиска и извлечения нескольких совпадений, разделенных запятыми (в одной ячейке), вы можете использовать функцию ЕСЛИ с функцией ОБЪЕДИНИТЬ.
{ = ОБЪЕДИНИТЬ( «;» ; ИСТИНА ; ЕСЛИ( группа = E5 ; имя ; «» )) }
Эта формула использует «имя» — именованный диапазон (B5: B11) и «группа» — (C5: C11).
Ссылка на это место страницы:
#punk13
{ = ПОИСКПОЗ( «*» & номер & «*» ; ТЕКСТ( диапазон ; «0» ); 0 ) }
{ = MATCH( «*» & номер & «*» ; TEXT( диапазон ; «0» ); 0 ) }
Для того, чтобы выполнить частичное совпадение (подстроки) против чисел, вы можете использовать формулу массива, основанную на ПОИСКПОЗ и ТЕКСТ.
Excel поддерживает символы подстановки «*» и «?». Тем не менее, если вы используете специальные символы с номером, вы будете преобразовывать числовое значение в текстовое значение. Другими словами, «*» & 99 & «*» = «* 99 *» (текстовая строка).
Если попытаться найти текстовое значение в диапазоне чисел, совпадение завершится неудачно.
Одно из решений заключается в преобразовании чисел в диапазоне поиска для текстовых значений, а затем сделать нормальный поиск с ПОИСКПОЗ, ВПР и т.д.
Другой способ, чтобы преобразовать числа в текст, чтобы сцепить пустую строку. Эта формула работает так же, как выше формуле:
= ПОИСКПОЗ ( «*» & Е5 & «*» ; В5: В10 & «» ; 0 )
= MATCH ( «*» & Е5 & «*» ; В5: В10 & «» ; 0 )
Ссылка на это место страницы:
#punk14
Если вы хотите получить информацию из таблицы на основе частичного совпадения, вы можете сделать это с помощью ВПР в режиме точного соответствия, и групповые символы.
В примере формула ВПР выглядит следующим образом:
=ВПР($H$2&»*»;$B$3:$E$12;2;0)
=VLOOKUP($H$2&»*»;$B$3:$E$12;2;0)
В этой формуле, значение представляет собой именованный диапазон, который относится к Н2, а также данные , представляет собой именованный диапазон , который относится к B3: E102. Без названных диапазонов, формула может быть записана следующим образом:
Ссылка на это место страницы:
#punk15
= ПОИСКПОЗ ( «* текст *» ; диапазон; 0 )
= MATCH ( «* текст *» ; диапазон; 0 )
Для того, чтобы получить позицию первого частичного совпадения (то есть ячейку, которая содержит текст, который вы ищете), вы можете использовать функцию ПОИСКПОЗ со специальными символами.
=ПОИСКПОЗ(«*»&E6&»*»;B5:B10;0)
=MATCH(«*»&E6&»*»;B5:B10;0)
Функция ПОИСКПОЗ возвращает позицию или «индекс» в первом совпадении на основании значения поиска в диапазоне.
ПОИСКПОЗ поддерживает подстановочное согласование со звездочкой «*» (один или несколько символов) или знаком вопроса «?» (один символ), но только тогда, когда третий аргумент, тип_сопоставления, установлен в ЛОЖЬ или ноль.
Ссылка на это место страницы:
#punk16
Файлы статей доступны только зарегистрированным пользователям.
1. Введите свою почту
2. Нажмите Зарегистрироваться
3. Обновите страницу
Вместо этого блока появится ссылка для скачивания материалов.
Привет! Меня зовут Дмитрий. С 2014 года Microsoft Cretified Trainer. Вместе с командой управляем этим сайтом. Наша цель — помочь вам эффективнее работать в Excel.
Изучайте наши статьи с примерами формул, сводных таблиц, условного форматирования, диаграмм и макросов. Записывайтесь на наши курсы или заказывайте обучение в корпоративном формате.
Подписывайтесь на нас в соц.сетях: