Вернуть пустую ячейку из формулы в Excel - PullRequest
200 голосов
/ 13 июля 2009

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

=IF(some_condition,EMPTY(),some_value)

Я пытался сделать такие вещи, как

=IF(some_condition,"",some_value)

и

=IF(some_condition,,some_value)

и предполагая, что B1 является пустой ячейкой

=IF(some_condition,B1,some_value)

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

РЕДАКТИРОВАТЬ: как было рекомендовано, я пытался вернуть NA (), но для моих целей это тоже не сработало. Есть ли способ сделать это с VB?

РЕДАКТИРОВАТЬ: я создаю рабочий лист, который извлекает данные из других рабочих листов, отформатированный в соответствии с очень специфическими требованиями приложения, которое импортирует данные в базу данных. У меня нет доступа для изменения реализации этого приложения, и оно завершается ошибкой, если значение «» вместо фактически пустого.

Ответы [ 16 ]

69 голосов
/ 13 июля 2009

Excel не имеет никакого способа сделать это.

Результатом формулы в ячейке в Excel должно быть число, текст, логическое (логическое) или ошибка. Не существует типа значения ячейки формулы «пусто» или «пусто».

Одна практика, которой я следовал, заключается в использовании NA () и ISNA (), но это может или не может действительно решить вашу проблему, поскольку существует большая разница в том, как NA () обрабатывается другими функциями (SUM). (NA ()) равно # N / A, а SUM (A1) равно 0, если A1 пусто).

46 голосов
/ 13 июля 2009

Тогда вам придется использовать VBA. Вы будете перебирать ячейки в вашем диапазоне, проверять условия и удалять содержимое, если они совпадают.

Что-то вроде:

For Each cell in SomeRange
  If (cell.value = SomeTest) Then cell.ClearContents
Next
30 голосов
/ 06 сентября 2016

Да, это возможно.

Можно получить аннулирующую формулу с оценкой trueblank, если условие выполнено. Проходит тест по формуле ISBLANK.

После настройки 3 шагов вы сможете использовать именованный диапазон GetTrueBlank, как вы хотите в своем ответе:

=IF(A1 = "Hello world", GetTrueBlank, A1)

Шаг 1. Поместите этот код в модуль VBA.

Function Delete_UDF(rng)
    ThisWorkbook.Application.Volatile
    rng.Value = ""
End Function

Шаг 2. В Sheet1 в ячейку A1 добавить именованный диапазон GetTrueBlank со следующей формулой:

=EVALUATE("Delete_UDF("&CELL("address",Sheet1!A1)&")")

enter image description here

Шаг 3. Используйте формулу самоуничтожения. Поместите в ячейку, скажем B2, следующую формулу:

=IF(A2=0,GetTrueBlank,A2)

enter image description here

Приведенная выше формула в B2 будет иметь значение trueblank, если вы введете 0 в A2.

Вы можете скачать демонстрационный файл здесь .

В приведенном выше примере при вычислении формулы в trueblank получается пустая ячейка. Проверка результата по формуле ISBLANK дает положительное значение ИСТИНА. Это формула, похожая на харакири. Формула исчезает из ячейки при выполнении условия. Цель достигнута, хотя вы, возможно, захотите, чтобы формула не исчезла.

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

Я сталкивался с примерами получения истинного лота как результата формулы, показанного The FrankensTeam здесь: https://sites.google.com/site/e90e50/excel-formula-to-change-the-value-of-another-cell

20 голосов
/ 16 июля 2012

Возможно, это обман, но он работает!

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

Затем в ячейках, которые могут закончиться с результатом, который вы не хотите выводить на график, поместите формулу в оператор IF с результатами NA(), такими как =IF($A8>TODAY(),NA(), *formula to be plotted*)

Это дает требуемый граф без точек, когда происходит недопустимое значение ячейки. Конечно, это оставляет все ячейки с этим недопустимым значением для чтения #N/A, и это грязно.

Чтобы очистить это, выберите ячейку, которая может содержать недопустимое значение, затем выберите условное форматирование - новое правило. Выберите «форматировать только ячейки, которые содержат» и в описании правила выберите «ошибки» из выпадающего списка. Затем в формате выберите шрифт - цвет - белый (или любой другой цвет фона). Нажмите различные кнопки, чтобы выйти, и вы должны увидеть, что ячейки с недопустимыми данными выглядят пустыми (они на самом деле содержат #N/A, но белый текст на белом фоне выглядит пустым). Тогда связанный график также не отображает точки недопустимых значений.

10 голосов
/ 16 января 2011

Вот как я это сделал для набора данных, который я использовал. Это кажется запутанным и глупым, но это была единственная альтернатива изучению того, как использовать решение VB, упомянутое выше.

  1. Я сделал «копию» всех данных и вставил их как «значения».
  2. Затем я выделил вставленные данные и сделал «замену» ( Ctrl - H ) пустыми ячейками на какую-то букву, я выбрал q, так как его нигде не было на моем листе данных.
  3. Наконец, я сделал еще одну «замену» и заменил q ничем.

Этот трехэтапный процесс превратил все «пустые» ячейки в «пустые» ячейки. Я попытался объединить шаги 2 и 3, просто заменив пустую ячейку на пустую, но это не сработало - у меня было заменить пустую ячейку каким-либо реальным текстом, а затем заменить этот текст пустой ячейкой.

9 голосов
/ 01 июня 2011

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

  • , где вы хотите пустую ячейку, верните 0 вместо "" и ТО

  • установить формат чисел для ячеек, например, так, чтобы вам приходилось придумывать, что вы хотите для положительных и отрицательных чисел (первые два элемента, разделенные точками с запятой). В моем случае числа, которые у меня были, были 0, 1, 2 ... и я хотел, чтобы 0 отображалось пустым. (Я так и не выяснил, для чего использовался текстовый параметр, но это казалось обязательным).

    0;0;"";"text"@
    
6 голосов
/ 07 апреля 2016

Используйте COUNTBLANK(B1)>0 вместо ISBLANK(B1) в вашем IF утверждении.

В отличие от ISBLANK(), COUNTBLANK() считает "" пустым и возвращает 1.

6 голосов
/ 08 ноября 2013

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

По запросу, если вы действительно хотите формулу, которая возвращает пустую ячейку. Это возможно через VBA. Итак, вот код, чтобы сделать именно это. Начните с написания формулы для возврата ошибки # N / A везде, где вы хотите, чтобы ячейки были пустыми. Тогда мое решение автоматически очищает все ячейки, которые содержат эту ошибку # N / A. Конечно, вы можете изменить код, чтобы автоматически удалять содержимое ячеек на основе чего угодно.

Открыть «Visual Basic Viewer» (Alt + F11) Найдите интересующую книгу в проводнике проекта и дважды щелкните по ней (или щелкните правой кнопкой мыши и выберите просмотреть код). Откроется окно «Просмотр кода». Выберите «Рабочая книга» в раскрывающемся меню (Общие) и «SheetCalculate» в раскрывающемся меню (Объявления).

Вставьте следующий код (на основе ответа Дж. Т. Граймса) в функцию Workbook_SheetCalculate

    For Each cell In Sh.UsedRange.Cells
        If IsError(cell.Value) Then
            If (cell.Value = CVErr(xlErrNA)) Then cell.ClearContents
        End If
    Next

Сохранение файла в виде книги с макросами

NB. Этот процесс похож на скальпель. Он удалит все содержимое всех ячеек, которые оцениваются с ошибкой # N / A, поэтому имейте в виду. Они уйдут, и вы не сможете получить их обратно, не вводя формулу, которую они использовали.

NB2: Очевидно, что вам нужно включить макросы, когда вы открываете файл, иначе он не будет работать, и ошибки # N / A останутся не восстановленными

6 голосов
/ 24 июня 2013

Ух, удивительное количество людей неправильно поняли вопрос. Легко сделать ячейку пустой пустой. Проблема в том, что если вам нужно, чтобы ячейка была пустой, формулы Excel не могут возвращать «нет значения», а могут возвращать только значение. Возвращение нуля, пробела или даже "" является значением.

Таким образом, вы должны вернуть «магическое значение», а затем заменить его без значения, используя поиск и замену или используя скрипт VBA. Хотя вы можете использовать пробел или "", мой совет - использовать очевидное значение, такое как "NODATE", "NONUMBER" или "XXXXX", чтобы вы могли легко видеть, где это происходит - найти довольно сложно " в таблице.

6 голосов
/ 23 сентября 2009

Попробуйте оценить ячейку, используя LEN. Если он содержит формулу LEN, вернется 0. Если он содержит текст, он вернется больше, чем 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...