Повернути порожню клітинку з формули в Excel


219

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


8
Чи можете ви пояснити, чому комірка повинна бути порожньою? Залежно від того, яка «порожнеча» отримує вас, може бути вирішення проблеми.
JT Grimes

3
Клітина містить формулу, чи не так? Як він може бути порожнім чи порожнім тоді?
Sinan Ünür

8
У мене є аналогічна проблема, я малюю графік і не хочу показувати значення 0 для порожніх елементів на графіку. Якщо записи є порожніми клітинками, це відхиляє їх від графіка, але будь-який із методів, перелічених у "Відповіді" нижче, призводить до того, що на графіку буде показано 0. :(
Cobusve

5
Щоб нули не відображалися на графіках, використовуйте функцію NA () замість порожнього рядка / zero. Це додасть # N / A у комірку, яка ігнорується графіком.
Роб

5
Пропозиція Роба використовувати # N / A має інший результат для порожньої комірки. # N / A призведе до того, що графік інтерполяції над коміркою буде виконаний, тоді як справді порожня комірка буде розглядатися як розрив у рядку. Якщо ви хочете, щоб GAP в лінії, а не INTERPOLATION через проміжок, вам потрібно, щоб клітинка була EMPTY, а не # N / A відповідно до питання. Нижче є рішення, які вирішують це як потрібно.
Містер Перпл

Відповіді:


50

VBAТоді вам доведеться користуватися . Ви перейдете по клітинкам у своєму діапазоні, перевіряйте стан та видаляйте вміст, якщо вони відповідають.

Щось на зразок:

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

6
Я додам до цього: якщо у вас завжди є певний діапазон комірок, ви хочете очистити порожні комірки, ви можете дати ім'я цього діапазону, а потім змінити формулу Boofus, змінивши SomeRange на Range ("MyRange"). Щоб встановити ім'я для ваших комірок, виберіть комірки, натисніть Визначити ім'я на вкладці Формули стрічки та введіть "MyRange" у полі Ім'я. (І звичайно, ви можете замінити MyRange на все, що завгодно.)
devuxer

31
Це інтенсивно, що в Excel немає нульової постійної.
ted.strauss

5
Якщо ви помістите макрос у функцію workheet_calculate (), він автоматично спорожнить клітинки. Детальну інформацію ви можете побачити нижче.
Містер Перпл

3
@ ted.strauss єVbNullString
brettdj

5
@brettdj Це VBA, а не Excel. Ми довго і наполегливо лобіювали такі функції, як NULL () або BLANK (), безрезультатно.
Джон Пелтьє

75

У Excel немає жодного способу зробити це.

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

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


19
Метод NA () працює на 100% для графіків, встановлених для відображення порожніх комірок як прогалини, це, швидше за все, не спрацює у вашому випадку, коли ви експортуєте в додаток, для якого потрібна порожня клітинка, оскільки вона містить формулу ...
Cobusve

4
Не існує ідеального рішення. NA () - один хороший варіант. Ще один порожній рядок (залежно) '' або ""
Джейсон

Це працює для динамічного повернення порожніх комірок у дані, які планується побудувати, так що ви можете ефективно використовувати параметр ігнорування порожніх комірок як прогалини у графіках. У моєму випадку я намагався побудувати 12 значень для відображення щомісячної прогресії, але лише до попереднього місяця, за такою формулою: = ЯКЩО (МІСЯЦЬ (СЬОГОДНІ ())> C2; $ C $ 11 + C7; NA ( ))
EKI

Це працювало для мене. У мене є діаграма з даними, які я додаю щодня - діаграма перезарядки для scrum, і я хотів, щоб рядок поширювався лише на поточний день. Це допомогло мені зробити це - використовуючи NA () у твердженні IF. Дякую!
theJerm

12
NA () не призведе до розриву. Кожен розуміє це неправильно. Excel не побудує маркер, якщо значення NA () або # N / A, але він проведе лінію, інтерпольовану між суміжними значеннями, що не належать до # N / A.
Джон Пелтьє

38

Так, можливо.

Можна виконати анігіляційну формулу, що оцінює значення trueblank, якщо умова виконана. Він проходить тест ISBLANKформули.

введіть тут опис зображення

Все, що вам потрібно, це налаштувати названий діапазон, скажімо 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)&")")

введіть тут опис зображення

Це воно. Подальші кроки немає. Просто використовуйте формулу самознищення. Помістіть у клітинку, скажімо B2, таку формулу:

=IF(A2=0,GetTrueBlank,A2)

Вищенаведена формула в B2буде оцінена до trueblank, якщо ви наберете 0 A2.

Ви можете завантажити демонстраційний файл тут .

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

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

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


5
Це солодке вирішення, хоча це досить божевільно, що немає способу зробити це без фізичного спорожнення клітини. Єдиним недоліком тут буде те, що вам доведеться запам'ятати, щоб перетягнути формулу вниз при перерахунку, хоча, мабуть, ви могли б встановити подію робочої книги для цього.
Some_Guy

Перш ніж спробувати використати солодке вирішення, зауважте, що це може призвести до відмови .
GSerg

@GSerg Ви просто говорите, що можете зробити цикл з VBA, який буде тривати нескінченно, і таким чином програма зависне? VBA може бути бритвою в руках мавпи. І
Ремін

@PrzemyslawRemin Ні, я кажу, що можуть статися різні випадкові речі, в тому числі і збій Excel .
GSerg

20

Можливо, це обман, але це працює!

Також мені була потрібна таблиця, яка є джерелом для графіка, і я не хотів, щоб будь-які порожні або нульові комірки створювали крапку на графіку. Це правда, що вам потрібно встановити властивість графіка, вибрати дані, приховані та порожні комірки, щоб "показувати порожні комірки як пропуски" (натисніть радіо-кнопку). Це перший крок.

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

Це дає потрібний графік без точок, коли виникає недійсне значення комірки. Звичайно, це залишає всі клітинки з таким недійсним значенням для читання #N/A, і це безладно.

Щоб очистити це, виберіть клітинку, яка може містити недійсне значення, а потім виберіть умовне форматування - нове правило. У спадному вікні виберіть "форматувати лише клітини, які містять", і під описом правила виберіть "помилки". Потім у форматі виберіть шрифт - колір - білий (або будь-який колір тла). Клацніть різні кнопки, щоб вийти, і ви побачите, що комірки з недійсними даними виглядають порожніми (вони насправді містять, #N/Aале білий текст на білому тлі виглядає порожнім.) Тоді пов'язаний графік також не відображає недійсні бали значень.


6
НЕМАЄ!!! "Показувати порожні клітинки як пропуски" Потрібно, щоб комірки були ВИПУСКІ. Якщо вони містять # N / A, а не НІЧОГО, графік графіку буде інтерполюватись у комірки № N / A, а не залишати їх у вигляді пропусків у рядку. Якщо ви хочете, щоб комірки № N / A були інтерпольовані, це добре, але в такому випадку "показувати порожні клітини як пропуски" НЕ застосовується
Містер Перпл,

4
@GreenAsJade Це не справжня відповідь, оскільки вона не відповідає потребам ОП. Справді має бути окреме питання щодо питання графіки.
ZX9

10

Ось як я це зробив для набору даних, який я використовував. Це здається заплутаним і нерозумним, але це була єдина альтернатива тому, як навчитися використовувати рішення VB, згадане вище.

  1. Я зробив "копію" всіх даних і вставив дані як "значення".
  2. Тоді я виділив вкладені дані та зробив "заміну" ( Ctrl- H) порожніх комірок якоюсь буквою, яку я вибрав, qоскільки її не було ніде на моєму описі даних.
  3. Нарешті, я зробив ще одну «заміну», і замінив qнічим.

Цей тришаговий процес перетворив усі "порожні" комірки в "порожні" комірки ". Я спробував об'єднати кроки 2 і 3, просто замінивши порожню клітинку порожньою клітиною, але це не вийшло - мені довелося замінити порожню клітинку з якимось фактичним текстом, а потім замініть цей текст порожньою коміркою.


Хоча це, можливо, спрацювало у вашому випадку, мені було потрібне рішення, яке можна застосувати автоматично. Зрештою, я думаю, що я використав макрос VB, щоб стерти речі, які були визначені порожніми. Цей макрос запускався безпосередньо перед збереженням файлу.
Брайан Уорд

4
це було найкраще для мене, тому що мені не потрібно, щоб він був автоматичним, але мені потрібно, щоб він був швидким. По суті, це означає, що Excel поважає порожню додану вартість через Find and Replace, що для мене досить добре!
rickcnagy

10

Якщо мета полягає в тому, щоб мати змогу відображати комірку як порожню, коли вона насправді має нульове значення, то замість того, щоб використовувати формулу, яка призводить до порожньої або порожньої комірки (оскільки empty()функція відсутня ),

  • де ви хочете пусту клітинку, поверніть 0замість, ""а потім

  • встановіть формат чисел для клітинок так, де вам доведеться придумати те, що потрібно для позитивних і від’ємних чисел (перші два пункти, розділені напівколонами). У моєму випадку цифри у мене були 0, 1, 2 ... і я хотів, щоб 0 відображався порожнім. (Я ніколи не з'ясовував, для чого використовується текстовий параметр, але, здавалося, це потрібно).

    0;0;"";"text"@
    

4
Хоча це не робить комірку порожньою (формула не може призвести до порожньої комірки), вона змушує її виглядати порожньою, якщо число дорівнює нулю. Однак це неправильно. Він повинен бути 0; -0; "" (зверніть увагу на знак мінус) або навіть 0; -0; без жодних цитат. Третя крапка з комою та частиною "текст" @ не потрібні. Значення полів, розділених крапкою з комою, полягає в тому, як відображати додатні числа, від’ємні числа, нуль і текст (останній формат повинен містити знак @). office.microsoft.com/en-gb/excel-help/…
cvoinescu

Ви бог, сер. Ти врятував мене від наочного базового. Ви
правите

7

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


Хоча це не допомагає оригінальному запитувачеві, це насправді не є поганою відповіддю у багатьох випадках. Це добре працює у випадках, коли вас змусили повернути "".
Technium

Чудова відповідь, але трохи заплутаний. Яєчка, яку я хочу перевірити, повертає номер або ""порожня. LEN(cell)>0повертає true, якщо є число (включаючи нуль, у тому числі, якщо число обчислюється за формулою), і false, якщо порожній рядок або порожній.
Кріс

7

Ого, дивовижна кількість людей неправильно читає питання. Це легко зробити стільниковий погляд порожній. Проблема полягає в тому, що якщо вам потрібно, щоб клітинка була порожньою, формули Excel не можуть повернути "немає значення", а можуть лише повернути значення. Повернення нуля, пробілу чи навіть "" - це значення.

Отже, вам потрібно повернути "магічне значення", а потім замінити його без значення за допомогою пошуку та заміни або за допомогою сценарію VBA. Хоча ви можете використовувати пробіл або "", моя порада буде використовувати очевидне значення, наприклад "NODATE" або "NONUMBER" або "XXXXX", щоб ви могли легко бачити, де це відбувається - знайти досить важко "" в електронній таблиці.


1
Так, я і зробив. Я використовував функцію для генерації "#EMPTY", після чого вивів якийсь код у підпрограмі події "обчислення робочого листа". Перевірте мою відповідь на повне рішення.
Містер Перпл

7

Використовуйте COUNTBLANK(B1)>0замість ISBLANK(B1)всередині IFзаяви.

На відміну від ISBLANK(), COUNTBLANK()вважає ""порожнім і повертає 1.


На жаль, здається, що Excel відкидає = COUNTBLANK (IFNA (VLOOKUP (...), ")" як недійсний (!)
NetMage

6

Стільки відповідей, що повертають значення, яке ЛОКУС пустує, але насправді не є порожнім, як комірка, як вимагається ...

За запитом, якщо ви дійсно хочете формулу, яка повертає порожню комірку. Це можливо через VBA. Отже, ось код зробити саме це. Почніть з написання формули, щоб повернути помилку # N / A, куди потрібно, щоб комірки були порожніми. Тоді моє рішення автоматично очищає всі комірки, які містять помилку # N / A. Звичайно, ви можете змінити код, щоб автоматично видалити вміст комірок на основі всього, що вам подобається.

Відкрийте «візуальний базовий переглядач» (Alt + F11) Знайдіть робочу книжку, що цікавить дослідника проекту, і двічі клацніть по ньому (або клацніть правою кнопкою миші та виберіть код перегляду). Це відкриє вікно "коду перегляду". Виберіть "Workbook" у спадному меню (General) та "SheetCalculate" у спадному меню (Declarations).

Вставте наступний код (на основі відповіді JT 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 залишаться невизначеними


2
Якщо вам потрібно, щоб він був повністю автоматичним / вільним від руки / динамічним, і ви не хочете повторно вводити формулу, щоб створити помилку #NA, ви можете переписати макрокод, щоб дублювати відповідний аркуш, залишаючи порожні клітинки замість #NA, а потім генерувати графіки з дублюючого аркуша. (Я додам код, якщо цей коментар коли-небудь буде схвалено).
Містер Перпл

4

Ця відповідь не повністю стосується ОП, але я кілька разів мав подібну проблему і шукав відповідь.

Якщо ви можете відтворити формулу або дані, якщо це потрібно (і з вашого опису це виглядає так, ніби ви можете), тоді, коли ви будете готові запустити частину, яка вимагає, щоб порожні клітинки були фактично порожніми , ви можете вибрати область і запустіть наступний макрос 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

це видалить вміст будь-якої комірки, яка наразі відображається ""або має лише формулу


4

Що я використав, це був невеликий злом. Я використав T (1), який повернув порожню комірку. T - функція в excel, яка повертає свій аргумент, якщо його рядок і порожня клітинка в іншому випадку. Отже, що ви можете зробити:

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

Створює рядок нульової довжини (ISBLANK (CELL) = FALSE).
vinh

Це працює і має бути прийнятою відповіддю. Велике спасибі, Ахмеде. Мій випадок використання дещо інший. Я хочу залишити клітинки порожніми, щоб сукупні функції, такі як AVERAGE (), MIN (), MAX (), STDEV (), COUNT () та MEDIAN (), ігнорують значення.
Чарлі Рейцель

2

Я використовував наступну роботу, щоб зробити свій відмінний вигляд чистішим:

Коли ви робите будь-які обчислення, "" дасть вам помилку, тому ви хочете розглянути це як число, тому я використав вкладений файл, якщо оператор повертає 0 istead з "", і тоді, якщо результат 0, це рівняння повернеться ""

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

Таким чином лист Excel буде виглядати чисто ...


1
Це не є вирішенням проблеми. Аркуш виглядає чисто, але значення "" не є "порожнім", що стосується графіків.
GreenAsJade

1

Якщо ви використовуєте такі функції пошуку, як HLOOKUP та VLOOKUP, для внесення даних у свій робочий аркуш, розмістіть функцію у дужках, і функція поверне порожню клітинку замість {0}. Наприклад,

Це поверне нульове значення, якщо комірка пошуку порожня:

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

Це поверне порожню клітинку, якщо комірка пошуку порожня:

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

Я не знаю, чи працює це з іншими функціями ... Я не намагався. Для цього я використовую Excel 2007.

Редагувати

Щоб насправді отримати IF (A1 = "",,), щоб повернутися як істинне, потрібно мати два пошуку в одній клітині, відокремленою &. Найпростіший спосіб цього зробити - зробити другий пошук клітиною, яка знаходиться в кінці рядка і завжди буде порожньою.


1

Ну поки що це найкраще, що я міг придумати.

Він використовує ISBLANKфункцію, щоб перевірити, чи клітина справді порожня в IFоператорі. Якщо в комірці є що-небудь, A1у цьому прикладі навіть SPACE-символ, то комірка це не такEMPTY і результат обчислення. Це дозволить уникнути відображення помилок обчислення, поки у вас не будуть цифри, з якими можна працювати.

Якщо комірка є, EMPTYто обчислювальна комірка не відображатиме помилки підрахунку. Якщо комірка є, NOT EMPTYто відображатимуться результати обчислення. Це призведе до помилки, якщо ваші дані погані, бояться #DIV/0!

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

Змініть посилання на клітинку та формулу, як вам потрібно.


1
Проблема з цим полягає в тому, що вам доведеться поширювати цю перевірку на будь-яку іншу клітинку, використовуючи цей результат.
guthrie

0

Відповідь позитивна - ви не можете використовувати функцію = IF () і залишити клітинку порожньою. "Виглядає порожньо" - це не те, що порожньо. Соромно, що два лапки назад до спини не дають порожньої комірки, не стираючи формулу.


Якщо ви готові використовувати VBA, можете. Відповідно до деяких інших відповідей.
Містер Перпл

-1

Google привів мене сюди з дуже подібною проблемою, я нарешті з’ясував рішення, яке відповідає моїм потребам, воно може допомогти і іншому ...

Я використав цю формулу:

=IFERROR(MID(Q2, FIND("{",Q2), FIND("}",Q2) - FIND("{",Q2) + 1), "")
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.