Как возвратить значения в excel

Важно: 
Внимание!    Неправильное изменение реестра может привести к серьезному повреждению системы и вызвать необходимость ее переустановки. Корпорация Майкрософт не гарантирует успешного устранения неполадок, вызванных ошибками при редактировании реестра. Перед изменением реестра сохраните архивные копии любых важных данных. Новейшие сведения об использовании и защите реестра вашего компьютера см. в справке Microsoft Windows.

В этой статье описаны синтаксис формулы и использование функций ВЫЗВАТЬ, РЕГИСТРАТОР и РЕГИСТРАТОР.ИД в Microsoft Excel.

Примечание:  Функции ВЫЗВАТЬ и РЕГИСТРИРУЙТЕ недоступны в Excel в Интернете.

В этой статье

  • Описание

  • Типы данных

  • Замечания

  • Дополнительные сведения о типах данных

    • Типы данных F и G

    • Тип данных K

    • Тип данных O

    • Тип данных P

    • Тип данных R — вызов функций Microsoft Excel из библиотек DLL

    • Переменные функции и повторные вычисления

    • Изменение на месте — функции, объявленные как недействительные

Описание

Ниже описаны аргументы и типы возвращаемых значений функций ВЫЗВАТЬ, РЕГИСТРАТОР и РЕГИСТРАТОР.ИД. Аргументы и возвращаемые значения зависят от операционной среды; эти различия отражены в таблице типов данных.

К началу страницы

Типы данных

В функциях ВЫЗВАТЬ, РЕГИСТРАТОР и РЕГИСТРАТОР.ИД аргумент «типы_данных» задает типы данных возвращаемых значений и всех аргументов для функции библиотеки DLL или кодового ресурса. Первый знак определяет тип данных возвращаемого значения. Остальные знаки указывают типы данных всех аргументов. Например, функция DLL, возвращающая число с плавающей запятой и принимающая целое число и число с плавающей запятой в качестве аргументов, требует в качестве аргумента «типы_данных» строку «BIB».

Приведенная ниже таблица содержит полный список кодов типов данных, распознаваемых Microsoft Excel, описание каждого типа данных и способ передачи значения, а также типичные объявления типов данных в языке программирования C.

Код

Описание

Передается

Объявление в языке C

А

Логическое значение
(ЛОЖЬ = 0), ИСТИНА = 1)

Значение

short int

B

8-байтовое число с плавающей запятой

Значение
(Windows)

Ссылка (Макинтош)

double
(Windows)

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

Логическое значение
(ЛОЖЬ = 0, ИСТИНА = 1)

Ссылка

short int *

M

2-байтовое целое число со знаком

Ссылка

short int *

N

4-байтовое целое число со знаком

Ссылка

long int *

O

Массив

Ссылка

Передаются три аргумента:
unsigned short int *
unsigned short int *
double [ ]

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. Но здесь я представлю несколько формул для поиска значения и возврата относительного адреса ячейки.

Найдите значение и верните адрес ячейки с формулой


Содержание

  1. Найти значение и вернуть адрес ячейки с формулой
  2. Пакетное преобразование ссылки формулы в абсолютное, относительное, абсолютное значение столбца или абсолютное значение строки
  3. Относительные статьи

Найти значение и вернуть адрес ячейки с формулой

Чтобы найти значение и вернуть соответствующий адрес ячейки вместо значения ячейки в 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 $ 8) -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) отбирает из указанного массива чисел наименьшее. При этом можно отобрать по рангу — первое наименьшее, второе наименьшее, третье наименьшее и т.д.

    1. с первым аргументом разобрались — это уже отобранные записи, где число — строка в таблице с нужной ФИО и ненужные нам логические ЛОЖЬ(FALSE).
    2. второй аргумент СТРОКА(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

  1. Получить первое не пустое значение в списке
  2. Получить первое текстовое значение в списке
  3. Получить первое текстовое значение с ГПР
  4. Получить позицию последнего совпадения
  5. Получить последнее совпадение содержимого ячейки
  6. Получить n-е совпадение
  7. Получить n-ое совпадение с ИНДЕКС/ПОИСКПОЗ
  8. Получить n-ое совпадение с ВПР
  9. Если ячейка содержит одну из многих вещей
  10. Поиск первой ошибки
  11. Поиск следующего наибольшего значения
  12. Несколько совпадений в списке, разделенных запятой
  13. Частичное совпадение чисел с шаблоном
  14. Частичное совпадение с ВПР
  15. Положение первого частичного совпадения
  16. Скачать файл

Ссылка на это место страницы:
#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. 

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

Подписывайтесь на нас в соц.сетях:

Понравилась статья? Поделить с друзьями:
  • Как возвести экспоненту в степень в excel
  • Как возвести в куб в excel
  • Как возводить числа в степень в excel
  • Как возвести число в степень в word
  • Как возвести в квадрат число в word