Как найти крайнюю ячейку в excel

Excel для Microsoft 365 Excel 2021 Excel 2019 Excel 2016 Excel 2013 Excel 2010 Excel 2007 Еще…Меньше

При этом в Excel сохраняется только часть каждого из них, которая содержит данные или форматирование. Пустые ячейки могут содержать форматирование, из-за котором последняя ячейка в строке или столбце выпадет за пределы диапазона ячеек, содержащих данные. В результате размер файла книги будет больше, чем требуется, и при печати книги на печать может потребоваться больше страниц.

Чтобы избежать этих проблем, можно найти последнюю ячейку с данными или форматированием на нем, а затем сбросить эту последнюю ячейку, сбросить все форматирование, которое может быть применено в пустых строках или столбцах между данными и последней ячейкой.

Поиск последней ячейки с данными или форматированием на нем

  • Чтобы найти последнюю ячейку с данными или форматированием, щелкните в любом месте на нем и нажмите CTRL+END.

Примечание: Чтобы выбрать последнюю ячейку в строке или столбце, нажмите клавишу END, а затем клавишу СТРЕЛКА ВПРАВО или СТРЕЛКА ВНИЗ.

Очистка всего форматирования между последней ячейкой и данными

  1. Выполните одно из указанных ниже действий.

    • Чтобы выбрать все столбцы справа от последнего столбца с данными, щелкните первый заголовок столбца, нажмите и удерживайте нажатой кнопку CTRL, а затем щелкните заголовки столбцов, которые нужно выбрать.

      Совет: Можно также щелкнуть первый заголовок столбца и нажать CTRL+SHIFT+END.

    • Чтобы выбрать все строки под последней строкой с данными, щелкните заголовок первой строки, нажмите и удерживайте нажатой кнопку CTRL, а затем щелкните заголовки строк, которые нужно выбрать.

      Совет: Можно также щелкнуть заголовок первой строки и нажать CTRL+SHIFT+END.

  2. На вкладке Главная в группе Редактирование щелкните стрелку рядом с кнопкой Очистить Изображение кнопкии выберите очистить все.

  3. Сохраните лист.

  4. Закроем таблицу.

    При повторном открыть книгу последняя ячейка данных должна быть последней ячейкой на этом сайте.

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

Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.

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

Нужна дополнительная помощь?

 

MrBrown

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

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

Здравствуйте!
Как найти последнюю заполненную ячейку — есть много постов.
А мне нужно найти адрес правой нижней ячейки диапазона, ограниченного рамкой.
К примеру, рамка охватывает диапазон A1:G18.
Макрос должен найти ячейку G18 или, лучше, первую ячейку вне диапазона — H19.
(независимо, заполнена ячейка или пустая)
Подскажите, пожалуйста, какие команды можно использовать, чтобы макрос опирался на расположение рамки.
Спасибо.
p.s. Если на листе несколько рамок, то ищется самая крайняя ячейка (пересечение — крайний правый столбец, имеющий хотя бы единственную обрамлённую ячейку, и такая же крайняя нижняя строка).
p.p.s Догадываюсь, что нужно использовать слово «Borders», а как именно — ума не приложу.

Изменено: MrBrown03.06.2019 16:48:26

 

Sanja

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

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

Муторное это дело — перебирать ячейки и проверять на наличие границ. Лучше ‘привязаться’ к какому нибудь другому признаку. Как правило, какая нибудь ячейка со словом ‘Итого’ или что-то вроде этого

Изменено: Sanja03.06.2019 16:48:53

Согласие есть продукт при полном непротивлении сторон.

 

MrBrown

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

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

#3

03.06.2019 16:52:52

Цитата
Sanja написал:
Муторное это дело

ОК, тогда так (чтобы не перебирать все миллионы ячеек):
организовать цикл справа налево, снизу вверх, начиная с сотой ячейки  в строке и в столбце — «CV:100».
Этого будет более, чем достаточно.
Как макрос упирается в первую попавшуюся ячейку с бордюром (даже если ячейка касается бордюра только точечно, уголком) , так — три зелёных свистка и — msgbox «Вот она!!! Поймал!!!»

Изменено: MrBrown03.06.2019 16:55:28

 

Sanja

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

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

#4

03.06.2019 17:10:03

Цитата
MrBrown написал: лучше, первую ячейку вне диапазона
Код
Sub FindBorders()
Dim cl As Range
With ActiveSheet
For Each cl In .UsedRange.Cells
    If cl.Borders(xlEdgeRight).LineStyle <> xlNone And cl.Borders(xlEdgeBottom).LineStyle <> xlNone Then
        MsgBox "Ячейка найдена!" & vbCrLf & "Адрес - " & cl.Offset(1, 1).Address(0, 0)
    End If
Next
End With
End Sub

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

  • FindBorders.xlsm (15.39 КБ)

Согласие есть продукт при полном непротивлении сторон.

 

MrBrown

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

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

Sanja, спасибо, но годится только для одинарной рамки («внешние границы»).
А если сделать несколько вложенных рамок или вообще замостить бордюрами («все границы»),
то макрос определяет каждую ячейку с бордюром.
А надо — только одну, самую правую и нижнюю.

 

Sanja

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

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

#6

03.06.2019 17:25:06

Цитата
MrBrown написал: А надо — только одну, самую правую и нижнюю.

Ну поэкспериментируйте сами.

Цитата
MrBrown написал: Догадываюсь, что нужно использовать слово «Borders», а как именно — ума не приложу.

Я Вам показал как ‘использовать это слово’

Согласие есть продукт при полном непротивлении сторон.

 

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

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Sanja

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

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

#8

03.06.2019 17:32:07

MrBrown, я Вас сразу предупредил

Цитата
Sanja написал: Муторное это дело

Ищите другой признак.

Согласие есть продукт при полном непротивлении сторон.

 

MrBrown

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

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

Ігор Гончаренко, здесь — ячейка C3.
пересечение ПРОДОЛЖЕНИЯ крайнего правого и ПРОДОЛЖЕНИЯ нижнего бордюра, и — смещение вправо вниз на ячейку.
(вариант — ячейка В2. Это та, которая остаётся внутри пересечения.)
Мне подошёл бы любой вариант.

Sanja, а можно так? (см. ответ Игорю Гончаренко).

Изменено: MrBrown04.06.2019 09:23:16

 

RAN

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

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

Опираться на границу ячейки — плохая идея.
Угадайте с 2 раз, какая ячейка отвечает вашим условиям?

 

MrBrown

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

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

RAN, крайняя — правая нижняя ячейка. Это С10.
Согласен, тут приведён прикольный вариант с бордюрами.
В таком случае макросу надо дать возможность самому виртуально построить рамку вокруг всех ячеек, имеющих части бордюра.

 

Андрей VG

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

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

Excel 2016, 365

#12

04.06.2019 10:33:31

Доброе время суток

Цитата
MrBrown написал:
здесь — ячейка C3.

Вариант

Скрытый текст

 

MrBrown

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

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

#13

05.06.2019 12:09:15

Вот частный случай:
надо найти ячейку АМ56 (закрашена жёлтым).

Андрей VG, благодарю за код. Но, как ни пытался использовать функцию, вставлять её в процедуру «Sub», — не получилось.
Знаний мало. Подскажите, что вписать в скобки после наименования функции:

Код
Sub test()
    getBottomRightOutsideBorderCell
    MsgBox result
End Sub

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

  • Частный случай.xlsb (10.75 КБ)

Изменено: MrBrown05.06.2019 12:10:55

 

Андрей VG

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

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

Excel 2016, 365

#14

05.06.2019 12:23:41

Цитата
MrBrown написал:
Знаний мало

Предупреждать надо, что вы программист Ctrl+C, Ctrl+V :)

Код
Sub test()
    Dim lastNonBorderCell As Range
    Set lastNonBorderCell = getBottomRightOutsideBorderCell(ActiveSheet)
    If Not lastNonBorderCell Is Nothing Then MsgBox lastNonBorderCell.Address(ReferenceStyle:=xlA1, External:=True)
End Sub
 

MrBrown

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

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

#15

05.06.2019 12:47:46

Андрей VG, Работает! Моя благодарность — словами не описать.

Цитата
Андрей VG написал:
Предупреждать надо, что вы программист Ctrl+C, Ctrl+V

Класс! Я восхищён таким точным определением дилетанта от программирования. :)
Возьму на вооружение. :D  

Изменено: MrBrown05.06.2019 14:12:41

Вы не упомянули, как вы успешно получаете самое правильное значение в таблице. Один из способов сделать это, введя следующую формулу в ячейку B9:

=LOOKUP(2,1/(2:2<>0),2:2)

Эта формула работает так, что 2:2<>0 возвращает массив значений True/False, в которых ячейки в строке 2 не являются пустыми. 1/(2:2<>"") возвращает массив, состоящий из 1 для каждой непустой ячейки и # DIV/0! за каждую пустую ячейку. LOOKUP ищет в возвращенном массиве значение 2; поскольку это значение отсутствует в массиве, оно находит последнее вхождение следующего наибольшего значения (в данном случае 1). LOOKUP возвращает значение из последнего параметра (2:2), которое соответствует найденному значению.

Мы можем изменить эту формулу, чтобы она возвращала значение ячейки перед последним непустым значением, введя ее в ячейку C9:

=LOOKUP(2,1/(B2:ZZ2<>0),A2:ZY2)

В этой версии массив, в котором ищется значение, смещается влево на одну ячейку от массива, в котором был произведен поиск, в результате чего ячейка слева от последней возвращаемой ячейки. Обратите внимание, что вы должны быть уверены, что данные не выходят за пределы диапазонов, используемых в LOOKUP (ZZ2 в моем примере).


Найдем номер строки последней заполненной ячейки в столбце и списке. По номеру строки найдем и само значение.

Рассмотрим диапазон значений, в который регулярно заносятся новые данные.

Диапазон без пропусков и начиная с первой строки

В случае, если в столбце значения вводятся, начиная с первой строки и без пропусков, то определить номер строки последней заполненной ячейки можно формулой:

=СЧЁТЗ(A:A))

Формула работает для числовых и текстовых диапазонов (см.

Файл примера

)

Значение из последней заполненной ячейки в столбце выведем с помощью функции

ИНДЕКС()

:

=ИНДЕКС(A:A;СЧЁТЗ(A:A))

Ссылки на целые столбцы и строки достаточно ресурсоемки и могут замедлить пересчет листа. Если есть уверенность, что при вводе значений пользователь не выйдет за границы определенного диапазона, то лучше указать ссылку на диапазон, а не на столбец. В этом случае формула будет выглядеть так:

=ИНДЕКС(A1:A20;СЧЁТЗ(A1:A20))

Диапазон без пропусков в любом месте листа

Если список, в который вводятся значения расположен в диапазоне

E8:E30

(т.е. не начинается с первой строки), то формулу для определения номера строки последней заполненной ячейки можно записать следующим образом:

=СЧЁТЗ(E9:E30)+СТРОКА(E8)

Формула

СТРОКА(E8)

возвращает номер строки заголовка списка. Значение из последней заполненной ячейки списка выведем с помощью функции

ИНДЕКС()

:

=ИНДЕКС(E9:E30;СЧЁТЗ(E9:E30))

Диапазон с пропусками (числа)

В случае

наличия пропусков

(пустых строк) в столбце, функция

СЧЕТЗ()

будет возвращать неправильный (уменьшенный) номер строки: оно и понятно, ведь эта функция подсчитывает только значения и не учитывает

пустые

ячейки.

Если диапазон заполняется

числовыми

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

=ПОИСКПОЗ(1E+306;A:A;1)

. Пустые ячейки и текстовые значения игнорируются.

Так как в качестве просматриваемого массива указан целый столбец (

A:A

), то функция

ПОИСКПОЗ()

вернет номер последней заполненной строки. Функция

ПОИСКПОЗ()

(с третьим параметром =1) находит позицию наибольшего значения, которое меньше или равно значению первого аргумента (1E+306). Правда, для этого требуется, чтобы массив был

отсортирован

по возрастанию. Если он не отсортирован, то эта функция возвращает позицию последней заполненной строки столбца, т.е. то, что нам нужно.

Чтобы вернуть значение в последней заполненной ячейке списка, расположенного в диапазоне

A2:A20

, можно использовать формулу:

=ИНДЕКС(A2:A20;ПОИСКПОЗ(1E+306;A2:A20;1))

Диапазон с пропусками (текст)

В случае необходимости определения номера строки последнего

текстового

значения (также при наличии пропусков), формулу нужно переделать:

=ПОИСКПОЗ(«*»;$A:$A;-1)

Пустые ячейки, числа и текстовое значение

Пустой текст

(«») игнорируются.

Диапазон с пропусками (текст и числа)

Если столбец содержит и

текстовые и числовые значения

, то для определения номера строки последней заполненной ячейки можно предложить универсальное решение:

=МАКС(ЕСЛИОШИБКА(ПОИСКПОЗ(«*»;$A:$A;-1);0); ЕСЛИОШИБКА(ПОИСКПОЗ(1E+306;$A:$A;1);0))

Функция

ЕСЛИОШИБКА()

нужна для подавления ошибки возникающей, если столбец

A

содержит только текстовые или только числовые значения.

Другим универсальным решением является

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

:

=МАКС(СТРОКА(A1:A20)*(A1:A20<>»»))

Или

=МАКС(СТРОКА(A1:A20)*НЕ(ЕПУСТО(A1:A20)))

После ввода

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

нужно нажать

CTRL + SHIFT + ENTER

. Предполагается, что значения вводятся в диапазон

A1:A20

. Лучше задать фиксированный диапазон для поиска, т.к. использование в

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

ссылок на целые строки или столбцы является достаточно ресурсоемкой задачей.

Значение из последней заполненной ячейки, в этом случае, выведем с помощью функции

ДВССЫЛ()

:

=ДВССЫЛ(«A»&МАКС(СТРОКА(A1:A20)*(A1:A20<>»»)))

Или

=ДВССЫЛ(«A»&МАКС(СТРОКА(A1:A20)*НЕ(ЕПУСТО(A1:A20))))

Как обычно, после ввода

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

нужно нажать

CTRL + SHIFT + ENTER

вместо

ENTER

.


СОВЕТ:

Как видно, наличие пропусков в диапазоне существенно усложняет подсчет. Поэтому имеет смысл при заполнении и проектировании таблиц придерживаться правил приведенных в статье

Советы по построению таблиц

.

Определение места крайней НЕнулевой ячейки в столбце

Arkanzas

Дата: Вторник, 25.04.2017, 13:05 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 14


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Здравствуйте уважаемы знатоки MS Exel!

Снова вынужден к Вам обратиться за помощью т.к сам не осилил и на других форумах не нашел подходящего решения.
Прошу набраться терпения и дочитать до конца, зайду издалека т.к не знаю как это объяснить коротко:)
Есть рабочая таблица в которой я каждый день отмечаю детали которые были смонтированы, по датам (столбцы E-G). В ячейке I1 есть открывающийся список дат. Я выбираю нужную мне дату и в том же столбце появляются марки с их количеством в скобках и запятой после скобки —

II-ФО-41 (1шт),

Мне нужно чтобы формула (которя вписана в ячейках столбца I) проверяла, является ли проверяемая ячейка последней НЕНУЛЕВОЙ в этом столце и выводила то же значение, но без запятой т.е вот так

II-ФО-41 (1шт)

Очень надеюсь на Вашу помощь

К сообщению приложен файл:

5093787.xlsx
(12.4 Kb)

 

Ответить

китин

Дата: Вторник, 25.04.2017, 13:16 |
Сообщение № 2

Группа: Модераторы

Ранг: Экселист

Сообщений: 6973


Репутация:

1063

±

Замечаний:
0% ±


Excel 2007;2010;2016

ну как то так примерно

Код

=ЕСЛИ(ИНДЕКС($E3:$G3;;ПОИСКПОЗ($K$1;$E$1:$G$1;0))=0;»»;$D3&»(«&ИНДЕКС($E3:$G3;;ПОИСКПОЗ($K$1;$E$1:$G$1;0))&») шт.»)

я тут просто убрал доп.столбец Н
а если вам надо просто убрать запятую, то

Код

=ЕСЛИ(H3=0;»»;» «&D3&» («&H3&»шт)»)

К сообщению приложен файл:

222333.xlsx
(12.6 Kb)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

Сообщение отредактировал китинВторник, 25.04.2017, 13:22

 

Ответить

Perfect2You

Дата: Вторник, 25.04.2017, 13:16 |
Сообщение № 3

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 237


Репутация:

59

±

Замечаний:
0% ±


Excel 2010

Такая формула решает задачу:

Код

=ЕСЛИ(H3=0;»»;» «&D3&» («&H3&»шт)»&ЕСЛИ(СЧЁТЕСЛИ($H:$H;»>0″)=СЧЁТЕСЛИ($H$1:$H3;»>0″);»»;»,»))

 

Ответить

AlexM

Дата: Вторник, 25.04.2017, 13:52 |
Сообщение № 4

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

Еще варианты. Дополнительный столбец Н не нужен

Код

=ЕСЛИ(СУММЕСЛИ(E$1:G$1;H$1;E3:G3);D3&» («&СУММЕСЛИ(E$1:G$1;H$1;E3:G3)&»шт)»;»»)

или

Код

=ТЕКСТ(СУММЕСЛИ(E$1:G$1;H$1;E3:G3);D3&» (0 шт);;»)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

Arkanzas

Дата: Вторник, 25.04.2017, 14:18 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 14


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Perfect2You, формула работает. Спасибо большое!! Не ожидал, что так быстро получу ответ. Спасибо!)
Есть небольшая просьба к Вам, не могли бы вы объяснить как она работает?
Я просто стараюсь развиваться, но с формулой СЧЕТЕСЛИ не сталкивался вовсе.
А особенно интересно, почему в уравнении вторая функций «Счетесли») ссылается на закрепленный диапазон H1:H3? Это принципиально влияет на результат?
Буду премного благодарен!)

Сообщение отредактировал ArkanzasВторник, 25.04.2017, 14:19

 

Ответить

Perfect2You

Дата: Вторник, 25.04.2017, 14:31 |
Сообщение № 6

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 237


Репутация:

59

±

Замечаний:
0% ±


Excel 2010

$H$1:$H3 — не совсем закрепленный диапазон. Столбец закреплен везде, 1 — тоже, а вот 3 — нет. При копировании диапазон проверки увеличивается. Когда доходит до последнего заполненного значения, количество заполненных ячеек по столбцу $H:$H сравнивается с количеством заполненных ячеек до текущей строки и это тот моммент, когда запятая по Вашему условию не нужна.

 

Ответить

Arkanzas

Дата: Среда, 26.04.2017, 16:30 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 14


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Perfect2You, Спасибо! Все понятно и главное просто!
Я немного надстроил эту формулу и получилось все как надо! Спасибо!

P/S Всегда когда ставлю себе какую-либо «сложную» задачу, голова закипает при поиске решения, в итоге когда решаюсь написать вопрос на форуме, в голове уже представляется, что если ответ будет (в этом случает я себе так голову заморочил, что начал думать, что задача не имеет решения), то это будет какая-то нереально длинная и сложная формула их 100-500 различных функций, но когда вижу ответ улыбаюсь и плачу от простоты и доступности.
Обожаю Exel)))

 

Ответить

vikttur

Дата: Суббота, 29.04.2017, 15:55 |
Сообщение № 8

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2941

Код

=ЕСЛИОШИБКА(D3&» («&1/ПРОСМОТР(999;1/($E$1:$G$1=$I$1);E3:G3)&»шт.)»;»»)

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Как найти кпер в excel
  • Как найти коэффициенты уравнения регрессии excel
  • Как найти коэффициенты системы в excel
  • Как найти коэффициенты линейной регрессии в excel
  • Как найти коэффициент от суммы в excel