2013-03-06 649 views
11

我經常遇到的Excel問題是如INDEX(array,row,column)這樣的公式,當沒有結果時返回0,而不是返回空白。有返回0的Excel公式,使結果爲空

將零結果更改爲空白的最佳方法是什麼?

這裏是我迄今爲止嘗試過的方法:

1)使用除零。如果INDEX返回0,則會導致我過濾出的錯誤。

=IFERROR(1/1/INDEX(A,B,C),"") 

缺點:使公式更混亂,隱藏你可能想看到的錯誤。

2)使用自定義格式

0;-0;;@ 

缺點:
1)不能同時申請日期格式
2)當涉及到檢查空白單元格它不具有條件格式的工作(還有,它只是未顯示)

3)使用IF聲明

=IF((1/1/INDEX(A,B,C))<>"",(1/1/INDEX(A,B,C)),"") 
的值爲零3210

缺點:凌亂的重複

有沒有人有任何其他/更好的想法?

+1

沒有理由,你不能排除零與日期格式 - 像這樣的自定義格式 - m/d/yy ;; – 2013-03-06 08:15:43

+1

特里斯坦,出於興趣,你是什麼樣的額外細節_looking_ for(根據你的評論設置賞金時)?我的答案(和其他一些答案)似乎都提供了足夠的細節,據我所知,這將允許您解決您的問題。我甚至增加了關於如何創建宏並使用它的詳細步驟,以防造成你的悲傷。如果你認爲答案不知何故,告訴我們_why_,我們可以解決它們。 – paxdiablo 2013-03-19 09:28:05

回答

9

您可以在Excel中的模塊中創建您自己用戶定義的函數,例如(從內存中,所以可能需要一些調試和語法可能Excel版本之間的變化以及):

Public Function ZeroToBlank (x As Integer) As String 
    If x = 0 then 
     ZeroToBlank = "" 
    Else 
     ZeroToBlank = CStr(x) 
    End If 
End Function 

然後您可以簡單地將=ZeroToBlank (Index (a,b,c))插入到您的單元格中。

關於這個問題有一個很好的教程here

的基本步驟是:

  • 打開在Excel中的VB編輯器使用Tools -> Macro -> Visual Basic Editor
  • Insert -> Module創建一個新模塊。
  • 將上述功能輸入到該模塊中。
  • 在你想調用該函數的單元格,輸入公式
              =ZeroToBlank (<<whatever>>)
    其中<<whatever>>是你希望使用空白如果它的值爲零。
  • 請注意,這個函數返回一個字符串,所以,如果你想看起來像一個數字,你可能想右對齊的單元格。

請注意,根據您使用的是哪個版本的Excel,可能會有細微的變化。我的Excel版本是2002年,雖然它很老,但它仍然滿足我需要的一切。

+1

如何防止實際爲「0」的值不要變爲空白? – 2013-12-06 21:55:59

+0

@Gerhard,你只需使用函數內的值而不是函數內的值,推測你知道你想要什麼樣的行爲。如果行爲取決於_other_因素,則可以使用'@ if'或其他一些條件控制。 – paxdiablo 2013-12-06 23:10:24

6

正常的方式將是IF語句,雖然比你的例子更簡單:

=IF(INDEX(a,b,c),INDEX(a,b,c),"") 

不需要做迴旋用公式,因爲零值觸發假條件。

+0

對於實際包含「0」的單元格,不會返回'「」嗎? – NetMage 2017-10-17 19:07:29

2

如果您願意讓工作表中的所有零消失,請進入「Excel選項」,「高級」頁面,「顯示此工作表的選項」部分,並清除「在單元格中顯示零有一個零值「複選框。 (這是Excel 2007的導航; YMMV。)

關於您的答案(2),您可以通過輸入0;-0;來保存幾個擊鍵 - 據我所知,這相當於0;-0;;@。相反,如果你想更通用一些,你可以使用格式General;-General;。不,那不會自動處理日期,但正如Barry指出的那樣,如果您的期望爲日期值,則可以使用d-mmm-yyyy;;之類的格式。

1

這個問題可能是爲什麼你希望它的行爲與現在的行爲不同?除了在VBA中編寫自己的包絡函數或替代函數(這可能會導致大文件中的計算速度降低)之外,可能沒有針對您的不同問題的單一解決方案。

任何後續公式將最有可能失敗一個空白,從而導致一個錯誤,你可以捕獲IFERROR()或防止IF(sourcecell<>"";...),如果你會使用後者,然後測試零是隻是相同的工作量和雜波。檢查空白單元格將檢查0值單元格。 (如果這可以幫助你解釋更具體的問題)。

出於審美的目的,自定義格式解決方案將會很好。

對於圖表可能存在問題,可以通過將其應用於原始公式中來解決。

4

我不知道它適用於所有類型的數據,但我發現在目前唯一的解決辦法是測試指標返回空白:

=IF(ISBLANK(INDEX(a,b,c)),"",INDEX(a,b,c)) 

公式

=IF(INDEX(a,b,c),INDEX(a,b,c),"") 

不使用文本

4

也許最簡單的方法是使用?修飾符將公式的文本格式條件添加到公式中。因此:

(formula to grab values)變爲:

text((formula to grab values),"?")

希望有所幫助。

1

對這個混亂的問題 - SUBSTITUTE函數有一個非常簡單的答案。在你上面的例子:

=SUBSTITUTE((1/1/INDEX(A,B,C), " ", "") 
1

我想通了,通過連接一個EMPTY字符串:如下

=IF((1/1/INDEX(A,B,C))<>"",(1/1/INDEX(A,B,C)),"") 

可以重寫。

INDEX(tt_Attributes,MATCH([RowID],tt_Attributes[RowID],0),COLUMN(tt_Attributes[Long Description])) & "" 
1
=if(b2 = "", "", b2) 

這爲我工作

0

使用條件格式(主頁選項卡,樣式部分),並應用高亮細胞規則(將0在等於框格式單元),但選擇自定義格式然後是數字選項卡。選擇類別定製,並在類型框中放:

0; -0 ;; @

聽起來很複雜,但其實很簡單。

這給出的好處是,單元看起來是空的,但0仍然是基礎值,所以任何使用該單元格/選擇的公式仍然會將其視爲數值,並節省大量混亂的鏈接IF語句。

0

以上都不適合我,所以我試着把0放在引號中,如下面的例子所示。

示例: = IF(INDEX(A,B,C)= 「0」, 「」,INDEX(A,B,C))

-1

=IF(INDEX(a,b,c)="0","", INDEX(a,b,c))具有小的修改爲我工作。排除0之間和沒有空格之間的報價: =IF(INDEX(a,b,c)="","", INDEX(a,b,c))