2009-07-13 111 views
168

我需要從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) 

但這些似乎都不是真正的空單元格,我猜是因爲它們是公式的結果。是否有任何方法來填充單元格當且僅當滿足某些條件,否則保持單元格真空?

編輯:建議,我試着返回NA(),但爲了我的目的,這也沒有工作。有沒有辦法與VB做到這一點?

編輯:我正在建立一個工作表,從其他工作表中拉取數據,格式化爲將數據導入數據庫的應用程序的特定要求。我沒有權限更改此應用程序的實現,如果值爲「」而不是實際爲空,則失敗。

+7

你能解釋爲什麼單元格需要空白嗎?根據什麼「空白」得到你,可能有一個解決方法。 –

+3

單元格包含公式,不是嗎?那它怎麼可能是空的或空白的? –

+8

我有一個類似的問題,我正在繪製圖形,不想在圖表上顯示空白項目的值0。如果記錄是空單元格,它會從圖中省略它們,但下面「答案」中列出的任何方法都會在圖上顯示0。 :( – Cobusve

回答

43

那麼你將不得不使用VBA。您將循環遍歷範圍內的單元格,測試條件並刪除匹配的內容。

喜歡的東西:

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

我想補充一點:如果你總是有一個特定範圍的單元格來清除空白單元格,你可以給這個範圍一個名字,然後通過改變SomeRange到Range(「MyRange」)來修改Boofus的公式。要爲單元格設置名稱,請選擇單元格,然後在功能區的「公式」選項卡上單擊「定義名稱」,然後在名稱字段中輸入「MyRange」。 (當然,你可以用你想要的任何東西代替MyRange。) – devuxer

+0

我對這個解決方案稍作修改就結束了。然後我將它設置爲在文件保存之前運行,並且一切都很好。 –

+16

這是激烈的,Excel中沒有空常量。 –

59

Excel沒有辦法做到這一點。

Excel中單元格中公式的結果必須是數字,文本,邏輯(布爾)或錯誤。沒有公式單元格值類型的「空白」或「空白」。

我之前見過的一種做法是使用NA()和ISNA(),但這可能會也可能不會真正解決您的問題,因爲NA()被其他函數處理方式存在很大差異如果A1爲空,SUM(NA())爲#N/A,而SUM(A1)爲0)。

+13

對於設置爲將空單元格顯示爲空白的圖形,NA()方法100%工作,對於導出到需要單元格爲空白的應用程序的情況,這可能不起作用,因爲它包含公式。 – Cobusve

+3

沒有完美的解決方案。不適用()是一個不錯的選擇。 另一個是(取決於)的空字符串「」或「」 – Jason

+0

這適用於在將要繪製的數據中以二元方式返回空單元格的目的,以便您可以有效地使用忽略空單元格作爲圖表。在我的情況下,我試圖繪製12個值來代表每月的進展,但只能到上個月,用這樣的公式:= IF(MONTH(TODAY())> C2; $ C $ 11 + C7; NA( )) – EKI

5

請評價使用LEN細胞。如果它包含公式LEN將返回0。如果它包含文本,它將返回大於0

+0

儘管這對最初的提問者沒有幫助,但在許多情況下,這實際上並不是一個很好的答案。適用於您被迫返回「」的情況。 – Technium

9

這就是我爲我使用的數據集做的。它似乎令人費解和愚蠢,但它是學習如何使用上述VB解決方案的唯一選擇。

  1. 我做了所有數據的「複製」,並將數據粘貼爲「值」。
  2. 然後,我強調了粘貼的數據,並做了「替換」(按Ctrl - ^h)空單元格的一些信,我選擇q因爲它不是我的數據表中的任何地方。
  3. 最後,我做了另一個「替換」,並將其替換爲q

這三步過程接通所有「空」細胞進入「空白」細胞」。我試圖合併步驟2 & 3通過簡單地用一個空白小區更換空白單元格,但沒有與工作 - 我必須用某種實際文本替換空白單元格,然後用空白單元格替換該文本。

+0

雖然這可能適用於您的情況,但我需要一個可以自動應用的解決方案。最終,我認爲我使用了一個VB宏來清除被確定爲空的東西。這個宏在保存文件之前運行。 –

+2

這對我來說是最好的,因爲我不需要它是自動的,但我需要它很快。基本上,這意味着Excel尊重通過查找和替換添加的空白值,這對我來說已經足夠了! – rickcnagy

+0

偉大的解決方法。謝謝! –

1

如果使用查找函數(如HLOOKUP和VLOOKUP)將數據放入工作表中,請將該函數放在括號內例如,

如果查找單元格爲空,這將返回一個零值:

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

如果查找單元格爲空這將返回一個空單元格:

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

我不知道這是否與其他功能...我還沒有嘗試過。我正在使用Excel 2007來實現這一點。

編輯

要真正得到一個IF(A1 =「」,)回來作爲真正有需要在由&分隔同一個小區兩個查找。解決這個問題的簡單方法是,使第二個查找位於該行末尾的單元格始終爲空。

7

如果目標是要能顯示單元作爲空時,它實際上具有零值,則代替使用式,結果在一個空白或空細胞(因爲沒有empty()函數)代替,

你想要一個空白單元格
  • ,返回的0代替""然後

  • 設置單元格像這樣,在那裏你將不得不拿出你想要的正面和數字格式負數(前兩項用分號分隔)。就我而言,我的數字是0,1,2 ......而我想讓0顯示爲空。 (我從來沒有弄清楚是什麼文本參數被用於,但它似乎是必需的)。

    0;0;"";"text"@ 
    
+2

雖然這不會使單元格變空(沒有辦法讓公式導致空單元格),但如果數字爲零,則看起來爲空。但是,這是不正確的。它應該是0; -0;「」(注意減號)或者甚至是0; -0;根本沒有任何引號。第三個分號和「text」@部分不是必需的。分號分隔字段的含義是:如何顯示正數,負數,零和文本(後一種格式必須包含@)。 http://office.microsoft.com/en-gb/excel-help/create-or-delete-a-custom-number-format-HP005199500.aspx – cvoinescu

+0

你是神的先生。你從視覺基礎中拯救了我。你規則 – CommaToast

0

答案是肯定的 - 你不能使用= IF()函數和離開細胞空白。 「看起來空虛」與空洞不一樣。這是一個恥辱兩個引號背對背沒有刪除公式沒有產生一個空單元格。

+0

如果你準備使用VBA,你可以。根據其他一些答案。 –

12

也許這是作弊,但它的作品!

我還需要一個表格,它是圖形的來源,我不希望任何空白或零單元格在圖形上產生一個點。確實,您需要設置圖形屬性,選擇數據,隱藏和空單元格以將空單元格顯示爲間隙(單擊單選按鈕)。這是第一步。

然後在可能最終結果是您不需要繪圖,請將公式放入IF語句中,並使用NA()結果(如= IF($ A8> TODAY(),NA(),公式

當發生無效單元格值時,這確實會給出所需的圖形,並且沒有點。當然,這會讓所有具有該無效值的單元格讀取「#N/A」,這很麻煩。

要清理它,請選擇可能包含無效值的單元格,然後選擇'條件格式' - 新規則。選擇'僅格式化包含的單元格',並在規則描述下從下拉框中選擇'錯誤'。然後在格式中選擇font - color - white(或任何背景顏色)。點擊各個按鈕即可離開,您應該看到具有無效數據的單元格看起來是空白的(它們實際上包含'#N/A',但白色背景上的白色文本看起來是空白的。)然後,鏈接圖形也不會顯示無效值點。

+3

是的!耶,謝謝!這是真正的答案! – GreenAsJade

+3

不! 「將空單元格顯示爲間隙」要求單元格爲空。如果它們包含#N/A而不是NOTHING,那麼繪圖程序將在#N/A單元上進行插值,而不是將它們留在線中的間隙。如果你希望插入#N/A單元格,那很好,但是在這種情況下「顯示空單元格爲空格」不適用 –

+2

@GreenAsJade這不是真正的答案,因爲它不符合OP的需求。對於圖形問題,應該有一個單獨的問題。 – ZX9

1

到目前爲止,這是我能想到的最好的。

它使用ISBLANK函數檢查單元在IF語句中是否真空。 如果單元格中有任何東西,在本例中爲A1,即使是空格字符,那麼該單元格也不是EMPTY並且會導致計算結果。 這將保持顯示計算錯誤,直到你有數字處理。

如果單元格爲EMPTY那麼計算單元格將不顯示計算中的錯誤。如果單元格爲NOT EMPTY,則會顯示計算結果。 如果您的數據不好,這會引發錯誤,令人生畏的#DIV/0

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

根據需要更改單元格引用和公式。

+0

這樣做的問題是您必須使用此結果將此檢查傳播到每個其他單元格。 – guthrie

5

哇,很多人誤解了這個問題。很容易使空單元看起來空。問題是,如果您需要單元格爲空,Excel公式不能返回「無值」,但只能返回一個值。返回一個零,一個空格,甚至是「」是一個值。

因此,您必須返回一個「魔術值」,然後使用搜索和替換或使用VBA腳本將其替換爲無值。雖然您可以使用空格或「」,但我的建議是使用明顯的值,例如「NODATE」或「NONUMBER」或「XXXXX」,以便您可以輕鬆查看它發生的位置 - 很難找到「」在電子表格中。

+1

是的,那是我做的。我使用了一個函數來生成「#EMPTY」,然後在「工作表計算」事件子例程中加入一些代碼。查看我的答案以獲得完整解決方案。 –

2

我用下面的解決辦法,使我的Excel探討清潔:

當你進行任何計算的「」會給你錯誤,所以你要正確對待它作爲一個數,所以我使用了嵌套的if語句返回0 istead的「」,然後如果結果爲0這個公式將返回「」

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

這樣的excel表看起來乾淨......返回一個值

+1

這不是解決問題的辦法。該圖表看上去很乾淨,但就圖形而言,值「」不是「空的」。 – GreenAsJade

4

所以很多答案是LOOKS爲空,但實際上並不像請求的單元格那樣空。

根據要求,如果您確實需要一個返回空單元格的公式。它可以通過VBA。所以,這裏的代碼就是這麼做的。首先編寫一個公式,在希望單元格爲空的任何位置返回#N/A錯誤。然後我的解決方案會自動清除所有包含#N/A錯誤的單元格。當然,您可以修改代碼以根據您喜歡的任何內容自動刪除單元格的內容。

打開「視覺基本查看器」(Alt + F11) 在項目瀏覽器中找到感興趣的工作簿並雙擊它(或右鍵單擊並選擇查看代碼)。這將打開「查看代碼」窗口。在(General)下拉菜單中選擇「Workbook」,在(Declarations)下拉菜單中選擇「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 

內將下面的代碼(基於由J.T. Grimes的答案)粘貼文件保存爲一個宏工作簿啓用

注:此過程就像手術刀。它會刪除評估爲#N/A錯誤的所有單元的全部內容,因此請注意。他們會去,你不能重新進入他們原來所包含的配方而無法讓他們回來。

NB2:顯然,你需要啓用宏當您打開其他文件將無法正常工作和#N/A錯誤會保持未刪除

+0

如果你需要它是完全自動/免提/動態的,你不想重新輸入公式來產生#NA錯誤,你可以重寫宏代碼來複制問題表單,留下空單元格代替#NA,然後生成來自複製表格的圖表。 (如果此評論被提升,我會添加代碼)。 –

7

使用COUNTBLANK(B1)>0,而不是你的ISBLANK(B1)聲明IF裏面。

不像ISBLANK()COUNTBLANK()認爲""爲空和返回1

+0

不幸的是,它似乎Excel拒絕= COUNTBLANK(IFNA(VLOOKUP(...),「」))無效(!) – NetMage

14

是的,這是可能的。

如果條件得到滿足,可能會有一個殲滅公式評估爲trueblank。它通過了ISBLANK公式的測試。這個看似不可能的技巧可以通過幾種不同的方式完成。這裏是我最喜歡的FrankensTeam系列的例子。

您可以使用,例如:

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

定義GetTrueBlank命名範圍後。

第1步。將此代碼置於模塊中。

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

關於VBA代碼的兩點評論。 (1)不要誤導rng.Value=""命名的憤怒GetTrueBlank將最終成爲一個真空,而不是像雙引號=""中的空字符串。 (2)在我的測試中,FrankensTeam最初使用的第一行代碼ThisWorkbook.Application.Volatile被證明是不必要的。

步驟2.A1細胞Sheet1添加名爲範圍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,如果你在A2鍵入0。

您可以download a demonstration file here

在上面的例子以及The FrankensTeam的所有其他例子中,評估公式爲trueblank會導致一個空單元格。使用ISBLANK公式檢查結果在TRUE中爲正值。這些是hara-kiri喜歡的公式。公式在條件滿足時從公式中消失。目標已經達成,但問題的作者可能希望公式不要消失。

請注意,可能會修改這些示例以在相鄰單元格中顯示結果,而不會自行查殺。但這是另一個問題,就是如何將公式結果存儲在不同的單元格中,然後自行配置。

我來翻過得到一個trueblank由FrankensTeam這裏reaveled公式結果的例子: https://sites.google.com/site/e90e50/excel-formula-to-change-the-value-of-another-cell

+2

這是一個甜蜜的解決方法,雖然很瘋狂,沒有辦法做到這一點而不用物理地清空細胞。這裏唯一的缺點是你必須記住在重新計算時重新拖動公式,但我想你可以設置一個工作簿事件來做到這一點。 –

3

這個答案並不完全處理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 

這將消滅掉它顯示當前""或只有一個公式

-1

谷歌把我帶到這裏有一個非常類似的問題的任何單元格的內容,我終於想出了一個解決辦法適合我的需要,它可能會幫助別人太...

我用這個公式:

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

這似乎是一個簡單的答案該作品已被錯過。

在電子表格中命名空單元格BlankCell

返回BlankCell在您的公式中,例如,

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

這將返回TRUE如果ISBLANK(VLOOKUP(A2,SomeTable,2,False))TRUE

+0

該公式會將對BlankCell的引用傳遞給ISBLANK函數,該函數將返回TRUE。但問題是將一個空白值返回給單元格。作爲公式的結果返回BlankCell的引用實際上會給出值0.問題的第一行說這不適合。 – Michael

+0

是不是一個包含公式定義不是空白單元格的單元格? – NetMage

+0

是的。這就是爲什麼用一個標準公式來回答原始問題是不可能的。 – Michael

相關問題