Удаляем в EXCEL пропуски в списке (формулы)

history

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

Пусть имеется список с пустыми ячейками (столбец А ).

Задача

Убрать пустые ячейки из списка, сформировав формулами список в соседнем столбце. То есть под словом "убрать" будем понимать не удаление значения из исходного списка, а формирование еще одного списка, но уже без лишних символов. Чтобы действительно убрать значения из списка нужно использовать макросы - программу на VBA.

Решение



Для избавления от пустых ячеек запишем в ячейке B2 формулу массива и скопируем ее вниз (см. файл примера): =ЕСЛИОШИБКА(ДВССЫЛ("A"&НАИМЕНЬШИЙ(ЕСЛИ(ЕПУСТО($A$2:$A$14);"";СТРОКА($A$2:$A$14));СТРОКА(A1)));"")

Получим в соседнем столбце B список со значениями из исходого, но уже без пропусков. Формула работает одинакового и для текстовых значений и для чисел. Алгоритм работы формулы следующий:

  • ЕСЛИ(ЕПУСТО($A$2:$A$14);"";СТРОКА($A$2:$A$14)) – если ячейка не пуста, то эта часть формулы возвращает номер строки. То есть формируется массив номеров строк, НЕ содержащих пустоты {2:"":4:5:6:"":"":9:10:"":"":13:14} На месте пустых ячеек в массиве будет символ "" (пустой текст), но можно его заменить в формуле на любую текстовую строку, например "ккк". Проверить результат можно выделив эту часть формулы и нажав клавишу F9 ;
  • Функция НАИМЕНЬШИЙ() сортирует массив строк по возрастанию. В сортированном списке сначала будут идти номера строк затем значения "", т.к. в EXCEL считается, что любое текстовое значение больше любого числа (значение пустой текст - текстовое значение);
  • Далее для функции ДВССЫЛ() формируются адреса ячеек с непустыми значениями. Например, ДВССЫЛ("A"&2) возвращает значение из ячейки А2 . Для пустых ячеек будет формироваться ошибочные адреса ячеек, состоящие только из символа А. Это вызовет ошибку после применения функции ДВССЫЛ();
  • Функция ЕСЛИОШИБКА() вместо ошибки будет возвращать "". Этот символ не отображается в ячейке и ячейка выглядит пустой.

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

Изменим немного формулу: =ЕСЛИОШИБКА(НАИМЕНЬШИЙ(ЕСЛИ( ЕПУСТО($A$2:$A$14);"";$A$2:$A$14);СТРОКА(A1));"")

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

Список также можно сформировать в столбце С другой формулой массива :

=ЕСЛИОШИБКА(ДВССЫЛ("A"&НАИМЕНЬШИЙ(ЕСЛИ(ЕПУСТО(СписокСпропусками);"";СТРОКА(СписокСпропусками));СТРОКА()-СТРОКА($C$1)));"")

СписокСпропусками в формуле - это динамический диапазон , который образован формулой:

=СМЕЩ($A$2;;;ДлинаСпискаСпропусками)

Длину списка с пропусками можно вычислить с помощью формулы:

=ПОИСКПОЗ(ПОВТОР("я";10);$A$2:$A$14;1)

СОВЕТ:

Для удаления и выделения пустых строк и ячеек традиционными средствами EXCEL, пользуйтесь идеями из статей Удаляем пустые строки в таблице и Выделение группы ячеек . О том, что EXCEL понимает под пустыми ячейками, читайте в статье Подсчет пустых ячеек .

Удаляем заданные символы из списка

Часто в списке присутствуют ненужные для дальнейшего анализа значения, например 0 (нуль).

Немного модернизировав вышеуказанную формулу получим универсальный подход для удаления вообще любого символа, числа или текстовой строки из исходного списка (см. файл примера, в котором на листе Произвольный символ приведена универсальнаяформула).

Пусть исходный список находится в диапазоне A12:A24, а в ячейке B6 содержится значение которое нужно удалить из ячеек списка.

=ЕСЛИОШИБКА(ДВССЫЛ("A"&НАИМЕНЬШИЙ(ЕСЛИ($A$12:$A$24=$B$6;"";СТРОКА($A$12:$A$24));СТРОКА()-СТРОКА($A$11)));"")

Единственным отличием является выражение $A$12:$A$24=$B$6, которое заменило формулу с ЕПУСТО(...)

Теперь если значение в исходном списке не равно искомому значению, то вместо него будет выведено значение "" (в конце списка).



Комментарии

Только для авторизованных пользователей

Аноним, 2 марта 2018 г.
Спасибо огромное! Очень помогли и доходчиво "разжевали")
Алексей, 24 октября 2021 г.
Добрый день! У меня два вопроса к Вашим примерам. 1) Обращает на себя внимание применение неидентичных формул в строках массива. Так, формулы =ЕСЛИОШИБКА(ДВССЫЛ("A"&НАИМЕНЬШИЙ(ЕСЛИ(ЕПУСТО($A$2:$A$14);"";СТРОКА($A$2:$A$14));СТРОКА(A1)));"") а также =ЕСЛИОШИБКА(НАИМЕНЬШИЙ(ЕСЛИ(ЕПУСТО($A$2:$A$14);"";$A$2:$A$14);СТРОКА(A1));"") в конце содержат функцию СТРОКА(А1), которая меняет свой аргумент с А1 на А2, А3 и т.д. Это видно в строке для формул, когда пробегаешь курсором по массиву от строке к строке. При этом во всех источниках, в том числе и в Ваших публикациях, указывается, что формулы в каждой строке массива должны по теории быть неизменными (это, кстати, декларируется как защита от изменений массива - невозможно изменить только какую-то его часть, нужно менять сразу весь массив). 2) В формуле =ЕСЛИОШИБКА(ДВССЫЛ("A"&НАИМЕНЬШИЙ(ЕСЛИ(ЕПУСТО(СписокСпропусками);"";СТРОКА(СписокСпропусками));СТРОКА()-СТРОКА($C$1)));"") есть аргумент "СписокСпропусками". Далее указано, что "СписокСпропусками" в формуле - это динамический диапазон. Но функция ДВССЫЛ не работает с динамическими диапазонами, как это утверждают некоторые источники (это одно из ограничений этой функции). Как Вам удалось составить такие формулы и как вообще такое может быть, мне не понятно. Я не могу воспроизвести у себя Ваши формулы. У меня операционная система Win7 и Excel из пакета Microsoft Office профессиональный 2010. Объясните, пожалуйста, эти противоречия. Спасибо!
Евгений, 2 ноября 2021 г.
Отличный вопрос "Как Вам удалось составить такие формулы?". Это магия! )))) Чтобы в ней разобраться последовательно выделяйте выражения в строке формул и нажимайте F9. Сначала ЕПУСТО($A$2:$A$14), потом ЕСЛИ(ЕПУСТО($A$2:$A$14);"";СТРОКА($A$2:$A$14)), затем НАИМЕНЬШИЙ(ЕСЛИ(ЕПУСТО($A$2:$A$14);"";СТРОКА($A$2:$A$14));СТРОКА(A1)) и т.д. Почитайте про формулы массива на нашем сайте. Эти формулы - высший пилотаж. Нужно изучать азы.
(только для авторизованных пользователей)

© Copyright 2013 - 2024 Excel2.ru. All Rights Reserved