[英]Creating a chart in Excel that ignores #N/A or blank cells
我正在嘗試使用動態數據系列創建圖表。 圖表中的每個系列都來自一個絕對范圍,但該范圍中可能只有一定數量的數據,其余的將是#N/A
。
問題是圖表將所有#N/A
單元格作為值粘貼而不是忽略它們。 我已經通過使用命名的動態范圍(即插入 > 名稱 > 定義)解決了這個問題,但這效率極低,因為每個圖表都有 4 個動態系列,我必須制作其中的 25 個圖表。
是否有任何其他解決方案允許我像往常一樣為數據系列指定一個范圍,但告訴圖表忽略所有“#N/A”或空白單元格?
我通過使用 IF 語句將不需要的值返回到“”時遇到了同樣的問題,並且圖表會按照您的描述進行操作。
但是,當我使用#N/A
而不是""
(重要的是,請注意它沒有#N/A
的引號而不是"#N/A"
),圖表忽略了無效數據。 我什至嘗試放入一個無效的FALSE
語句,它的工作原理是一樣的,唯一的區別是#NAME?
返回為單元格中的錯誤而不是#N/A
。 我將使用一個虛構的 IF 語句來向您展示我的意思:
=IF(A1>A2,A3,"")
---> Returned "" into cell when statement is FALSE and plotted on chart
(this is unwanted as you described)
=IF(A1>A2,A3,"#N/A")
---> Returned #N/A as text when statement is FALSE and plotted on chart
(this is also unwanted as you described)
=IF(A1>A2,A3,#N/A)
---> Returned #N/A as Error when statement is FALSE and does not plot on chart (Ideal)
=IF(A1>A2,A3,a)
---> Returned #NAME? as Error when statement is FALSE and does not plot on chart
(Ideal, and this is because any letter without quotations is not a valid statement)
當您將圖表引用到定義的范圍時,它會繪制該范圍內的所有點,將(為了繪制)錯誤和空白解釋為空值。
您可以選擇將其保留為空(間隙)或強制為零值。 但是這些都不會調整圖表系列數據指向的范圍。 據我所知,這兩種都不合適。
如果隱藏存在 #N/A 數據的整個行/列,圖表應完全忽略這些。 您可以通過右鍵單擊手動執行此操作 | 隱藏行,或使用表自動篩選。 我認為這就是你想要完成的。
請注意,在繪制折線圖時,使用 =NA()(輸出 #N/A)來避免繪制不存在的值將僅適用於每個系列的結尾、第一個和最后一個值。 兩個其他值之間的任何 #N/A 都將被忽略和橋接。
您是正確的,空格“”或字符串“#N/A”確實被解釋為在 excel 中具有值。 您需要使用函數 NA()。
如果您有想要散點圖的x
和y
列,但並非其中一列中的所有單元格都填充了有意義的值(即其中一些具有#DIV/0!
),則在旁邊插入一個新列違規列並鍵入=IFERROR(A2, #N/A)
,其中A2是違規列中的值。
如果有#DIV/0!
這將返回#N/A
#DIV/0!
否則將返回良好的價值。 現在使用新列制作繪圖,Excel 將忽略#N/A
值並且不會將它們繪制為零。
重要提示:不要在公式中輸出"#N/A"
,只輸出#N/A
。
您可以使用函數“=IF(ISERROR(A1);0;A1)”,如果單元格 A1 包含錯誤,則該函數將顯示零,如果不包含則顯示實際值。
我遇到了同樣的問題。
Bar chart
和Stacked Bar chart
的區別
由於Line chart
和Stacked Line chart
之間存在差異。
堆疊的不會忽略 0 或空白值,但會根據其他圖例顯示累積值。
只需右鍵單擊圖形,單擊Change Chart Type
並選擇一個非堆疊圖表。
只是想把我的 2cents 放在這個問題上......
我有一個類似的需求,我通過 INDEX/MATCH 從另一個表中提取數據,並且由於不匹配而很難區分真正的 0 值與 0 值(例如,對於顯示進度的柱形圖12 個月的值,我們僅在 2 月,但其余月份的數據尚不可用,柱形圖仍顯示 0 月至 12 月的任何地方)
我最終做的是創建一個新系列並將這個新系列作為折線圖繪制在圖表上,然后我通過選擇不顯示選項中的線來隱藏折線圖,並將數據標簽放在頂部,公式這個新系列的價值是這樣的:
=IF(LEN([@[column1]])=0, NA() ,[@[column1]])
我使用 LEN 作為驗證,因為 ISEMPTY/ISBLANK 不起作用,因為 INDEX/MATCH 的結果總是返回除空白以外的其他內容,即使我在 IFERROR 后面放了一個 ""...
在折線圖上,錯誤值 NA() 使得該值不顯示......所以這對我來說很有效......
我想在沒有圖片的情況下遵循此過程有點困難,但我希望它繪制某種圖片,以便您在遇到與我類似的情況時使用解決方法
一種解決方案是圖表/圖形不顯示隱藏的行。
您可以通過以下方式測試此功能:1)右鍵單擊行號 2)單擊隱藏。
為了自動執行,這是簡單的代碼:
For Each r In worksheet.Range("A1:A200")
If r.Value = "" Then
r.EntireRow.Hidden = True
Else:
r.EntireRow.Hidden = False
Next
還有另一種鮮為人知的解決方案,它在某些地方具有優勢。 使用#NULL! 不繪制也不為繪圖創建零點的錯誤。
因此,您的繪圖列填充了以下構造。 假設真實數據在 A 列中,而繪圖版本在 C 列中。
=If(Isnumber(A2),A2,A2 A3)
該空間是一個鮮為人知的運算符,用於生成兩個單元格地址或范圍的交集。 如果沒有交集,則它會生成消息 #NULL!
包含#NULL 的單元格! 出於繪圖目的而跳過。
除了(對於微軟)只需要讓數學方程以某種方式忽略這些單元格?
我在使用 X/Y 圖表時遇到了類似的問題,但隨后還需要計算兩組數據的相關函數。
=IF(A1>A2,A3,#N/A)
允許繪制圖表,但X
和Y
相關性失敗。
我通過=IF(A1>A2,A3,FALSE)
解決了這個問題
然后可以使用條件格式或其他技巧removed
FALSE
如果您使圖表上的垂直刻度(使用格式軸)從 0.0001(例如)開始運行,則不會繪制 Excel 認為為零的值。 您在圖表中的軸看起來仍然是從零向上運行。
如果您使用 PowerPivot 和 PivotChart,您將排除不存在的行。
我找到了一種方法。
你可以做一個 x,y 散點圖。 它將忽略空記錄(即行)
我遇到了同樣的問題,出現了整行。
我的數據末尾只有#N/A。
當我將圖表類型從堆積線更改為線時,線的末端從圖表中刪除。
如果#N/A 在數據中間,這不起作用,只有當它在尾隨數據中時。
選擇欄上方的標簽。 格式化數據標簽。 而不是選擇“VALUE”(取消單擊)。 從單元格中選擇值。 選擇值。 使用以下語句: if(cellvalue="","",cellvalue) 其中 cellvalue 是計算在單元格中的值。
雖然這是一篇舊帖子,但我最近在尋找同一問題的解決方案時遇到了它。 雖然上述解決方案確實會阻止圖表繪制數據(當源單元格為 #N/A 或使其看起來為空白時),但它並沒有解決圖表數據標簽本身仍然顯示零標簽的問題。
當我遇到在線發布的解決方案@ https://www.extendoffice.com/documents/excel/2031-excel-hide-zero-data-labels.html時,我搜索了又搜索,幾乎放棄了
它的工作就像一個魅力。 所附的圖像顯示了之前如何顯示數據(標簽)的示例,圖表#1,以及使用此提示圖表#2 的顯示方式。
我找到了以下解決方案:
如果所有不應包含在軸時間范圍內的日期序列單元格都包含""
,則 Excel 圖表會自動調整到正確的軸末端。 因此,您可以創建一個輔助列並將如下內容寫入日期系列輔助列單元格:
Helper Column Datecell = If( iserror (ValueCell);""; Datecell)
另一方面,如果您想將圖表大小調整為給定的時間范圍,您可以在輔助列日期系列單元格中寫入如下內容:
Helper Column Datecell = IF( OR(ISERROR(ValueCell); DateCell>DateInput) ;"";DateCell)
DateInput 是一個單元格,您可以在其中輸入日期以調整圖表大小。
這里還有一個話題:
關於這一點,如果您為值系列單元格創建一個輔助列,給出NA() Error
則值系列也會調整到您的系列:您甚至可以使您的值系列單元格依賴於給定的輸入單元格。 我覺得這也是需要的。
Helper Column Value Cell: if( condition that date cell is too big or bigger than a given input cell; NA(); ValueCell)
最好的方法是使用Empty
Dim i as Integer
For i = 1 to 1000
If CPT_DB.Cells(i, 1) > 100 Then
CPT_DB.Cells(i, 2) = CPT_DB.Cells(i, 1)
Else
CPT_DB.Cells(i, 2) = Empty //**********************
End If
Next i
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.