Хитрости »
6 Май 2017 47453 просмотров
Эта статья будет близка тем, кому приходится часто работать с отчетами, выгруженными в 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, rC 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 avR = rR.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 rR.Item(lr, lc).Value = Empty Next lc Next lr 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
ссылки
статистика
поэтому в 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 воспринимает пустые ячейки как 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 Пользователь Сообщений: 2306 |
Могу предложить делать проверку, пусто в ячейке или нет: Еще вариант придумал: Изменено: Karataev — 19.02.2017 23:34:49 |
БМВ Модератор Сообщений: 21385 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 с небольшим количеством данных, то проблем с не возникает с поиском пустых ячеек. Но когда информации очень много, хорошо было бы автоматизировать этот процесс. Ведь вручную просматривать тысячи ячеек занимает очень много времени, которое можно было бы использовать для других рабочих задач или отдыха. Особенно это важно при работе с документами, где большая часть данных – числовые. Там и без того важно не запутаться.
Также автоматизация поиска пустых ячеек важна в ситуациях, когда на основе полученных данных другая формула выполняет определенные вычисления. Тогда это позволяет сэкономить время сразу на нескольких этапах.
С помощью встроенных средств Excel воплотить эту задачу в жизнь не составит никакого труда. При этом есть целых три способа проверки ячейки на предмет того, есть в ней какая-то информация или нет, каждый из которых должен использоваться в зависимости от ситуации.
Содержание
- Как определить, пустая ячейка или нет (способы)
- Процедуры VBA
- Код для конкретной ячейки
- Код для активной ячейки
- Функция ЕПУСТО для проверки пустых ячеек
- Примеры использования функции ЕПУСТО
- Почему следует использовать функцию ЕПУСТО при проверке пустых ячеек?
- Пример проверки на пустую ячейку
- Как подсчитать количество пустых ячеек в Эксель
- Особенности применения функции ЕПУСТО в Excel
- Выводы
Как определить, пустая ячейка или нет (способы)
Это можно сделать с помощью функции ЕПУСТО, которая может использоваться для данных самых разных типов, включая не только числа и текст, но даже логические функции. Давайте более подробно рассмотрим особенности работы с этой формулой.
Эта функция имеет очень простую схему использования. Если в конкретной ячейке нет никакой информации, то возвращается ИСТИНА. Если же в ней содержится определенная информация, то, соответственно, значение оказывается ЛОЖЬ.
Есть и другие способы определения, есть ли информация во всех ячейках определенного диапазона или в конкретной ячейке. Также в некоторых ситуациях разумно применять обычную функцию ЕСЛИ, знакомую почти каждому активному пользователю. Давайте разберем также и правила их использования.
Процедуры VBA
VBA – это язык программирования, который используется для написания макросов. Это маленькие исполняемые модули, которые выполняют определенную последовательность действий, в том числе, и осуществляют проверку, есть ли внутри ячейки какая-то информация, или нет.
Код для конкретной ячейки
Если перед нами стоит задача указать конкретную ячейку для того, чтобы осуществлялась ее проверка на предмет наличия какой-то информации, то нужно записать такой код.
Sub example()
If IsEmpty(Range(«A1»)) = True Then
MsgBox «Ячейка пустая»
Else
MsgBox «Ячейка не пустая»
End If
End Sub
Этот фрагмент кода проверяет ячейку А1 на предмет того, содержатся ли в ней какие-то данные. И результат выводит в соответствующее окошко.
Код для активной ячейки
Если перед нами стоит задача написать макрос, который проводит анализ выделенной ячейки на предмет содержания в ней какой-то информации, то нужно использовать такой фрагмент кода.
Sub example()
If IsEmpty(ActiveCell) = True Then
MsgBox «Ячейка пустая»
Else
MsgBox «Ячейка не пустая»
End If
End Sub
Функция ЕПУСТО для проверки пустых ячеек
Как мы уже поняли, функция ЕПУСТО дает возможность определить, пустая ли определенная ячейка. Давайте разберем некоторые практические аспекты использования этой функции.
Примеры использования функции ЕПУСТО
Давайте опишем некоторые способы применения функции ЕПУСТО на практике. Допустим, вы работаете преподавателем и у вас открыта таблица с оценками учеников по последнему тесту. При этом некоторые из баллов не записаны, поскольку ряд студентов плохо сдали его и пошли на пересдачу. И допустим, перед нами стоит задача написать в третьей колонке список тех, кто сдал экзамен с первого раза.
Чтобы реализовать поставленные задачи, нам нужно ввести следующую формулу после выделения диапазона C3:C18.
=ЕСЛИ(ИЛИ(ЕПУСТО(B3);B3=2);»На пересдачу»;»Сдал»)
Если пользователь хоть немного понимает, как устроена работа с формулами, то он, основываясь на синтаксисе приведенной выше строки, поймет, что если в ячейке есть балл, то в ячейку будет записано «Сдал». Если же оценки нет, то появится результат «На пересдачу».
После того, как мы введем эту формулу, результат будет следующим:
Далее давайте попробуем сделать особое форматирование в зависимости от того, есть ли оценка у человека или нет. Для этого нужно найти параметр «Стили» на вкладке «Главная». Там находится пункт «Условное форматирование». После того, как мы его выберем, нужно нажать кнопку «Создать правило».
Появится окно, в котором нам нужно выбрать последнюю опцию, где идет речь об использовании формулы для определения параметров форматирования. В строке ниже нужно написать следующую формулу, которая показывается на скриншоте.
После этого нам нужно нажать на кнопку «Формат» и выбрать красный цвет фона. Действия подтверждаются путем нажатия кнопки «ОК». Теперь у нас все ячейки с надписью «На пересдачу» выделяются красным цветом.
Почему следует использовать функцию ЕПУСТО при проверке пустых ячеек?
Тот человек, который уже немного разбирается в Excel, может задать вопрос: почему нельзя использовать банальную функцию ЕСЛИ для этой цели? Да, можно. Достаточно просто записать такую формулу:
=ЕСЛИ(ИЛИ(B3=»»;B3=2);»На пересдачу»;»Сдал»)
Видим, что мы здесь использовали кавычки для определения ячеек без никаких значений. И в описанном выше случае эта формула также бы работала. Но не во всех случаях это возможно. Если содержатся определенные типы значений, этот трюк работать не будет. Давайте обратим внимание на этот скриншот.
Видим, что в первой ячейке содержится знак ‘. Этот символ не отображается в листе, и он также не может быть обнаружен функцией ЕСЛИ. Все потому, что это специальный символ Excel, который необходим для того, чтобы показывать текстовую информацию, если ячейка находится в числовом формате, например. Это часто используется, если необходимо в ячейку вставить плюс. Если не использовать одинарную кавычку, программа будет думать, что это мы собираемся вводить формулу. В этом основное отличие.
Если использовать функцию ЕПУСТО для этой цели, пользователь получает возможность узнать реальную картину, какие ячейки действительно пустые, а не только отображаются, как пустые.
Пример проверки на пустую ячейку
У нас есть таблица, в которой указана определенная информация. Перед нами стоит задача проверить заполненность полей. Наша исходная таблица выглядит следующим образом.
Чтобы понять, есть ли пустые ячейки, нужно использовать именно формулу массива. Ее основное отличие в том, что она работает одновременно с большим количеством данных. Чтобы сделать формулу массива, нужно нажать комбинацию Ctrl + Shift + Enter после того, как формула будет введена в соответствующую строку.
=ЕСЛИ(СУММ(—ЕПУСТО(B3:B17));ИСТИНА;ЛОЖЬ)
В примере, которое описывается нами сейчас, функция СУММ применяется с целью определения количества всех значений, которые возвращаются функцией ЕПУСТО. Если же после вычисления по этой формуле окажется значение, превышающее ноль, то вернется значение «Истина».
Как следствие, мы получим следующую таблицу.
Видим, что в рассматриваемом примере есть те ячейки, не содержащие никаких значений.
Внимание. Были использованы символы «–-» в формуле, приводимой выше. На это надо обратить особое внимание. Эти символы означают двойное отрицание. В нашем примере его нужно использовать, чтобы превратить логический тип данных в числовой.
Ряд экселевских функций не поддерживают автоматическое превращение типов данных, поэтому нужно делать все своими руками. Наиболее часто для этой цели используется умножение на единицу или прибавление нуля к получившемуся значению. Но также можно использовать любую другую арифметическую операцию, которая вернет то же самое значение.
Но практика показывает, что наиболее удобно использовать двойной минус. Это не только более удобно на этапе набора, но еще и ускоряет работу таблицы. Причем прирост производительности может достигать 15 процентов, что очень много, когда имеется большое количество функций.
Как подсчитать количество пустых ячеек в Эксель
Теперь давайте разберем еще один пример, который больше всего подходит под нашу ситуацию. Предположим, у нас есть список работников офиса, каждый из которых обозначен определенным кодом, а также их возрастом. Но в таблице еще не все поля указаны. Наша задача – осуществить проверку, все ли поля заполнены и вывести сообщение с количеством полей, которые не были заполнены.
Сама таблица выглядит так.
Чтобы реализовать поставленную задачу, нам нужна такая формула.
=ЕСЛИ(СУММ(—ЕПУСТО(B3:B12));СЧИТАТЬПУСТОТЫ(B3:B12)&» поля не заполнены»;СРЗНАЧ(B3:B12))
Функция ЕСЛИ дает возможность осуществить проверку набора ячеек на предмет того, есть ли среди них пустые значения (для этого используется функция —ЕПУСТО с соответствующими аргументами). Если в итоге суммирования было возвращено положительное значение, то будет показан текст, в котором записано, сколько ячеек без значения. Для этого используется функция СЧИТАТЬПУСТОТЫ. А с помощью знака & мы соединяем несколько значений.
Получается такой документ.
При этом нужно помнить про все особенности и ограничения применения функции ЕСЛИ, описанные выше.
Особенности применения функции ЕПУСТО в Excel
Есть несколько типов функций, и ЕПУСТО принадлежит к категории логических. Простыми словами, она проверяет какое-то выражение на предмет соответствия определенному критерию. Таких функций насчитывается еще огромное количество, и это не только указанная выше ЕСЛИ. Также к таким функциям относятся такие операторы, как ЕССЫЛКА, ЕЧИСЛО и так далее. Все они возвращают одно из двух возможных значений: истинное или ложное.
Если записать функцию, ее синтаксис будет следующим.
=ЕПУСТО(значение)
Эта функция имеет только один обязательный аргумент. Есть множество типов данных, которые могут вноситься в него. Это бывают как числа, текст и любые другие значения. При этом пользователь может указать как единичную ячейку, так и целый диапазон. Если же используется диапазон ячеек, то нужно использовать формулу массива вместо обычной.
Есть ряд особенностей, которые берутся в учет, когда пользователь собирается работать с этой функцией:
- Нельзя указывать конкретное значение, как параметр, поскольку тогда будет автоматически возвращено значение «ЛОЖЬ». Все дело в том, что такое значение априори не может содержат никаких значений.
- Если перед нами стоит задача сделать так, чтобы было возвращена «ИСТИНА» в случае заполненности ячейки любой информацией, то нужно использовать сразу две функции: НЕ и ЕПУСТО. Тогда сначала нужно использовать первую, а потом вторую в качестве аргумента.
- Использование функции АДРЕС, как параметр функции ЕПУСТО. бесполезно. Тогда всегда будет возвращаться результат, что критерию значение не соответствует. Все потому, что функцией АДРЕС осуществляется возвращение ссылки, которая сама по себе уже является разновидностью информации даже в том случае, если в ячейке, на которую она ссылается, нет никаких данных.
- Значение «ЛОЖЬ» будет в качестве итога даже в той ситуации, когда есть ошибка. Все потому, что какая-то информация содержится в ней в любом случае, пусть даже неверная. А если речь идет об информации про ошибку, то это еще и полезная информация. А ссылка уже может считаться полноценным типом данных.
- Очень часто пользователи забывают о формуле массива, чтобы осуществить проверку сразу большого количества ячеек. Иначе значение, возвращаемое функцией, будет неправильным.
Выводы
Простыми словами, найти пустые ячейки в документе или конкретном листе не так уж и сложно. Это делается несколькими способами, каждый из которых имеет свои особенности. Поэтому нужно использовать те, которые лучше всего подходят под конкретную ситуацию.
Кроме двух функций, также возможно использование и макросов для того, чтобы понять, есть ли информация в определенной ячейке, или нет. выше были приведены примеры кода, которые позволяют самостоятельно написать подобную подпрограмму. Правда. нужно ее адаптировать под себя. заменив соответствующие ячейки на свои. Эту проблему можно решить с помощью использования макроса на активную ячейку. В таком случае просто достаточно нажать на ту ячейку, которую нужно проверить, после чего программа все сделает за вас.
Оцените качество статьи. Нам важно ваше мнение: