Возврат пустой ячейки из формулы в Excel

мне нужно вернуть пустую ячейку из формулы 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)

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

EDIT: как рекомендовано, я попытался вернуть NA(), но для моих целей это тоже не сработало. Есть ли способ сделать это с VB?

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

17 ответов


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

что-то типа:

For Each cell in SomeRange
  If (cell.value = SomeTest) Then cell.ClearContents
Next

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

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

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


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

возможно иметь уничтожая формулу оценивая к trueblank если условие соотвествовано. Он проходит тест формулы ISBLANK. Этот, казалось бы, невозможный трюк я нашел в коллекции FrankensTeam (ссылка ниже).

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

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

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

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

два замечания о коде VBA.

  1. не вводите в заблуждение rng.Value="" по имени Ярость GetTrueBlank наконец-то будет trueblank, а не пустая строка, как в двойной кавычке ="".
  2. в моих тестах, первая строка кода ThisWorkbook.Application.Volatile первоначально используемый FrankensTeam оказался ненужным.

Шаг 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.

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

в приведенном выше примере и все остальные примеры FrankensTeam, оценивая формулу к trueblank, приводят к пустой ячейке. Проверка результата с помощью формулы ISBLANK дает положительные результаты в TRUE. Это хара-кири, как Формулы. Формула исчезает из ячейки при выполнении условия. Цель достигнута, хотя автор вопроса может захотеть, чтобы формула не исчезла.

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

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


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

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

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

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

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


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

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

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


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


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

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


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


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

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


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

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

откройте "средство просмотра visual basic" (Alt + F11) Найдите интересующую книгу в обозревателе проектов и дважды щелкните ее (или щелкните правой кнопкой мыши и выберите Просмотреть код). Откроется окно "Просмотр кода". Выберите "книга" в раскрывающемся меню (Общие) и "SheetCalculate" в раскрывающемся меню (объявления).

вставьте следующий код (на основе ответа J. T. Grimes) внутри 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 останутся нераспределенными


этот ответ не полностью связан с OP, но несколько раз у меня была аналогичная проблема и я искал ответ.

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

Sub clearBlanks()
    Dim r As Range
    For Each r In Selection.Cells
        If Len(r.Text) = 0 Then
            r.Clear
        End If
    Next r
End Sub

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


я использовал следующую работу, чтобы сделать мой excel выглядит чище:

когда вы делаете какие-либо вычисления, "" даст вам ошибку, поэтому вы хотите рассматривать ее как число, поэтому я использовал вложенный оператор if для возврата 0 istead "", а затем, если результат равен 0, это уравнение вернется""

=IF((IF(A5="",0,A5)+IF(B5="",0,B5)) = 0, "",(IF(A5="",0,A5)+IF(B5="",0,B5)))

таким образом, лист Excel будет выглядеть чистым...


Если вы используете функции поиска, такие как HLOOKUP и VLOOKUP для ввода данных в рабочий лист, поместите функцию в скобки, и функция вернет пустую ячейку вместо {0}. Например,

это вернет нулевое значение, если ячейка поиска пуста:

    =HLOOKUP("Lookup Value",Array,ROW,FALSE)

это вернет пустую ячейку, если ячейка пуста поиска:

    =(HLOOKUP("Lookup Value",Array,ROW,FALSE))

Я не знаю, работает ли это с другими функциями...Я не пытался. Я использую Excel 2007 для добиться этого.

редактировать

чтобы на самом деле получить IF(A1="",,), чтобы вернуться как true, должно быть два поиска в одной ячейке, разделенных &. Простой способ обойти это-сделать второй поиск ячейкой, которая находится в конце строки и всегда будет пустой.


Ну пока это лучшее, что я мог придумать.

использует ISBLANK функция, чтобы проверить, действительно ли ячейка пуста в IF заявление. Если в камере что-нибудь есть ...--3--> в этом примере даже пробел, then the cell is not EMPTY и расчет результата. Это будет держать ошибки расчета от показа, пока у вас есть номера для работы.

если ячейка EMPTY тогда ячейка расчета не будет отображать ошибки из расчет.Если ячейка NOT EMPTY затем будут отображаться результаты расчета. Это вызовет ошибку, если ваши данные плохие, страшные #DIV/0!

=IF(ISBLANK(A1)," ",STDEV(B5:B14))

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


ответ положительный - вы не можете использовать функцию =IF () и оставить ячейку пустой. "Вроде никого" не является пустым. Жаль, что две кавычки спина к спине не дают пустой ячейки, не стирая формулу.


Google привел меня сюда с очень похожей проблемой, я, наконец, понял решение, которое соответствует моим потребностям, это может помочь кому-то еще...

я использовал эту формулу:

=IFERROR(MID(Q2, FIND("{",Q2), FIND("}",Q2) - FIND("{",Q2) + 1), "")

похоже, что простой ответ, который работает, был пропущен.

название пустую ячейку в электронной таблице BlankCell.

возвращение BlankCell в вашей формуле, например,

=ISBLANK(IFNA(VLOOKUP(A2,SomeTable,2,False),BlankCell))

возвращает TRUE Если ISBLANK(VLOOKUP(A2,SomeTable,2,False)) is TRUE.