Поиск первой заполненной ячейки в строке excel

Это глава из книги Билла Джелена Гуру Excel расширяют горизонты: делайте невозможное с Microsoft Excel.

Задача: требуется формула, которая позволяла найти первое непустое значение в строке, т.е., возвращала бы номер первой непустой ячейки в строке. Предположим, что данные представлены в столбцах С:K (рис. 1).

Рис. 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. Формула находит первую непустую ячейку в каждой строке и возвращает значение этой ячейки

Рис. 2. Формула находит первую непустую ячейку в каждой строке и возвращает значение этой ячейки

Дополнительные сведения: если все ячейки пустые, то формула возвращает ошибку #Н/Д.

Альтернативные стратегии: когда вы из единицы вычитаете значение ЕПУСТО, вы преобразуете логические значения ИСТИНА/ЛОЖЬ в числовые 1/0. Вы могли бы пропустить этот шаг, но тогда вам придется искать ЛОЖЬ в качестве первого аргумента функция ПОИСКПОЗ: =ИНДЕКС(C2:K2;1;ПОИСКПОЗ(ЛОЖЬ;ИНДЕКС(ЕПУСТО(C2:K2);1;0);0)).

Источник.

 

Доброго времени суток форумчане. Помогите с решением проблемы. Какую формулу применить для определения первой заполненной ячейки (столбец F). Ни чего не нашел подходящего. Попытался обойти поиск первой заполненной ячейки так: в голубой ячейки вписал такую формулу =ПОИСКПОЗ(E1+307;E:E) и думал сделать СМЕЩ на соседнюю ячейку, но не могу получить ссылку на последнюю заполненную ячейку.
Подскажите мне формулу первой заполненной ячейки для зеленого столбца, либо формулу последней заполненной ячейки со смещением, для желтого столбца.
Прикрепил скрин и фаил, на всякий случай.

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Без формул массива, попроще:
=ПОИСКПОЗ(9E+307;F1:F24)-СЧЁТ(F1:F24)+1
Но с условием, что диапазон чисел не разбит пустыми ячейками

Формула массива:
=МИН(ЕСЛИ(F8:F24;СТРОКА(F8:F24)))
Если нужно, отнять количесто строк до начала диапазона

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

rumpelshtitchen, здравия. Не совсем понятно, что значит первая заполненная? IMHO, первая заполненная в зел. столб. — яч. F7.

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

Catboyun

Пользователь

Сообщений: 1631
Регистрация: 09.05.2015

формула массива:
=ПОИСКПОЗ(1=1;ЕЧИСЛО(E:E);)
обычная, строго по примеру:
=ПОИСКПОЗ(МИН(F:F);F:F;)
Ваша +

=ПОИСКПОЗ(E1+307;E:E)-СЧЁТ(E:E)+1

не обратил внимания — правильно у vikttur

Изменено: Catboyun23.01.2016 15:06:57

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Еще, если по примеру: начало вторых измерений=конец первых — искать последнее значение столбца Е

 

rumpelshtitchen

Пользователь

Сообщений: 136
Регистрация: 15.05.2015

#6

23.01.2016 15:10:25

Цитата
JayBhagavan написал:

нет, нет…. это моя недоработка, мне необходима формула которая определит первую заполненную ячейку (число)

 

gling

Пользователь

Сообщений: 4024
Регистрация: 01.01.1970

#7

23.01.2016 15:17:25

Для первого в Е

Код
=ПОИСКПОЗ(9^9;E1:E25)

Для последнего в F если нет пустых ячеек в столбце между числами

Код
=ПОИСКПОЗ(9^9;F1:F25)-СЧЁТ(F1:F25)+1

или формула массива

Код
=ПОИСКПОЗ(1=1;ЕЧИСЛО(F1:F25);0)

Прикрепленные файлы

  • разработка2.xlsx (9.56 КБ)

 

Благодарю всех за ответы, но к сожалению это не совсем то что нужно, ну или я рукожоп))))), все выше предложенные варианты выдают ссылку на 14 строку столбца F, а как получить ссылку на ячейку F14 (первая заполненная ячейка для данного варианта), с учетом возможности изменения данной ячейкb (первой заполненной) в диапазоне F1;F100, то есть в диапазоне F1;F100 первой заполненной ячейкой может стать любая…

Изменено: rumpelshtitchen23.01.2016 15:35:24

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#9

23.01.2016 15:53:25

Цитата
не совсем то что нужно

А кто писал номер в ячейке? Так и поняли, что нужно положение значения.

 

gling

Пользователь

Сообщений: 4024
Регистрация: 01.01.1970

А Вы пробовали формулу массива из сообщения #4 только для столбца F, или третью формулу из сообщения #7 изменив 25 на 100? Если да, то что в них не так?

 

да, и в том и в том случае выдает «Н/Д»

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#12

23.01.2016 17:47:06

Цитата
…формулу массива…

Это когда вводить формулу Ctrl+Shift+Enter и она обрамится фигурными скобками.

 

vikttur,и в том и в том случае выдает цифру 14, я так понимаю это номер строки….

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Кто мешает искать в  диапазоне по номеру строки?
=ИНДЕКС(диапазон; номер_строки)

Посмотрите время размещения сообщений с ответами. Разница между сообщениями с ответами по первому вопросу (секунды, минуты) и ответы после уточнения. Заметно, да?
Неинтересно стало. Формулировать задачу нужно сразу, иначе рискуете остаться без решения.

 

дорогие друзья, применил вот такую формулу =ИНДЕКС(E1:E25;ПОИСКПОЗ(9^9;E1:E25))….в принципе то же самое, что и такая ПРОСМОТР(9E+307;E:E) выбирает в желтом столбце последнее значение это «6».. а возможно такое, что бы данный элемент формулы.ПОИСКПОЗ(9^9;E1:E25) был заменен номером ячейки которая нам нужна, ну что то вроде такого:=ИНДЕКС(E1:E25;СМЕЩ(Е14;1;0)) где Е14 является данным куском формулы ПОИСКПОЗ(9^9;E1:E25)????

Изменено: rumpelshtitchen23.01.2016 23:33:40

 

Catboyun

Пользователь

Сообщений: 1631
Регистрация: 09.05.2015

#16

24.01.2016 07:50:11

Цитата
rumpelshtitchen написал:СМЕЩ

Вам нравятся летучие формулы?
Или это учебное задание?
=СМЕЩ(ИНДЕКС(E:E;ПОИСКПОЗ(9^9;E:E));-СЧЁТ(E:E)+1;)

 

rumpelshtitchen

Пользователь

Сообщений: 136
Регистрация: 15.05.2015

#17

24.01.2016 11:36:14

Цитата
Catboyun написал: Вам нравятся летучие формулы?

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

 

Catboyun

Пользователь

Сообщений: 1631
Регистрация: 09.05.2015

#18

25.01.2016 07:37:51

Цитата
rumpelshtitchen написал:но другого варианта

=ИНДЕКС(E:E;ПОИСКПОЗ(9^9;E:E)-СЧЁТ(E:E)+1)

Цитата
rumpelshtitchen написал:при условии

если есть пустые, не массивная:
=ИНДЕКС(E:E;СУММПРОИЗВ(НАИБОЛЬШИЙ((E:E<>»»)*СТРОКА(E:E);СЧЁТ(E:E))))

Цитата
vikttur написал:
Кто мешает искать в  диапазоне по номеру строки?
=ИНДЕКС(диапазон; номер_строки)

Хитрости »

6 Май 2011              34874 просмотров


Как определить первую заполненную ячейку на листе?

Иногда помимо определения последней заполненной ячейки на листе необходимо определять и первую. Обычно это необходимо для поиска заголовка таблицы, если таблица «плавающая». Т.е. таблица может менять свое положение на листе, а найти где эта таблица начинается все же необходимо, чтобы производить действия исключительно внутри нужных данных. Чтобы найти первую заполненную ячейку с просмотром на всем листе можно применить такой код:

Sub Get_First_Cell()
    Dim lFirstRow As Long, lFirstCol As Long, rFndRng As Range
    'проверяем, есть ли данные в первой ячейке диапазона данных
    If ActiveSheet.UsedRange.Cells(1, 1) <> "" Then
        lFirstRow = ActiveSheet.UsedRange.Row
        lFirstCol = ActiveSheet.UsedRange.Column
    Else
        'ищем ячейку с любым значением(так же с формулой)
        Set rFndRng = ActiveSheet.UsedRange.Find("*", , xlFormulas, xlWhole)
        If rFndRng Is Nothing Then
            MsgBox "Лист не содержит данных", vbInformation, "Информация": Exit Sub
        End If
        lFirstRow = rFndRng.Row: lFirstCol = rFndRng.Column
    End If
    MsgBox "Номер строки первой заполненной ячейки: " & lFirstRow & vbNewLine & _
           "Номер столбца первой заполненной ячейки: " & lFirstCol
End Sub

Как видите — все довольно просто. Никаких особых заморочек и трудностей.

Если необходимо определить первую заполненную ячейку в определенном столбце:

Sub Get_First_Cell_InColumn()
    Dim lFirstRow As Long, rFndRng As Range
    'проверяем, есть ли данные в первой ячейке столбца B (2)
    If ActiveSheet.Columns(2).Rows(1) <> "" Then
        lFirstRow = 1
    Else
        'ищем ячейку с любым значением(так же с формулой)
        Set rFndRng = ActiveSheet.Columns(2).Find("*", , xlFormulas, xlWhole)
        If rFndRng Is Nothing Then
            MsgBox "Лист не содержит данных", vbInformation, "Информация": Exit Sub
        End If
        lFirstRow = rFndRng.Row
    End If
    MsgBox "Номер строки первой заполненной ячейки столбца B: " & lFirstRow
End Sub

Если найти нужно первую ячейку, но не учитывая скрытые(т.е. игнорировать при этом скрытые строки и столбцы), то можно попробовать применить такой код:

Sub Get_First_Cell_IgnoreHiddenCells()
    Dim lFirstRow As Long, lFirstCol As Long, rFndRng As Range
 
    'делаем пропуск ошибок на случай, если на листе нет данных
    On Error Resume Next
    'ищем ячейку с любым значением(так же с формулой)
    Set rFndRng = ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Find("*", , xlFormulas, xlWhole)
    'не нашли ячейку - завершаем процедуру
    If rFndRng Is Nothing Then
        MsgBox "Лист не содержит данных", vbInformation, "Информация"
        Exit Sub
    Else'нашли ячейку - получаем данные по номеру строки и столбца
        lFirstRow = rFndRng.Row: lFirstCol = rFndRng.Column
        MsgBox "Номер строки первой заполненной ячейки: " & lFirstRow & vbNewLine & _
               "Номер столбца первой заполненной ячейки: " & lFirstCol
    End If
End Sub

Если искать первую ячейку необходимо не по наличию данных(коды выше определят ячейку, если в ней есть формула или значение), а исключительно по видимому значению(т.е. чтобы даже если в ячейке есть формула, но она не возвращает никакого значения, то такая ячейка не учитывалась), то в любом приведенном выше коде надо в строке:
.Find(«*», , xlFormulas, xlWhole)
заменить xlFormulas на xlValues

Так же см.:
Как определить последнюю ячейку на листе через VBA?


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Здравствуйте, форумчане! В Excel-e не новичок, пользуюсь давно, но вот перемкнуло: :-[ не получается построить формулу, выбирающую значение из первой непустой ячейки столбца. До сих пор использовал макросы или обходные пути, но чувствую, что должно быть более простое и быстрое решение. Устроит любая форма адресации — ссылка, смещение, номер строки. Заранее спасибо! :)


Позицию первой непустой ячейки можно вернуть так:
=ПОИСКПОЗ(«?»;A1:A10&»»;) — формула массива (текст и числа)
или:
=ПОИСКПОЗ(«*»;A1:A10 ;) — обычная формула (только текст)

Ну и соответственно возврат самих значений:
=ВПР(«?»;A1:A10&»»;1;) — формула массива (текст и числа) — возвращает числа также в виде текста.
и
=ВПР(«*»;A1:A10;1;) — обычная формула (только текст)

Webmoney: E350157549801 Z116603216205 R268084006579


Не «массивная» формула для поиска номера строки:
=СУММПРОИЗВ(ПОИСКПОЗ(«*?*»;(«»&A1:A23);0))

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…
www.excel-vba.ru
Просто СПАСИБО [+оказать+]
Считаешь СПАСИБО мало? Яндекс.Деньги: 41001332272872; WM: R298726502453


Ну раз такое дело, во еще  ;)
=ПРОСМОТР(«»;A1:A10&»»;A2:A11)

Webmoney: E350157549801 Z116603216205 R268084006579



Цитата: Axacal от 27.06.2011, 13:40
Формула =ПРОСМОТР(«»;A1:A10&»»;A2:A11) на столбце со смещанным содержимым (пустые клетки, текст, числа) вообще ведет себя некорректно.

У меня работает, см. вложение.
Заодно добавил ещё свой вариантик формулы, который не предлагали ранее.

Цитата: Axacal от 27.06.2011, 13:40
Что означает приклеивание амперсандом пробела к адресу массива (A1:A10&»»)?

Замена пустых строк строками нулевой длинны.


Еще вариант немассивной:

=ПОИСКПОЗ("*?";ИНДЕКС(""&A1:A23;);)

ЦитироватьКстати, что означает приклеивание амперсандом пробела к адресу массива (A1:A10&»»)?

цифры в массиве становятся текстовыми данными


Хочется добавить:
Сцепляется не с пробелом, а со строкой нулевой длины.
Для корректной работы формулы: =ПРОСМОТР(«»;A1:A10&»»;A2:A11) требуется хотябы одна пустая верхняя ячейка.

Webmoney: E350157549801 Z116603216205 R268084006579


Возникла похожая, но «обратная» задача: найти первую пустую строку.
В принципе, мне удались решения с доп. столбцом и с формулой массива, но хочется упростить задачу.
Есть ли у кого-нибудь идеи?


пока придумалась такая формула массива:
=СУММ(C4:ИНДЕКС(C4:$C$13;ПОИСКПОЗ(» «;» «&B4:$B$13;0))*D4:ИНДЕКС(D4:$D$13;ПОИСКПОЗ(» «;» «&B4:$B$13;0)))

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…
www.excel-vba.ru
Просто СПАСИБО [+оказать+]
Считаешь СПАСИБО мало? Яндекс.Деньги: 41001332272872; WM: R298726502453


Finding the first blank cell in your workbook can become a fairly repetitive task, especially in situations like adding new rows into a large data set. In this article, we are going to show you how to find the first blank cell in a range in Excel, and also show you how to create a hyperlink to cells directly.

Download Workbook

Formula

Finding the position:      {=MATCH(TRUE,ISBLANK(RANGE),0)}

The address:                      { =CELL(«address»,INDEX(RANGE,MATCH(TRUE,ISBLANK(RANGE),0)))

Hyperlink:           {=HYPERLINK(“#”&CELL(«address»,INDEX(RANGE,MATCH(TRUE,ISBLANK(RANGE),0))))}

*             range is the reference from the work range

**           {} characters are put by Excel automatically. Do not type them.

How it works

Excel doesn’t have a built-in formula to find the first blank cell in a range. However, there is the ISBLANK function, which tests 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 blank cell.

MATCH function can help locate a TRUE value. Once the position is found, you can use it with the INDEX function to return its reference. CELL and HYPERLINK functions can use the reference information to display the address and create a hyperlink.

The problem is that the ISBLANK function can only work with a single cell. You need to use a helper column to populate TRUE and FALSE values which doesn’t sound too practical. Instead, you can forego using a helper column by using an array function.

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 blank cell in the range. Wrap the function with MATCH to get the position.

Use Ctrl + Shift + Enter key combination instead of just pressing the Enter key to enter the formula as an array formula.

=MATCH(TRUE,ISBLANK(B5:B12),0)

How to find the first blank cell in a range in Excel 01

Return address of the first blank cell

The INDEX function has a lesser known feature which is returning the cell reference, instead of its value. Once the reference is found, you can use it with other functions that need a reference. The CELL function is one of them.

The CELL function can return the address of a reference. If you need the address as a string, use the following formula.

=CELL(«address»,INDEX(B5:B12,MATCH(TRUE,ISBLANK(B5:B12),0)))

As you have guess already, this formula needs Ctrl + Shift + Enter as well.

Hyperlink to the first blank cell

The HYPERLINK function has a unique ability like converting a text into a hyperlink. You can create hyperlinks anywhere on an Excel workbook. Just remember to add a “#” character in front. “#” character tells Excel that the following path is an Excel reference.

=HYPERLINK(«#»&CELL(«address»,INDEX(B5:B12,MATCH(TRUE,ISBLANK(B5:B12),0))))

Like this post? Please share to your friends:
  • Поиск первого символа в excel
  • Поиск первого непустого значения в столбце excel
  • Поиск первого значения в таблице excel
  • Поиск первого значения в массиве excel
  • Поиск первого вхождения excel