我正在尝试使用动态数据系列创建图表。图表中的每个系列都来自一个绝对范围,但该范围中可能只有一定数量的数据,其余的将是#N/A
.
问题是图表将所有#N/A
单元格作为值而不是忽略它们。我已经通过使用命名动态范围(即插入>名称>定义)来解决它,但这是非常低效的,因为每个图表都有4个动态系列,我必须制作25个这样的图表。
是否有任何其他解决方案允许我像往常一样为数据系列指定范围,但告诉图表忽略所有“#N/A”或空白单元格?
我正在尝试使用动态数据系列创建图表。图表中的每个系列都来自一个绝对范围,但该范围中可能只有一定数量的数据,其余的将是#N/A
.
问题是图表将所有#N/A
单元格作为值而不是忽略它们。我已经通过使用命名动态范围(即插入>名称>定义)来解决它,但这是非常低效的,因为每个图表都有4个动态系列,我必须制作25个这样的图表。
是否有任何其他解决方案允许我像往常一样为数据系列指定范围,但告诉图表忽略所有“#N/A”或空白单元格?
通过使用 IF 语句将不需要的值返回给“”,我遇到了同样的问题,并且图表会按照您的描述进行。
但是,当我使用#N/A
而不是""
(重要,请注意它没有引号,如 in#N/A
和 not "#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
and列,但并非其中一列中的所有单元格都填充了有意义的值(即其中一些具有),则在有问题的列旁边插入一个新列并键入,其中A2是违规列中的值。y
#DIV/0!
=IFERROR(A2, #N/A)
#N/A
如果有 a ,这将返回#DIV/0!
,否则将返回良好的值。现在用你的新列绘制你的图,Excel 会忽略#N/A
值并且不会将它们绘制为零。
重要提示:不要"#N/A"
在公式中输出,只需输出#N/A
。
您可以使用函数“=IF(ISERROR(A1);0;A1)”,如果单元格 A1 包含错误,则该函数将显示为零,否则将显示实际值。
我遇到了同样的问题。
Bar chart
a和 a是有区别的Stacked Bar chart
Line chart
因为 a和 a之间有区别Stacked Line chart
。
堆叠的,不会忽略 0 或空白值,而是会根据其他图例显示一个累积值。
只需右键单击图表,单击Change Chart Type
并选择一个非堆叠图表。
只是想把我的2cents放在这个问题上......
我有类似的需求,我通过 INDEX/MATCH 从另一个表中提取数据,并且由于不匹配而很难区分真正的 0 值和 0 值(例如,对于显示进度的柱形图) 12 个月的值,我们仅在 2 月,但其余月份的数据尚不可用,柱形图仍显示 0 到 3 月至 12 月的所有地方)
我最终做的是创建一个新系列并将这个新系列绘制在图表上作为折线图然后我通过选择不在选项中显示线来隐藏折线图并将数据标签放在顶部,公式这个新系列的值类似于:
=IF(LEN([@[column1]])=0, NA() ,[@[column1]])
我使用 LEN 作为验证,因为 ISEMPTY/ISBLANK 不起作用,因为 INDEX/MATCH 的结果总是返回除空白以外的其他内容,即使我在 IFERROR 之后放了一个“”...
在折线图上,错误值 NA() 使得该值不显示......所以这对我来说很有效......
我想在没有图片的情况下遵循此过程有点困难,但我希望它描绘出某种图片,以便您在遇到类似我的情况时使用解决方法
还有另一种鲜为人知的解决方案在某些地方有优点。使用#NULL!不绘图且不为绘图创建零点的错误。
因此,您的绘图列充满了以下构造。假设 A 列中的真实数据和绘图版本在 C 列中。
=If(Isnumber(A2),A2,A2 A3)
该空间是一个鲜为人知的运算符,用于产生两个单元格地址或范围的交集。如果没有交集,则生成消息#NULL!
包含#NULL 的单元格!出于绘图目的而被跳过。
除了(对于微软)只需要让数学方程以某种方式忽略这些单元格?
一种解决方案是图表/图形不显示隐藏行。
您可以测试此功能:1)右键单击行号 2)单击隐藏。
为了自动完成,这是简单的代码:
For Each r In worksheet.Range("A1:A200")
If r.Value = "" Then
r.EntireRow.Hidden = True
Else:
r.EntireRow.Hidden = False
Next
我在使用 X/Y 图表时遇到了类似的问题,但随后还需要计算两组数据的相关函数。
=IF(A1>A2,A3,#N/A)
允许绘制图表,但X
&的相关性Y
失败。
我解决了这个问题
=IF(A1>A2,A3,FALSE)
FALSE 然后可以removed
使用条件格式或其他技巧
我找到了一种方法。
你可以做一个 x,y 散点图。它将忽略空记录(即行)
如果您使用 PowerPivot 和 PivotChart,您将排除不存在的行。
如果您使图表上的垂直刻度(使用格式轴)从 0.0001(例如)开始,则不会绘制 Excel 认为为零的值。图表中的轴看起来仍然像从零向上运行。
虽然这是一篇旧帖子,但我最近在寻找相同问题的解决方案时遇到了它。虽然上述解决方案确实阻止了图表绘制数据(当源单元格为 #N/A 或看起来空白时),但它并不能解决图表数据标签本身仍显示零标签的问题。
当我遇到在线发布的解决方案@ https://www.extendoffice.com/documents/excel/2031-excel-hide-zero-data-labels.html时,我已经搜索和搜索并且几乎放弃了
它的工作就像一个魅力。附件是一个图像,显示了数据(标签)如何显示之前的示例,图表#1,以及它如何使用此提示图表#2 显示。
选择栏上方的标签。格式化数据标签。而不是选择“VALUE”(取消单击)。从单元格中选择值。选择值。使用以下语句: if(cellvalue="","",cellvalue) 其中 cellvalue 是单元格中的计算内容。
我遇到了同样的问题,出现了整行。
我的数据末尾只有#N/A。
当我将图表类型从堆积线更改为线时,线的末端从图表中删除。
如果 #N/A 位于数据中间,则此方法不起作用,仅当它位于尾随数据中时。
我找到了以下解决方案:
如果不应包含在轴时间范围内的所有日期系列单元格包含 ,则 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