Подскажите, пожалуйста, как решить проблему с тем, что Excel воспринимает пустые ячейки как 0? Мне нужно посчитать несмежные ячейки по критерию <5. Среди несмежных ячеек есть временно пустые, но которые со временем будут заполнены. Почему-то Excel учитывает эти пустые ячейки, как будто в них содержится значение 0 и тоже считает их. Как сделать так, чтобы пустые ячейки не считались? Функция =СУММ(A1<5;A3<5;A8<5; и т.д. очень много ячеек, среди которых есть пустые). Update после поста № 25: На данный момент лучшее решение предложил Сергей , а именно формулу =СУММПРОИЗВ((A1:N1<5)*НЕ(ЕПУСТО(A1:N1))*{1;0;1;0;1;0;1;0;1;0;1;1;0;1}) Изменено: Eugen_excel – 20.02.2017 13:43:42 |
|
Karataev Пользователь Сообщений: 2308 |
Могу предложить делать проверку, пусто в ячейке или нет: Еще вариант придумал: Изменено: Karataev – 19.02.2017 23:34:49 |
БМВ Модератор Сообщений: 21607 Excel 2013, 2016 |
#3 19.02.2017 23:38:41
сумма нулей обычно равна нулю. “счетесли” пропускает пустые. Приложите файл, всем понятнее будет. По вопросам из тем форума, личку не читаю. |
||
elnur_quba Пользователь Сообщений: 34 |
Снимите галочку) |
vikttur Пользователь Сообщений: 47199 |
elnur_quba, и чего Вы добьетесь? |
Eugen_excel
, Программисты – это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
Спасибо всем за ответы! Прикладываю файл-пример, из которого вы все поймете Прошу помочь решить задачу! |
|
Сергей Пользователь Сообщений: 11251 |
#8 20.02.2017 08:40:28 вариант
Лень двигатель прогресса, доказано!!! |
||
Eugen_excel Пользователь Сообщений: 37 |
#9 20.02.2017 08:53:37
Вы выделили диапазон A1:N1, но ячейка B1, например, мне не нужна. Там будет другое значение и ее будет использовать другая функция, скажем “больше 2”. Да и пустые ячейки со временем заполнятся и “поломают” предложенную функцию. Мне нужны только отдельные несмежные ячейки. Неужели придется суммировать миллион функций СЧЕТЕСЛИ для каждой отдельной ячейки? Изменено: Eugen_excel – 20.02.2017 08:56:42 Excel 2010 |
||
Сергей Пользователь Сообщений: 11251 |
#10 20.02.2017 08:56:51 еще вариант
Лень двигатель прогресса, доказано!!! |
||
Сергей Пользователь Сообщений: 11251 |
#11 20.02.2017 09:00:29 смотрите файл
Прикрепленные файлы
Лень двигатель прогресса, доказано!!! |
||
elnur_quba Пользователь Сообщений: 34 |
=СУММЕСЛИ(A1,”<5″,A1)+СУММЕСЛИ(C1,”<5″,C1)+СУММЕСЛИ(E1,”<5″,E1)+СУММЕСЛИ(G1,”<5″,G1)+СУММЕСЛИ(I1,”<5″,I1)+СУММЕСЛИ(K1,”<5″,K1)+СУММЕСЛИ(L1,”<5″,L1)+СУММЕСЛИ(N1,”<5″,N1) |
@ Сергей Функция с массивом =СУММПРОИЗВ((A1:N1<5)*(A1:N1>0)*{1;0;1;0;1;0;1;0;1;0;1;1;0;1}) выглядит интересно. Но проблема в том, что пока еще пустая ячейка может получить значение 0 и не будет посчитана по данной формуле. А нужно, чтобы если в ячейке стоит 0, то ячейка тоже считалась, ведь она удовлетворяет критерию “<5”. Функция с необходимостью дополнительно добавлять новую строку с подписью-критерием работает, но выглядит вычурно. Не хотелось бы лишних нагромождений. @ elnur_quba Хотелось бы избежать множественных повторений “СУММЕСЛИ”, “СЧЕТЕСЛИ”, а прописать все несмежные ячейки одной формулой. Конечно, если решения не найдется, буду суммировать отдельные функции СЧЕТЕСЛИ для каждой отдельной ячейки. |
|
Сергей Пользователь Сообщений: 11251 |
вам уже показано несколько вариантов играйтесь экспериментируйте вместо (A1:N1>0) поставьте НЕ(ЕПУСТО(A1:N1) Лень двигатель прогресса, доказано!!! |
Z Пользователь Сообщений: 6111 Win 10, MSO 2013 SP1 |
#15 20.02.2017 09:30:05
OFF Так будьте сами последовательны – зачем в ваших данных “черезполосица”?! В чем ее ЦЕЛЕСООБРАЗНОСТЬ?.. “Ctrl+S” – достойное завершение ваших гениальных мыслей!.. 😉 |
||
Целесообразность в том, что необходимо посчитать кол-во ячеек, удовлетворяющих определенному критерию, которые несмежны между собой. У вас ведь не всегда смежные диапазоны. Необходимые данные находятся в разных несмежных ячейках и их никак не поместить в соседние ячейки. |
|
Z Пользователь Сообщений: 6111 Win 10, MSO 2013 SP1 |
#17 20.02.2017 10:00:45
OFF Нет лишь одного пути к цели, варианты при желании можно найти и применить. Главное – не зашориваться, а уметь взглянуть на ситуацию с разных сторон. В вашем случае мы имеем лишь кусок из задачи, о которой вы и не упоминаете, а это не помешало бы более приемлемому построению данных и поиску решения… “Ctrl+S” – достойное завершение ваших гениальных мыслей!.. 😉 |
||
Eugen_excel Пользователь Сообщений: 37 |
#18 20.02.2017 10:51:32
Я ищу наиболее рациональный и простой способ решить задачу подсчета количества несмежных ячеек по определенному критерию.Я верю, что существует простой способ решить эту проблему, просто еще не нашелся человек, который это умеет и знает как делать правильно. Надеюсь, вам тоже интересно найти простой способ решения этой, на первый взгляд, детской задачи, а не использовать километровые формулы с кучей повторяющихся “СЧЕТЕСЛИ” и т.д., или нагромождать таблицу лишними вспомогательными данными. У меня 40 таких несмежных ячеек. Представьте как это будет выглядеть: прописать формулу с 40 “СЧЕТЕСЛИ+СЧЕТЕСЛИ+СЧЕТЕСЛИ”. Неужли нет более простого способа подсчета несмежных ячеек? Excel 2010 |
||
Сергей Пользователь Сообщений: 11251 |
#19 20.02.2017 11:48:56 Сами придумали себе проблему и героически с ней боретесь чем не устроил вариант =СУММПРОИЗВ((A1:N1<5)*НЕ(ЕПУСТО(A1:N1)*{1;0;1;0;1;0;1;0;1;0;1;1;0;1}), или вы даже его не пробовали а говорите
Лень двигатель прогресса, доказано!!! |
||
AlbertSF Пользователь Сообщений: 48 |
#20 20.02.2017 12:02:35 Eugen_excel, ваша формула в файле примере посчитала все верно.
Условие у вас “Нужно посчитать количество ячеек…”, а формулу пишете “Сумм”. Например, у меня формула
дает результат 3. Что верно. Пустые ячейки не считает. Если добавить в этот диапазон 0. то результат станет 4. Какой результат хотите получить в итоге? |
||||
Eugen_excel Пользователь Сообщений: 37 |
#21 20.02.2017 12:51:44
Как это не пробовал? Указанная функция считает неправильно. Excel 2010 |
||
Сергей Пользователь Сообщений: 11251 |
читайте название файла Прикрепленные файлы
Лень двигатель прогресса, доказано!!! |
Eugen_excel Пользователь Сообщений: 37 |
#23 20.02.2017 13:02:36
Да вы поймите, что нельзя использовать в функции СЧЕТЕСЛИ диапазон A1:N1. Нужно посчитать определенное кол-во несмежных ячеек, а не целый диапазон смежных ячеек! Завтра ячейка B1 будет иметь значение “4” и тоже посчитается, но она мне не нужна! Функция СЧЕТЕСЛИ не работает с несмежными ячейками/диапазонами. Уже столько неудачных попыток было предложено, что видимо забыли, в чем состоит суть проблемы. Нужно посчитать количество несмежных ячеек по 1 конкретному критерию. В примере критерий – это <5. Интересуют только ячейки A1, C1, E1, G1, I1, K1, L1 и N1. Но никак не диапазон от A до N. Еще раз прикладываю файл-пример. Неужели придется искать какой-нибудь техникум с соответствующей кафедрой, где изучают excel и там просить какого-нибудь студента первокурсника помочь? Думал, для людей, хорошо разбирающихся в программе (к числу которых я, к сожалению, не отношусь), такая пустяковая задача не составит трудностей. Тем более подобная задача (работа с несмежными ячейками) должна возникать довольно часто на практике. Не всегда же у вас идеальные смежные диапазоны ячеек. Или я не прав? Прикрепленные файлы
Excel 2010 |
||
Сергей Пользователь Сообщений: 11251 |
да нафига козе баян, что вы уткнулись в эти не смежные ячейки вам показали как отсечь ненужные из диапазона че еще надо то, если такая любовь прописывать ячейки по отдельности для чего вы тему эту создали когда предложенные решения вас не устраивают Лень двигатель прогресса, доказано!!! |
Eugen_excel Пользователь Сообщений: 37 |
#25 20.02.2017 13:30:06
Вот так работает =СУММПРОИЗВ((A1:N1<5)*НЕ(ЕПУСТО(A1:N1))*{1;0;1;0;1;0;1;0;1;0;1;1;0;1}) Я когда вводил предыдущую формулу мне почему-то excel сам подправил и получилось неправильно. Сравнил с Вашей, удалил лишние скобки и получилось. Подводим промежуточный итог: Сергей с формулой =СУММПРОИЗВ((A1:N1<5)*НЕ(ЕПУСТО(A1:N1))*{1;0;1;0;1;0;1;0;1;0;1;1;0;1}) за что ему большое спасибо! Excel 2010 |
||
Eugen_excel Пользователь Сообщений: 37 |
#26 20.02.2017 13:47:06 Я обновил первый пост, чтобы другим людям было легче найти решение, которое предложил Сергей – вполне достойное решение для работы с отдельными несмежными ячейками, которые находятся в одной таблице на разумном расстоянии друг от друга. Excel 2010 |
поэтому в excel я пытаюсь избавиться от пустых ячеек между моими ячейками, в которых есть информация, используя F5 для поиска пустых ячеек, затем Ctrl + – для их удаления и сдвига ячеек вверх. Но когда я пытаюсь это сделать, он говорит мне, что “клеток не найдено”.
Я заметил, что если я выбираю свои “пустые” ячейки, Excel все еще считает их: что странно. Но если я нажму Delete на эти выбранные ячейки, счетчик исчезнет, а затем я могу перейти F5, пробелы, Ctrl + – и Сдвиньте клетки вверх, и это сработает…
Итак, мой вопрос в том, как я могу это сделать, но с этими пустыми ячейками, которые Excel считает не пустыми? Я попытался пройти и просто нажать delete над пустыми ячейками, но у меня много данных и понял, что это займет слишком много времени. мне нужно найти способ выбрать эти “пустые” ячейки в пределах выбора данных.
заранее спасибо за вашу помощь! 🙂
15 ответов
откровение: некоторые пустые ячейки на самом деле не пустой! Как я покажу, ячейки могут иметь пробелы, новые строки и true empty:
чтобы найти эти ячейки быстро вы можете сделать несколько вещей.
- на
=CODE(A1)
формула вернет значение#! если клетка действительно пуста, в противном случае вернется. Это число -номер ASCII в=CHAR(32)
. - если вы выделите ячейку и щелкните в строке формул и используйте курсор, чтобы выбрать все.
удаление этих:
если у вас есть только пробел в клетках они могут быть легко удалены с помощью:
- пресс ctrl + h чтобы открыть find и replace.
- введите одно место в найти, оставить заменить на пустой и убедитесь, что у вас есть матч всей ячейки содержание галочкой в опциях.
- пресс заменить все.
если у вас newlines это сложнее и требует VBA:
- щелкните правой кнопкой мыши на вкладке листа > Просмотр кода.
-
затем введите следующий код. Помните
Chr(10)
новая строка заменяет это только по мере необходимости, например" " & Char(10)
это пробел и новая строка:Sub find_newlines() With Me.Cells Set c = .Find(Chr(10), LookIn:=xlValues, LookAt:=xlWhole) If Not c Is Nothing Then firstAddress = c.Address Do c.Value = "" Set c = .FindNext(c) If c Is Nothing Then Exit Do Loop While c.Address <> firstAddress End If End With End Sub
-
Теперь запустите ваш код нажатие Ф5.
после файл поставляется: выберите диапазон интересов для повышения производительности, затем выполните следующие действия:
Sub find_newlines()
With Selection
Set c = .Find("", LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = ""
Set c = .FindNext(c)
If c Is Nothing Then Exit Do
Loop While c.Address <> firstAddress
End If
End With
End Sub
простой способ выбрать и очистить эти пустые ячейки, чтобы сделать их пустыми:
- пресс ctrl + a или предварительно выберите свой диапазон
- пресс ctrl + f
- оставить найти пустой и выберите матч всего содержимого ячейки.
- нажмите найти все
- пресс ctrl + a выбрать все пустые ячейки нашли
- закрыть поиск диалоговое окно
- пресс backspace или удалить
Это сработало для меня:
- CTR-H для поиска и замены
- оставьте “найти что” пустой
- изменить “заменить на” на уникальный текст, то, что вы
положительный не будет найден в другой ячейке (я использовал ‘xx’) - клик
“Заменить Все” - скопируйте уникальный текст на Шаге 3, чтобы найти то, что’
- удалить уникальный текст в “заменить на”
- нажмите “заменить все”
У меня была аналогичная проблема, когда разбросанные пустые ячейки из экспорта из другого приложения все еще отображались в подсчетах ячеек.
мне удалось очистить их
- выбор столбцов / строк, которые я хотел очистить, а затем делать
- “найти” [без текста] и” заменить ” [слово выбора].
- затем я сделал “найти” [слово выбора] и” заменить ” на [нет текста].
он избавился от всех скрытых / фантомных персонажей в тех ячейки. Может, это сработает?
все, это довольно просто. Я пытался сделать то же самое, и это то, что сработало для меня в VBA
Range("A1:R50").Select 'The range you want to remove blanks
With Selection
Selection.NumberFormat = "General"
.Value = .Value
End With
С уважением,
Ананд Ланка
Если у вас нет форматирования или формул, которые вы хотите сохранить, вы можете попробовать сохранить файл в виде текстового файла с разделителями табуляции, закрыть его и снова открыть с помощью excel. Это сработало для меня.
'Select non blank cells
Selection.SpecialCells(xlCellTypeConstants, 23).Select
' REplace tehse blank look like cells to something uniqu
Selection.Replace What:="", Replacement:="TOBEDELETED", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
'now replace this uique text to nothing and voila all will disappear
Selection.Replace What:="TOBEDELETED", Replacement:="", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
нашел другой способ. Установите автофильтр для все столбцы (важно или вы будете смещать данные), выбрав строку заголовка > вкладка “данные” > сортировка и фильтр – “фильтр”. Используйте раскрывающийся список в первом столбце данных, снимите флажок “выбрать все” и выберите только “(пробелы) ” > [OK]. Выделите строки (Теперь все вместе) > щелкните правой кнопкой мыши > “удалить строку”. Вернитесь к раскрывающемуся меню > ‘Select all’. Престо:)
Не уверен, что это уже было сказано, но у меня была аналогичная проблема с ячейками, ничего не показывающими в них, но не пустыми при запуске формулы IsBlank ().
Я выбрал весь столбец, выбрал Find & Replace, нашел ячейки ни с чем и заменил на 0, затем снова запустил find и replace, найдя ячейки с 0 и заменив их на “”.
Это решило мою проблему и позволило мне искать пустые ячейки (F5, специальные, пробелы) и удалять строки, которые были пусты….БУМ.
может не работать для каждого приложения, но это решило мою проблему.
иногда в ячейках есть пробелы, которые кажутся пустыми, но если вы нажмете F2 на ячейке, вы увидите пробелы. Вы также можете выполнить поиск таким образом, если знаете точное количество пробелов в ячейке
Это работает с цифрами.
Если ваш диапазон O8:O20, то в соседнем пустом диапазоне (например, T8: T20) введите =O8/1 и заполните. Это даст вам результат #VALUE для “пустых” ячеек, и ваш исходный номер останется прежним.
затем с выбранным диапазоном T8: 20 (CTL -*, если это еще не так) нажмите F5 и выберите специальный. В специальном диалоге выберите ошибки и нажмите кнопку ОК. Это отменит выбор фактических номеров, оставив только выбранные ячейки #VALUE. Удалите их, и у вас будут фактические пустые ячейки. Скопируйте T8:T20 и вставьте обратно через O8: O20.
по существу, поскольку пустые ячейки не работают, вам нужно преобразовать “пустые” ячейки во что-то, что может зацепиться за специальное. Любое действие, которое будет преобразовано в #VALUE, будет работать, и другие типы “ошибок” также должны поддерживаться.
мой метод похож на предложение Курта выше о сохранении его как файла с разделителями табуляции и повторном импорте.
Предполагается, что данные имеют только значения без формул.
Это, вероятно, хорошее предположение, потому что проблема “плохих” пробелов вызвана путаницей между пробелами и нулями-обычно в данных, импортированных из какого-то другого места, – поэтому не должно быть никаких формул.
Мой метод –разобрать на месте — очень похоже на сохранение в виде текстового файла и повторный импорт, но вы можете сделать это без закрытия и повторного открытия файла.
Он находится в разделе Данные > текст в Столбцы > разделители > удалить все символы синтаксического анализа (также можно выбрать текст, если хотите) > готово. Это должно заставить Excel повторно распознавать ваши данные с нуля или из текста и распознавать пробелы как действительно пустые.
Вы можете автоматизировать это в подпрограмме:
Sub F2Enter_new()
Dim rInput As Range
If Selection.Cells.Count > 1 Then Set rInput = Selection
Set rInput = Application.InputBox(Title:="Select", prompt:="input range", _
Default:=rInput.Address, Type:=8)
' Application.EnableEvents = False: Application.ScreenUpdating = False
For Each c In rInput.Columns
c.TextToColumns Destination:=Range(c.Cells(1).Address), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, _
FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
Next c
Application.EnableEvents = True: Application.ScreenUpdating = True
End Sub
вы также можете включить эту прокомментированную строку, чтобы эта подпрограмма выполнялась “в фоновом режиме”. Для этой подпрограммы улучшается производительность только немного (для других это действительно может помочь).
Имя-F2Enter, потому что исходный ручной метод для исправления этой проблемы “пробелов” – заставить Excel распознать формулу, нажав F2 и Enter.
вот как я исправил эту проблему без какого-либо кодирования.
- выберите весь столбец, из которого я хотел удалить “пустые” ячейки.
- щелкните вкладку Условное форматирование вверху.
- Выберите “Новое Правило”.
- нажать “форматировать только ячейки, которые содержат”.
- изменить “между” На “равно”.
- нажмите на поле рядом с полем” равно”.
- нажмите одну из проблемных” пустых ” ячеек.
- клик кнопка формат.
- выберите случайный цвет для заполнения коробки.
- нажмите “OK”.
- Это должно изменить все проблемные” пустые ” ячейки на цвет, который вы выбрали. Теперь щелкните правой кнопкой мыши одну из цветных ячеек и перейдите в раздел “сортировать” и “поместить выбранный цвет ячейки сверху”.
- это поставит все проблемные ячейки в верхней части столбца, и теперь все ваши другие ячейки останутся в исходном порядке, в котором вы их поместите. Теперь вы можете выбрать все проблемные ячейки в одной группе и нажмите кнопку Удалить ячейку сверху, чтобы избавиться от них.
самым простым решением для меня было:
1) Выберите диапазон и скопируйте его (ctrl+c)
2)Создайте новый текстовый файл (в любом месте, он будет удален в ближайшее время), откройте текстовый файл, а затем вставьте в excel информацию (ctrl+v)
3) Теперь, когда информация в Excel находится в текстовом файле, выполните select all в текстовом файле (ctrl+a), а затем скопируйте (ctrl+c)
4) перейдите к началу исходного диапазона на шаге 1 и вставьте его старая информация из копии на Шаге 3.
готово! Больше никаких фальшивых заготовок! (теперь вы можете удалить временный текстовый файл)
Goto – > Special – >blanks не любит объединенные ячейки. Попробовать unmerging клеток выше диапазона, в котором вы хотите выбрать то, болванками попробовать снова.
У меня была аналогичная проблема с получением формулы COUNTA для подсчета непустых ячеек, она считала все из них (даже пустые как непустые), я попытался =CODE (), но у них не было пробелов или новых строк.
Я обнаружил, что когда я щелкнул в ячейке, а затем щелкнул из нее, формула будет считать ячейку. У меня были тысячи ячеек, поэтому я не мог сделать это вручную. Я написал этот оператор VBA, чтобы буквально проверить все ячейки, и если они были пустыми, то сделать их пустыми. Игнорируйте бессмысленность этого макроса и поверьте мне, что он действительно работал, заставляя Excel распознавать пустые ячейки как пустые.
'This checks all the cells in a table so will need to be changed if you're using a range
Sub CreateBlanks()
Dim clientTable As ListObject
Dim selectedCell As Range
Set clientTable = Worksheets("Client Table").ListObjects("ClientTable")
For Each selectedCell In clientTable.DataBodyRange.Cells
If selectedCell = "" Then
selectedCell = ""
End If
Next selectedCell
End Sub
Мне надо бы понять механизм. Если бы дело обстояло только в формулах, то я наверно как-нибудь выкрутился бы. У меня написан макрос, который копирует некий диапазон и вставляет только значения в другой лист, а после этого его сортирует по алфавиту. Пока сортирую в обратном порядке, поскольку мне надо, чтобы скопированные названия были сверху. Сама сортировка больше даже не для того, чтобы было по алфавиту, а для того, чтобы не было пропусков между названиями, поскольку тот диапазон, откуда всё копируется, имеет пропуски, а надо, чтобы те ячейки, которые не пустые шли друг за другом.
Вообще эта часть программы представляет из себя следующее:
Есть несколько торговых точек одной сети. В поля для этих точек вносятся проданные товары и сумма выручки, программа автоматически выводит процент наценки (который внесён до этого на отдельный лист), если товар ещё не вносился и процент наценки не указан, то выскакивает предупреждение, если в рамках одной точки вносится проданный товар, который уже вносился как проданный сегодня, то идёт предупреждение «повтор». После заполнения полей «наименование» и «выручка» для всех торговых точек нажимается кнопка, которая сводит данные в одном месте ссумируя выручку по товарам, если товар с одним наименованием был продан в разных точках. Если товар был продан только в одной точке, то соответственно переносятся данные без ссумирования (т.к. суммировать не с чем), если товар не продался нигде, то он не вносится вообще. При этом товары в точках продаж можно вносить в любой последовательности и даже с пропусками строк.
Вот возникла сложность с прямой алфавитной сортировкой в сводной части. Пока реализовал в обратном порядке.
Excel считает такие ячейки заполненными текстом – фигня какая-то. Где вообще эту информацию о ячейке можно увидеть? Для очистки ячейки помимо описанного выше способа можно нажимать «Делит» или «Бэкспейс».
Хитрости »
6 Май 2017 48236 просмотров
Эта статья будет близка тем, кому приходится часто работать с отчетами, выгруженными в Excel из программ вроде 1С, SAP и им подобных. Хотя, справедливости ради, надо отметить, что и в обычных файлах Excel такая проблема может так же встречаться, особенно, если в файле использовались различные формулы.
Вводные данные: есть отчет который выкачивается из сторонней программы. В нем есть ячейки, с виду пустые: в них нет пробелов, нет переносов на строки, никаких символов, нет объектов, условного форматирования, в настройках не стоит скрывать нули(Файл –Параметры –Дополнительно –Показывать нули в ячейках, которые содержат нулевые значения). Даже если перейти в режим редактирования ячейки – там пусто.
Если попробовать найти такие “пустые” ячейки(выделить все ячейки листа -F5 -Выделить -Пустые ячейки) – они не выделяются. Но фильтр при этом их видит как пустые и фильтрует как пустые.
Любые математические действия(умножение на ячейку, сложение, деление и т.п.) внутри формул с такими ячейками выдают ошибку #ЗНАЧ!(#VALUE!), а функция ЕПУСТО(ISBLANK) считает ячейку не пустой. Формулы вроде СУММ(SUM) и СЧЁТ(COUNT) игнорируют такие ячейки, а СЧЁТЗ(COUNTA) считает их заполненными.
И самое удивительное – если выделить такую ячейку вручную и нажать Delete (или вкладка Главная -группа Редактирование –Очистить содержимое) – то ячейка становится действительно пустой и с ней начинают работать формулы и другие функции Excel как с реально пустой.
Здесь возникает главный вопрос: что с этой ячейкой не так, если там и до Delete ничего не было?
А не так с ней вот что: практически во всех программах есть такое понятие строковых(текстовых) данных, как строка нулевой длины(еще её часто называют нулевая строка. В Visual Basic for Application такая строка обозначается константой vbNullString, в ячейках её можно встретить как сочетание двух кавычек подряд – “”). Визуально такой текст себя никак не проявляет, однако это все же текст. А любой текст это уже не пусто, но и не число.
Откуда может появится такой текст в ячейках? Здесь несколько вариантов:
- Он есть в ячейках изначально, потому что именно так настроена выгрузка и создание файлов в сторонней программе(вроде 1С). В некоторых случаях такие выгрузки настроены таким образом, что как таковых пустых ячеек нет – они просто заполняются строкой нулевой длины.
- в ячейке была записана формула, результатом которой стал текст нулевой длины. Самый простой пример такой формулы:
=ЕСЛИ(A1=1;10;””)
=IF(A1=1,10,””)
в итоге, если в ячейке A1 записано любое значение, отличное от 1 формула вернет строку нулевой длины. И если впоследствии формулу заменять значением(Как удалить в ячейке формулу, оставив значения?), то получим нашу псевдо пустую ячейку.
Если формулы создаются Вами и в дальнейшем планируются производить с этими ячейками математические действия, то лучше вместо “” ставить 0. Тогда проблем не будет. Нули всегда можно заменить или скрыть: Файл –Параметры –Дополнительно –Показывать нули в ячейках, которые содержат нулевые значения
А если такой файл делали не Вы – он достался “по наследству” или это выгрузка из другой программы, что делать тогда? Я предлагаю такой вот нехитрый код, который во всех выделенных ячейках заменит строки нулевой длины на нормальные пустые ячейки:
Sub ReplaceNullString() Dim rR As Range, rF As Range, ra As Range Dim avR, lr As Long, lc As Long Set rR = Intersect(ActiveSheet.UsedRange, Selection) On Error Resume Next Set rR = rR.SpecialCells(xlCellTypeConstants) On Error GoTo 0 If rR Is Nothing Then MsgBox "В выделенных ячейках нет значений!", vbInformation, "www.excel-vba.ru" Exit Sub End If Set rF = rR.Find(vbNullString, , xlFormulas, xlWhole) If Not rF Is Nothing Then For Each ra In rR.Areas avR = ra.Value If Not IsArray(avR) Then ReDim avR(1 To 1, 1 To 1) avR(1, 1) = rR.Value End If For lr = 1 To UBound(avR, 1) For lc = 1 To UBound(avR, 2) If avR(lr, lc) = "" Then ra.Item(lr, lc).Value = Empty End If Next lc Next lr Next MsgBox "Строки нулевой длины заменены", vbInformation, "www.excel-vba.ru" Exit Sub End If MsgBox "Строк нулевой длины на листе нет или лист защищен", vbInformation, "www.excel-vba.ru" End Sub
Как это работает:
если раньше никогда не работали с макросами, то рекомендую ознакомиться со статьями:
Что такое макрос и где его искать?
Что такое модуль? Какие бывают модули?
- создаем в книге новый стандартный модуль: Alt+F11 –Insert –Module()
- копируем в созданный модуль приведенный выше код
- выделяем нужный диапазон(если надо заменить на всем листе – то можно выделить все ячейки листа или целиком нужные столбцы – программа сама определить нужные данные)
- нажимаем Alt+F8 и в появившемся окне выбираем ReplaceNullString
Короткая видеоинструкция:
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
I’m trying to get rid of the blank cells between my cells which have info in them by using F5 to find the blank cells, then Ctrl + – to delete them, and shift the cells up. But when I try to do that, it tells me that there are ‘No cells found’.
I’ve noticed that if I select my ‘blank’ cells, Excel still counts them: which is weird. But if I press Delete on those selected cells, the count goes away, and then I can go F5, blanks, Ctrl + – and Shift cells up, and it works…
So my question is how can I still do that, but with these blank cells which Excel thinks aren’t blank? I’ve tried to go through and just press delete over the blank cells, but I have a lot of data and realized that it would take me WAY too long. I need to find a way to select these ‘blank’ cells within a selection of data.
user
14.3k6 gold badges25 silver badges118 bronze badges
asked Apr 13, 2013 at 5:25
15
a simple way to select and clear these blank cells to make them blank:
- Press ctrl + a or pre-select your range
- Press ctrl + f
- Leave find what empty and select match entire cell contents.
- Hit find all
- Press ctrl + a to select all the empty cells found
- Close the find dialog
- Press backspace or delete
answered Apr 14, 2013 at 2:45
glhglh
4,9003 gold badges23 silver badges40 bronze badges
2
This worked for me:
- CTR-H to bring up the find and replace
- leave ‘Find What’ blank
- change ‘Replace with’ to a unique text, something that you are
positive won’t be found in another cell (I used ‘xx’) - click
‘Replace All’ - copy the unique text in step 3 to ‘Find what’
- delete the unique text in ‘Replace with’
- click ‘Replace All’
answered Aug 1, 2016 at 14:18
mikemike
2813 silver badges2 bronze badges
1
A revelation: Some blank cells are not actually blank! As I will show cells can have spaces, newlines and true empty:
To find these cells quickly you can do a few things.
- The
=CODE(A1)
formula will return a #VALUE! if the cell is truly empty, otherwise a number will return. This number is the ASCII number used in=CHAR(32)
. - If you select the cell and click in the formula bar and use the cursor to select all.
Removing these:
If you only have a space in the cells these can be removed easily using:
- Press ctrl + h to open find and replace.
- Enter one space in the find what, leave replace with empty and ensure you have match entire cell contents is ticked in the options.
- Press replace all.
If you have newlines this is more difficult and requires VBA:
- Right click on the sheet tab > view code.
-
Then enter the following code. Remember the
Chr(10)
is a newline only replace this as required, e.g." " & Char(10)
is a space and a newline:Sub find_newlines() With Me.Cells Set c = .Find(Chr(10), LookIn:=xlValues, LookAt:=xlWhole) If Not c Is Nothing Then firstAddress = c.Address Do c.Value = "" Set c = .FindNext(c) If c Is Nothing Then Exit Do Loop While c.Address <> firstAddress End If End With End Sub
-
Now run your code pressing F5.
After file supplied: Select the range of interest for improved performance, then run the following:
Sub find_newlines()
With Selection
Set c = .Find("", LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = ""
Set c = .FindNext(c)
If c Is Nothing Then Exit Do
Loop While c.Address <> firstAddress
End If
End With
End Sub
answered Apr 14, 2013 at 1:22
glhglh
4,9003 gold badges23 silver badges40 bronze badges
5
All, this is pretty simple. I have been trying for the same and this is what worked for me in VBA
Range("A1:R50").Select 'The range you want to remove blanks
With Selection
Selection.NumberFormat = "General"
.Value = .Value
End With
Regards,
Anand Lanka
answered Mar 9, 2015 at 9:46
0
I had a similar problem where scattered blank cells from an export from another application were still showing up in cell counts.
I managed to clear them by
- Selecting the columns/rows I wanted to clean, then doing
- “Find” [no text] and “Replace” [word of choice].
- Then I did “Find” [word of choice] and “Replace” with [no text].
It got rid of all hidden/phantom characters in those cells. Maybe this will work for you?
Jennifer S
1,4031 gold badge24 silver badges43 bronze badges
answered Apr 29, 2014 at 16:03
RobinRobin
411 bronze badge
2
If you don’t have formatting or formulas you want to keep, you can try saving your file as a tab delimited text file, closing it, and reopening it with excel. This worked for me.
answered Mar 19, 2014 at 21:30
CurtCurt
212 bronze badges
2
Not sure if this has already been said, but I had a similar problem with cells showing nothing in them, but not being blank when you run the IsBlank() formula.
I selected the entire column, selected Find & Replace, found cells with nothing and replaced with a 0, then ran find and replace again, finding cells with 0 and replacing with “”.
This solved my problem and allowed me to search for Blank cells (F5, Special, Blanks) and delete rows that were blank….BOOM.
May not work for every application but this solved my problem.
Sometimes there are spaces in cells which appear blank but if you hit F2 on the cell, you’ll see spaces. You can also search this way if you know the exact number of spaces in a cell
marc_s
728k174 gold badges1325 silver badges1455 bronze badges
answered Jun 21, 2016 at 19:00
The most simple solution for me has been to:
1)Select the Range and copy it (ctrl+c)
2)Create a new text file (anywhere, it will be deleted soon), open the text file and then paste in the excel information (ctrl+v)
3)Now that the information in Excel is in the text file, perform a select all in the text file (ctrl+a), and then copy (ctrl+c)
4)Go to the beginning of the original range in step 1, and paste over that old information from the copy in step 3.
DONE! No more false blanks! (you can now delete the temp text file)
Robert
5,27843 gold badges65 silver badges115 bronze badges
answered Feb 19, 2015 at 13:05
treyrtreyr
111 bronze badge
'Select non blank cells
Selection.SpecialCells(xlCellTypeConstants, 23).Select
' REplace tehse blank look like cells to something uniqu
Selection.Replace What:="", Replacement:="TOBEDELETED", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
'now replace this uique text to nothing and voila all will disappear
Selection.Replace What:="TOBEDELETED", Replacement:="", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
answered Jun 27, 2015 at 11:05
2
Found another way. Set AutoFilter for all columns (important or you will misalign data) by selecting the header row > ‘Data’ tab > Sort and filter – ‘Filter’. Use drop-down in first data column, untick ‘Select all’ and select only ‘(Blanks)’ option > [OK]. Highlight rows (now all together) > right click > ‘Delete row’. Head back to the drop-down > ‘Select all’. Presto 🙂
answered Apr 6, 2016 at 11:30
JennyJenny
111 bronze badge
This works with numbers.
If your range is O8:O20, then in a nearby empty range (e.g. T8:T20) enter =O8/1 and fill down. This will give you a result of #VALUE for the ’empty’ cells and your original number will remain as it was.
Then with the range T8:20 selected (CTL-* if it’s not already) hit F5 and choose Special. From the Special dialogue, choose Errors and click OK. This will deselect your actual numbers leaving only the #VALUE cells selected. Delete them and you will have actual empty cells. Copy T8:T20 and paste back over O8:O20.
Essentially, since blank cells doesn’t work, you need to convert the ’empty’ cells into something that the Go To Special can latch on to. Any action that would convert into #VALUE would work, and other ‘error’ types should be supported as well.
answered Oct 11, 2013 at 16:12
My method is similar to Curt’s suggestion above about saving it as a tab-delimited file and re-importing.
It assumes that your data has only values without formulas.
This is probably a good assumption because the problem of “bad” blanks is caused by the confusion between blanks and nulls — usually in the data imported from some other place — so there shouldn’t be any formulas.
My method is to parse in place — very similar to saving as a text file and re-importing, but you can do this without closing and re-opening the file.
It’s under Data > Text-to-Columns > delimited > remove all parsing characters (can also choose Text if you want) > Finish. This should cause Excel to re-recognize your data from scratch or from text and recognize blanks as really blank.
You can automate this in a subroutine:
Sub F2Enter_new()
Dim rInput As Range
If Selection.Cells.Count > 1 Then Set rInput = Selection
Set rInput = Application.InputBox(Title:="Select", prompt:="input range", _
Default:=rInput.Address, Type:=8)
' Application.EnableEvents = False: Application.ScreenUpdating = False
For Each c In rInput.Columns
c.TextToColumns Destination:=Range(c.Cells(1).Address), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, _
FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
Next c
Application.EnableEvents = True: Application.ScreenUpdating = True
End Sub
You can also turn-on that one commented line to make this subroutine run “in the background”. For this subroutine, it improves performance only slightly (for others, it can really help a lot).
The name is F2Enter because the original manual method for fixing this “blanks” problem is to make Excel recognize the formula by pushing F2 and Enter.
answered Jul 6, 2014 at 18:43
Here’s how I fixed this problem without any coding.
- Select the entire column that I wanted to delete the “blank” cells from.
- Click the Conditional Formatting tab up top.
- Select “New Rule”.
- Click “Format only cells that contain”.
- Change “between” to “equal to”.
- Click the box next to the “equal to” box.
- Click one of the problem “blank” cells.
- Click the Format Button.
- Pick a random color to fill the box with.
- Press “OK”.
- This should change all of the problem “blank” cells to the color that you chose. Now Right click one of the colored cells, and go to “Sort” and “Put selected cell color on top”.
- This will put all of the problem cells at the top of the column and now all of your other cells will stay in the original order you put them in. You can now select all of the problem cells in one group and click the delete cell button on top to get rid of them.
Artjom B.
61k24 gold badges124 silver badges222 bronze badges
answered Aug 2, 2014 at 21:03
Goto->Special->blanks does not like merged cells. Try unmerging cells above the range in which you want to select blanks then try again.
answered May 5, 2016 at 19:25
I had a similar problem with getting the COUNTA formula to count non-blank cells, it was counting all of them (even the blank one’s as non-blank), I tried =CODE() but they had no spaces or new lines.
I found that when I clicked in the cell and then clicked out of it then the formula would count the cell. I had thousands of cells so could not do this manually. I wrote this VBA statement to literally check all the cells and if they were blank then to make them blank. Ignore the pointlessness of this macro and trust me that it actually worked by forcing Excel to recognize the empty cells as actually being empty.
'This checks all the cells in a table so will need to be changed if you're using a range
Sub CreateBlanks()
Dim clientTable As ListObject
Dim selectedCell As Range
Set clientTable = Worksheets("Client Table").ListObjects("ClientTable")
For Each selectedCell In clientTable.DataBodyRange.Cells
If selectedCell = "" Then
selectedCell = ""
End If
Next selectedCell
End Sub
answered Jul 12, 2016 at 4:03
Save your dataset in CSV file and open that file and copy the dataset and paste to the excel file.
and then crtl + g will work on your file, means the excel will recognize that blank is really blank.
answered May 28, 2020 at 12:06
TreyTrey
318 bronze badges