Возвращать пустую ячейку из формулы в 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: Я создаю рабочий лист, который извлекает данные из других рабочих листов, которые отформатированы с учетом специфических требований приложения, которое импортирует данные в базу данных. У меня нет доступа для изменения реализации этого приложения, и он терпит неудачу, если значение "" вместо фактического пустого.

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

enter image description here

Все, что вам нужно, это установить именованный диапазон, скажем, 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

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

=IF(A2=0,GetTrueBlank,A2)

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

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

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

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

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

Ответ 4

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

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

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

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

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

Ответ 5

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

  • Я сделал "копию" всех данных и вставил данные как "значения".
  • Затем я выделил вложенные данные и "заменил" (Ctrl - H) пустые ячейки какой-либо буквой, я выбрал q, поскольку он не был нигде в моей спецификации.
  • Наконец, я сделал еще одну "замену" и заменил q на ничего.

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

Ответ 6

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

  • где вам нужна пустая ячейка, верните 0 вместо "" и THEN

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

    0;0;"";"text"@
    

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

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

Откройте "визуальный базовый просмотрщик" (Alt + F11) Найдите интересующую книгу учебник проекта и дважды щелкните по нему (или щелкните правой кнопкой мыши и выберите код просмотра). Это откроет окно "Код просмотра". Выберите "Workbook" в раскрывающемся меню (General) и "SheetCalculate" в раскрывающемся меню (Declarations).

Вставьте следующий код (на основе ответа Дж. Т. Граймса) внутри функции 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

Сохраните файл в качестве рабочей книги с включенным макросом

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

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

Ответ 10

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

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

Ответ 11

Этот ответ не полностью касается 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

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

Ответ 12

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

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

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

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

Ответ 13

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

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

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

Это возвращает пустую ячейку, если ячейка поиска пуста:

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

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

Изменить

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

Ответ 14

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

Он использует функцию ISBLANK, чтобы проверить, действительно ли ячейка пуста внутри оператора IF. Если в этой ячейке есть что-либо, A1, даже символ SPACE, , то ячейка не будет EMPTY, и результат будет получен. Это приведет к тому, что ошибки расчета будут отображаться до тех пор, пока у вас не будет номеров для работы.

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

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

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

Ответ 15

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

Ответ 16

Я использовал небольшой взлом. Я использовал T (1), который возвратил пустую ячейку. T - это функция в Excel, которая возвращает свой аргумент, если это строка и пустая ячейка в противном случае. Итак, что вы можете сделать:

=IF(condition,T(1),value)

Ответ 17

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

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

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

Ответ 18

Кажется, что простой ответ о том, что работы были упущены.

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

Вернуть BlankCell в формулу, например

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

Это вернет TRUE, если ISBLANK(VLOOKUP(A2,SomeTable,2,False)) - TRUE.