Это глава из книги Билла Джелена Гуру Excel расширяют горизонты: делайте невозможное с Microsoft Excel.
Задача: требуется формула, которая позволяла найти первое непустое значение в строке, т.е., возвращала бы номер первой непустой ячейки в строке. Предположим, что данные представлены в столбцах С:K (рис. 1).
Рис. 1. Формула находит первую непустую ячейку в каждой строке и возвращает ее номер в массиве
Скачать заметку в формате Word или pdf, примеры в формате Excel
Решение: формула в А2: =ПОИСКПОЗ(1;ИНДЕКС(1-ЕПУСТО(C2:K2);1;0);0). Хотя эта формула имеет дело с массивом ячеек, она в конечном счете возвращает одно значение, так что использовать при вводе нажатие Ctrl+Shift+Enter не требуется (о формулах массива см. Майкл Гирвин. Ctrl+Shift+Enter. Освоение формул массива в Excel).
Рассмотрим работу формулы подробнее. Функция ЕПУСТО возвращает ИСТИНА, если ячейка является пустой, и ЛОЖЬ, если ячейка – не пустая. Посмотрите на строку данных в С2:К2. ЕПУСТО(С2:К2) возвратит массив: {ИСТИНА;ИСТИНА;ЛОЖЬ;ИСТИНА;ИСТИНА;ИСТИНА;ИСТИНА;ИСТИНА;ИСТИНА}.
Обратите внимание, что далее этот массив вычитается из 1. При попытке использовать значения ИСТИНА и ЛОЖЬ в математической формуле, значение ИСТИНА интерпретируется как 1, а значение ЛОЖЬ – как 0. Задавая 1-ЕПУСТО(С2:К2), вы преобразуете массив логических значений ИСТИНА/ЛОЖЬ в числовую последовательность нулей и единиц: {0;0;1;0;0;0;0;0;0}.
Итак, фрагмент формулы 1-ЕПУСТО(С2:К2) возвращает массив {0;0;1;0;0;0;0;0;0}. Это немного странно, так как от такого фрагмента Excel ожидает, что вернется одно значение. Странно, но не смертельно. Функция ИНДЕКС также обычно возвращает одно значение. Но вот, что написано в Справке Excel: Если указать в качестве аргумента номер_строки или номер_столбца значение 0 (ноль), функция ИНДЕКС возвратит массив значений для целого столбца или целой строки соответственно. Чтобы использовать значения, возвращенные как массив, введите функцию ИНДЕКС как формулу массива в горизонтальный диапазон ячеек для строки и в вертикальный — для столбца.
Если функция ИНДЕКС возвращает массив, ее можно использовать внутри других функций, ожидающих, что аргумент является массивом.
Итак, указав в качестве третьего аргумента функции ИНДЕКС(1-ЕПУСТО(C2:K2);1;0) значение ноль, мы получим массив {0;0;1;0;0;0;0;0;0}.
Функция ПОИСКПОЗ выполняет поиск искомого значения в одномерном массиве и возвращает относительную позицию первого найденного совпадения. Формула =ПОИСКПОЗ(1,МАССИВ,0) просит Excel найти номер ячейки в МАССИВЕ, которая содержит первую встретившуюся единицу. Функция ПОИСКПОЗ определяет в каком столбце содержится первая непустая ячейка. Когда вы просите ПОИСКПОЗ найти первую 1 в массиве {0;0;1;0;0;0;0;0;0}, она возвращает 3.
Итак =ПОИСКПОЗ(1;ИНДЕКС(1-ЕПУСТО(C2:K2);1;0);0) превращается в =ПОИСКПОЗ(1;{0;0;1;0;0;0;0;0;0};0) и возвращает результат 3.
В этот момент, вы знаете, что третий столбец строки С2:К2 содержит первое непустое значение. Отсюда довольно просто, используя функцию ИНДЕКС, узнать само это первое непустое значение: =ИНДЕКС(МАССИВ;1;3) или =ИНДЕКС(C2:K2;1;ПОИСКПОЗ(1;ИНДЕКС(1-ЕПУСТО(C2:K2);1;0);0)).
Результат: 3
Рис. 2. Формула находит первую непустую ячейку в каждой строке и возвращает значение этой ячейки
Дополнительные сведения: если все ячейки пустые, то формула возвращает ошибку #Н/Д.
Альтернативные стратегии: когда вы из единицы вычитаете значение ЕПУСТО, вы преобразуете логические значения ИСТИНА/ЛОЖЬ в числовые 1/0. Вы могли бы пропустить этот шаг, но тогда вам придется искать ЛОЖЬ в качестве первого аргумента функция ПОИСКПОЗ: =ИНДЕКС(C2:K2;1;ПОИСКПОЗ(ЛОЖЬ;ИНДЕКС(ЕПУСТО(C2:K2);1;0);0)).
Источник.
Получить первое непустое значение в столбце или строке
Чтобы получить первое значение (первая ячейка, которая не пуста, без учета ошибок) из диапазона из одного столбца или одной строки, вы можете использовать формулу, основанную на ИНДЕКС и МАТЧ функции. Однако, если вы не хотите игнорировать ошибки из вашего диапазона, вы можете добавить функцию ISBLANK к приведенной выше формуле.
Получить первое непустое значение в столбце или строке, игнорируя ошибки
Получить первое непустое значение в столбце или строке, включая ошибки
Получить первое непустое значение в столбце или строке, игнорируя ошибки
Чтобы получить первое непустое значение в списке как показано выше игнорирование ошибок, вы можете использовать функцию ИНДЕКС, чтобы найти непустые ячейки. Затем вы можете использовать ПОИСКПОЗ, чтобы найти его положение, и которое будет передано в другой ИНДЕКС, чтобы получить значение в этой позиции.
Общий синтаксис
=INDEX(range,MATCH(TRUE,INDEX((range<>0),0),0))
- ассортимент: Диапазон из одного столбца или одной строки, в котором должна быть возвращена первая непустая ячейка с текстовыми или числовыми значениями при игнорировании ошибок.
Чтобы получить первое непустое значение в списке без учета ошибок, скопируйте или введите формулу ниже в ячейку E4 и нажмите Enter чтобы получить результат:
= ИНДЕКС (B4: B15, ПОИСКПОЗ (ИСТИНА; ИНДЕКС ((B4: B15<> 0), 0), 0))
Пояснение формулы
=INDEX(B4:B15,MATCH(TRUE,INDEX((B4:B15<>0),0),0))
- ИНДЕКС ((B4: B15 <> 0), 0): Фрагмент оценивает каждое значение в диапазоне B4: B15. Если ячейка пуста, она вернет FLASE; Если ячейка содержит ошибку, сниппет сам вернет ошибку; И если ячейка содержит число или текст, будет возвращено ИСТИНА. Поскольку row_num аргумент этой формулы ИНДЕКС: 0, поэтому фрагмент вернет массив значений для всего столбца следующим образом: {ЛОЖЬ; # ССЫЛКА!; ИСТИНА; ИСТИНА; ЛОЖЬ; ЛОЖЬ; ИСТИНА; ЛОЖЬ; ИСТИНА; ИСТИНА; ЛОЖЬ; ИСТИНА}.
- МАТЧ (ИСТИНА;ИНДЕКС ((B4: B15 <> 0), 0), 0) = МАТЧ (ИСТИНА;{ЛОЖЬ; # ССЫЛКА!; ИСТИНА; ИСТИНА; ЛОЖЬ; ЛОЖЬ; ИСТИНА; ЛОЖЬ; ИСТИНА; ИСТИНА; ЛОЖЬ; ИСТИНА}, 0): Наблюдения и советы этой статьи мы подготовили на основании опыта команды match_type 0 заставляет функцию ПОИСКПОЗ возвращать позицию первого точного ИСТИНА в массиве. Итак, функция вернет 3.
- ИНДЕКС (B4: B15,МАТЧ (ИСТИНА;ИНДЕКС ((B4: B15 <> 0), 0), 0)) = ИНДЕКС (B4: B15;3): Затем функция ИНДЕКС возвращает 3rd значение в диапазоне B4: B15, Которая является extendoffice.
Получить первое непустое значение в столбце или строке, включая ошибки
Чтобы получить первое непустое значение в списке, включая ошибки, вы можете просто использовать функцию ISBLANK, чтобы проверить ячейки в списке, являются ли они пустыми или нет. Затем ИНДЕКС вернет первое непустое значение в соответствии с позицией, предоставленной ПОИСКПОЗ.
Общий синтаксис
=INDEX(range,MATCH(FALSE,ISBLANK(range),0))
√ Примечание. Это формула массива, требующая ввода с помощью Ctrl + Shift + Enter.
- ассортимент: Диапазон из одного столбца или одной строки, в котором должна быть возвращена первая непустая ячейка с текстом, числами или значениями ошибки.
Чтобы получить первое непустое значение в списке, включая ошибки, скопируйте или введите формулу ниже в ячейку E7 и нажмите Ctrl + Shift + Enter чтобы получить результат:
= ИНДЕКС (B4: B15, ПОИСКПОЗ (ЛОЖЬ; ЕСТЬ ПУСТО (B4: B15), 0))
Пояснение формулы
=INDEX(B4:B15,MATCH(FALSE,ISBLANK(B4:B15),0))
- ISBLANK (B4: B15): Функция ISBLANK проверяет, находятся ли ячейки в диапазоне B4: B15 пустые или нет. Если да, будет возвращено ИСТИНА; В противном случае будет возвращено ЛОЖЬ. Итак, функция сгенерирует такой массив: {ИСТИНА; ЛОЖЬ; ЛОЖЬ; ЛОЖЬ; ИСТИНА; ИСТИНА; ЛОЖЬ; ИСТИНА; ЛОЖЬ; ЛОЖЬ; ИСТИНА; ЛОЖЬ}.
- МАТЧ (ЛОЖЬ;ISBLANK (B4: B15), 0) = МАТЧ (ЛОЖЬ;{ИСТИНА; ЛОЖЬ; ЛОЖЬ; ЛОЖЬ; ИСТИНА; ИСТИНА; ЛОЖЬ; ИСТИНА; ЛОЖЬ; ЛОЖЬ; ИСТИНА; ЛОЖЬ}, 0): Наблюдения и советы этой статьи мы подготовили на основании опыта команды match_type 0 заставляет функцию ПОИСКПОЗ возвращать позицию первого точного НЕПРАВДА в массиве. Итак, функция вернет 2.
- ИНДЕКС (B4: B15,МАТЧ (ЛОЖЬ;ISBLANK (B4: B15), 0)) = ИНДЕКС (B4: B15;2): Затем функция ИНДЕКС возвращает 2ое значение в диапазоне B4: B15, Которая является #REF!.
Связанные функции
Функция ИНДЕКС в Excel
Функция ИНДЕКС Excel возвращает отображаемое значение на основе заданной позиции из диапазона или массива.
Функция ПОИСКПОЗ в Excel
Функция ПОИСКПОЗ в Excel ищет определенное значение в диапазоне ячеек и возвращает относительное положение значения.
Связанные формулы
Точное совпадение с ИНДЕКСОМ и ПОИСКПОЗ
Если вам нужно найти информацию, указанную в Excel, о конкретном продукте, фильме или человеке и т. Д., Вы должны хорошо использовать комбинацию функций ИНДЕКС и ПОИСКПОЗ.
Получить первое текстовое значение в столбце
Чтобы получить первое текстовое значение из диапазона с одним столбцом, вы можете использовать формулу, основанную на функциях ИНДЕКС и ПОИСКПОЗ, а также формулу, основанную на функции ВПР.
Найдите первое частичное совпадение с помощью подстановочных знаков
Есть случаи, когда вам нужно получить позицию первого частичного совпадения, которое содержит определенное число в диапазоне числовых значений в Excel. В этом случае формула ПОИСКПОЗ и ТЕКСТ, содержащая звездочку (*), подстановочный знак, который соответствует любому количеству символов, окажет вам услугу. И если вам также нужно знать точное значение в этой позиции, вы можете добавить в формулу функцию ИНДЕКС.
Найдите первое частичное совпадение
Есть случаи, когда вам нужно получить позицию первого частичного совпадения, которое содержит определенное число в диапазоне числовых значений в Excel. В этом случае формула ПОИСКПОЗ и ТЕКСТ, содержащая звездочку (*), подстановочный знак, который соответствует любому количеству символов, окажет вам услугу. И если вам также нужно знать точное значение в этой позиции, вы можете добавить в формулу функцию ИНДЕКС.
Лучшие инструменты для работы в офисе
Kutools for Excel — Помогает вам выделиться из толпы
Хотите быстро и качественно выполнять свою повседневную работу? Kutools for Excel предлагает 300 мощных расширенных функций (объединение книг, суммирование по цвету, разделение содержимого ячеек, преобразование даты и т. д.) и экономит для вас 80 % времени.
- Разработан для 1500 рабочих сценариев, помогает решить 80% проблем с Excel.
- Уменьшите количество нажатий на клавиатуру и мышь каждый день, избавьтесь от усталости глаз и рук.
- Станьте экспертом по Excel за 3 минуты. Больше не нужно запоминать какие-либо болезненные формулы и коды VBA.
- 30-дневная неограниченная бесплатная пробная версия. 60-дневная гарантия возврата денег. Бесплатное обновление и поддержка 2 года.
Вкладка Office — включение чтения и редактирования с вкладками в Microsoft Office (включая Excel)
- Одна секунда для переключения между десятками открытых документов!
- Уменьшите количество щелчков мышью на сотни каждый день, попрощайтесь с рукой мыши.
- Повышает вашу продуктивность на 50% при просмотре и редактировании нескольких документов.
- Добавляет эффективные вкладки в Office (включая Excel), точно так же, как Chrome, Firefox и новый Internet Explorer.
If you frequently analyze data in Excel, you may come across empty cells before the actual values. Instead of removing these cells, you can get the position or even the value of the first non-blank cell with formulas. In this article, we are going to show you how to find the first non-blank cell in a range in Excel.
Download Workbook
Formula
Finding the position: {=MATCH(FALSE,ISBLANK(range),0)}
Get the value: {=INDEX(range,MATCH(FALSE,ISBLANK(range),0))}
* range is the reference from the work range
How it works
Excel doesn’t have a built-in formula to find the first non-blank cell in a range. However, there is ISBLANK function which checks a cell and returns a Boolean value according to its content. The function returns TRUE if cell is blank, FALSE otherwise. Thus, finding the first FALSE value means to find the first non-blank cell.
MATCH function can help to locate FALSE value. Once the position is in hand, you can use it with INDEX function to get the result.
Although VLOOKUP function can be used with a wild card “*” character, it can return only text values. If you are not familiar with INDEX & MATCH functions, please visit our guide: INDEX & MATCH: A Better Way to Look Up Data
The problem is ISBLANK function only works with a single cell. You need to use a helper column to populate TRUE and FALSE values which doesn’t sound practical. Instead, you can use an array function and not need the helper column.
Use the reference of your range of values in the ISBLANK function. This action will return an array of Boolean values. The first FALSE value indicates the position of the first non-blank cell in the range. Wrap the function with either MATCH or INDEX-MATCH combo to get the position or the value respectively.
Use Ctrl + Shift + Enter key combination instead of regular Enter key to evaluate the formula as an array formula.
As indicated in your comment on your question, you have 500 rows interspersed with blank cells. You want to fill blank cells with the value of the last non blank cell.
I’d write some VBA code that’d work as follows: select the range of cells you want to back fill and run this VBA:
Sub fillBlanks()
For Each c In Selection.Cells
If c.Value <> "" Then
lastVal = c.Value
Else
c.Value = lastVal
End If
Next c
End Sub
basically, if the cell is empty, use the value of the last non blank cell (if there were no blank cells above, it will remain blank). Else, if the cell is not empty, save this as the last non blank cell. Repeat for every cell in the selected range.
Step by Step instructions on using this vba code — for this sample worksheet:
Make sure the range is selected, press ALT+F11.
This should open the Visual Basic Editor:
Press F7, This should bring up the code for the activesheet. Paste the VB code from above:
Press F5 (or use the menu to run the code).
The end result should be as follows:
Подскажите пожалуйста, как сделать, чтоб в заданной ячейке возвращало значение первой/последней не пустой ячейки определенной строки таблицы??? |
|
{quote}{login=Антон}{date=07.08.2008 11:55}{thema=Как сделать, чтоб бралось значение первой не пустой ячейки определеннной строки таблицы?}{post}Подскажите пожалуйста, как сделать, чтоб в заданной ячейке возвращало значение первой/последней не пустой ячейки определенной строки таблицы???{/post}{/quote} таблицы в смысле листа целиком? списка? построенной вами таблицы? именнованого диапазона? пустые значения в строке расположены хаотически? и Вам абсолютно неизвестно каким образом значения попадают в непустые ячейки строки? |
|
…построенной мною таблицы, которая имеет определенные размеры. значения в ее строках расположены не хаотически, но могут постоянно меняться, в том числе быть пустыми. Кроме того значения в строках идут в возрастающем порядке слева направо, отсюда еще одна мысль решения этой проблемы: возможно брать не первое/последнее не пустое значание, а минимальное /максимальное в этой определенной строке! |
|
поска первого последнего не пустого значения в строке листа целиком эксель 2003 |
|
ИНДЕКС(1:1;1;ПОИСКПОЗ(3E+307;1:1)) но если захотите использовать эту формулу для столбца, то в поискпоз все же лучше указать не весь столбец целиком, а его урезанную версию, с необходимым запасом, конечно.. |
|
{quote}{login=Антон}{date=07.08.2008 12:51}{thema=Re: Re: Как сделать, чтоб бралось значение первой не пустой ячейки определеннной строки таблицы?}{post}…построенной мною таблицы, которая имеет определенные размеры. значения в ее строках расположены не хаотически, но могут постоянно меняться, в том числе быть пустыми. Кроме того значения в строках идут в возрастающем порядке слева направо, отсюда еще одна мысль решения этой проблемы: возможно брать не первое/последнее не пустое значание, а минимальное /максимальное в этой определенной строке!{/post}{/quote} тоесть вопрос о том как передать в формулу определённые номер строки таблицы? для вас найти мин/макс для заданного номера строки? если да то изучаем функцию смещ….. |
|
{quote}{login=слэн}{date=07.08.2008 01:00}{thema=последняя непустая ячейка в строке может быть найдена так:}{post}ИНДЕКС(1:1;1;ПОИСКПОЗ(3E+307;1:1)) но если захотите использовать эту формулу для столбца, то в поискпоз все же лучше указать не весь столбец целиком, а его урезанную версию, с необходимым запасом, конечно..{/post}{/quote} 3E+307 это кто????????!!!!!!! |
|
{quote}{login=DL}{date=07.08.2008 01:05}{thema=Re: последняя непустая ячейка в строке может быть найдена так:}{post}{quote}{login=слэн}{date=07.08.2008 01:00}{thema=последняя непустая ячейка в строке может быть найдена так:}{post}ИНДЕКС(1:1;1;ПОИСКПОЗ(3E+307;1:1)) но если захотите использовать эту формулу для столбца, то в поискпоз все же лучше указать не весь столбец целиком, а его урезанную версию, с необходимым запасом, конечно..{/post}{/quote} 3E+307 это кто????????!!!!!!!{/post}{/quote} это такое большое число, которого заведомо не может быть в таблице впрочем, если не нравится это, можете взять, допустим, 1E309 .. |
|
просто если его нет то как оно найдётся через поискпоз? |
|
{quote}{login=DL}{date=07.08.2008 01:23}{thema=про е+3000}{post}просто если его нет то как оно найдётся через поискпоз?{/post}{/quote} просто попробуйте.. только с поиском именно приближенного значения, не точного совпадения. кстати, индекс-то дает ссылку(т.е. само значение этой ячейки), а ее номер дает просто поискпоз |
|
{quote}{login=}{date=07.08.2008 01:34}{thema=Re: про е+3000}{post}{quote}{login=DL}{date=07.08.2008 01:23}{thema=про е+3000}{post}просто если его нет то как оно найдётся через поискпоз?{/post}{/quote} просто попробуйте.. только с поиском именно приближенного значения, не точного совпадения. кстати, индекс-то дает ссылку(т.е. само значение этой ячейки), а ее номер дает просто поискпоз{/post}{/quote} всё догнал это при условии что числа в строке расположены по возрастанию, а если есть текст или числа в беспорядке, то н/д. |
|
{quote}{login=}{date=07.08.2008 01:48}{thema=Re: Re: про е+3000}{post}{quote}{login=}{date=07.08.2008 01:34}{thema=Re: про е+3000}{post}{quote}{login=DL}{date=07.08.2008 01:23}{thema=про е+3000}{post}просто если его нет то как оно найдётся через поискпоз?{/post}{/quote} просто попробуйте.. только с поиском именно приближенного значения, не точного совпадения. кстати, индекс-то дает ссылку(т.е. само значение этой ячейки), а ее номер дает просто поискпоз{/post}{/quote} всё догнал это при условии что числа в строке расположены по возрастанию, а если есть текст или числа в беспорядке, то н/д.{/post}{/quote} почему же.. не обязательно. вернее совсем и не так. |
|
=ИНДЕКС(1:1;1;МАКС(ПОИСКПОЗ(3E+307;1:1);ПОИСКПОЗ(«яяяяя»;1:1))) |
|
«=ИНДЕКС(1:1;1;ПОИСКПОЗ(3E+307;1:1))» Эта формула работает, и находит последнюю не пустую ячейку и выводит ее значение в строке 1:1, а как найти первую не пустую ячейку? |
|
Антон, а макросом не хотите? |
|
Первую непустую? Это смотря откуда считать… |
|
Все оказалось гораздо проще, использовал функции МАКС/МИН;)) но как найти первую не пустую ячейку все же интересно! |
|
Может все же имеется ввиду последняя заполненная? Как то странно звучит «первая непустая» |
|
последнюю заполненную я нашел (см. предыдущее мое сообщение), а вот первую заполненную (не пустую) — нет(( |
|
{quote}{login=}{date=08.08.2008 02:03}{thema=Re: }{post}последнюю заполненную я нашел (см. предыдущее мое сообщение), а вот первую заполненную (не пустую) — нет(({/post}{/quote}Вы хотя бы читайте, что в теме пишут. эксель 2003 «первую заполненную» это разве не то же самое, что «первое не пустое»? |
|
{=ИНДЕКС(1:1;1;ПОИСКПОЗ(0;-ЕПУСТО(1:1);0))} |
|
Igor Пользователь Сообщений: 19 |
Все попробовал ниче не получается , может руки не оттуда растут … поможите есть столбец в нем данные (числовые).Необходимо в любую ячейку возвращать значение последней непустой ячейки в этом столбце. Заранее спасибо. |
Михаил С. Пользователь Сообщений: 10514 |
#23 22.09.2010 16:43:22 Давайте пример — поможем. |