我正在绘制一组在某些单元格中有空白的数据。在空白单元格中,我有公式,我必须保留公式。当我绘制数据图时,空白单元格被绘制为零。我想在图表中添加间隙而不是零。 我试着右键点击图表&gt;选择数据&gt; <隐藏和空单元格设置>将空单元格显示为间隙。但这没有帮助!
答案 0 :(得分:7)
不要将零或空字符串放在#N/A
。
您可以使用=IF([test],[value],NA())
等公式来完成。
这将允许图形不将缺失值显示为零,但如果我理解您的问题,它仍然不是您想要的,因为您希望将缺失值表示为间隙,而不是缺失值。< / p>
我知道看到差距的唯一方法是使用分散的图表。
据我所知,所有使一条线连接两个点的图形,都会加入两个点,并且没有缺失点的概念。他们只是加入了两个最接近的点。
解决方案可能是制作一个进入图表内部的VBA宏,并在数据丢失时更改每个图表行的颜色。
答案 1 :(得分:0)
解决方案可能是制作一个进入图表内部的VBA宏,并在数据丢失时更改每个图表行的颜色。
我有代码,可以修改图表。 它适用于具有#N / A和na()函数的单元格。像老excel一样。 首先,您需要一个带有public sub的模块:
Public Sub FormatNA()
Dim myChart As ChartObject
Dim series_i As Integer, series_count As Integer
Dim values_i As Integer, values_count As Integer
Dim rows As Integer, r As Integer
Dim mySeries As Object
Dim myValues As Variant
Dim myPoint As Object
Application.ScreenUpdating = False
If ActiveSheet.ChartObjects.Count = 0 Then Exit Sub
' for each chart in active sheet
For Each myChart In ActiveSheet.ChartObjects
' Determine Chart Type
Select Case myChart.Chart.ChartType
Case xlLine, _
xlLineMarkers, _
xlLineMarkersStacked, _
xlLineMarkersStacked100, _
xlLineStacked, _
xlLineStacked100, _
xlXYScatter, _
xlXYScatterLines, _
xlXYScatterLinesNoMarkers, _
xlXYScatterSmooth, _
xlXYScatterSmoothNoMarkers
' for each series
series_count = myChart.Chart.SeriesCollection.Count
For series_i = 1 To series_count
' for each data
Set mySeries = myChart.Chart.SeriesCollection(series_i)
Set myPoint = mySeries.Points(1)
myValues = mySeries.Values
values_count = UBound(myValues)
' global formatting:
Select Case mySeries.ChartType
' MARKERS:
Case xlLineMarkers, _
xlLineMarkersStacked, _
xlLineMarkersStacked100, _
xlXYScatter, _
xlXYScatterLines, _
xlXYScatterSmooth
With mySeries
.MarkerForegroundColorIndex = myPoint.MarkerForegroundColorIndex
.MarkerForegroundColor = myPoint.MarkerForegroundColor
.MarkerBackgroundColorIndex = myPoint.MarkerBackgroundColorIndex
.MarkerBackgroundColor = myPoint.MarkerBackgroundColor
.MarkerForegroundColor = myPoint.MarkerForegroundColor
.MarkerSize = myPoint.MarkerSize
.MarkerStyle = myPoint.MarkerStyle
End With
' NO MARKERS, JUST LINE:
Case Else
End Select
With mySeries
.Border.Color = myPoint.Border.Color
.Border.Weight = myPoint.Border.Weight
With .Format.Line
.ForeColor.RGB = myPoint.Format.Line.ForeColor.RGB
.BackColor.RGB = myPoint.Format.Line.BackColor.RGB
.Weight = myPoint.Format.Line.Weight
.Visible = msoTrue
End With
End With
For values_i = 2 To values_count
' set line invisible if #NA
If IsEmpty(myValues(values_i - 1)) And Not IsEmpty(myValues(values_i)) Then
mySeries.Points(values_i).Format.Line.Visible = msoFalse
'mySeries.Points(values_i).Border.Color = RGB(255, 255, 255) ' for debugging
'mySeries.Points(values_i).Border.Weight = 1
End If
Next values_i
Next series_i
Case Else
' different chart type
End Select
Next
Application.ScreenUpdating = True
End Sub
然后,每次计算工作表时都必须触发此子程序: 在ThisWorkbook中定义sub:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Static Calculated As Boolean
If Not Calculated Then
Call FormatNA
Calculated = True
Else
Calculated = False
End If
End Sub
也许它并不完美,但它对我有用。 Sample of manipulated chart
答案 2 :(得分:0)
可能有用的任何人如何解决这个问题,
步骤1:首先获取Chartpage访问权限并使用显示空白
Excel.Chart chartPage = myChart.Chart;
chartPage.DisplayBlanksAs = Excel.XlDisplayBlanksAs.xlInterpolated;
快乐编码。
答案 3 :(得分:0)
正如stenci所说,由于细胞中存在配方,很难在没有VBA的情况下产生缺口。一个耗时的解决方案是逐个删除提供空白单元格的公式,然后将它们绘制为间隙。 对于可能太耗时的大型数据集。
如果您愿意打开和关闭文件,则有一种解决方法:
注意,间隙的两侧需要具有线段,即间隙两侧的至少两个数据单元。具体来说,这将描绘一个差距: A1 = 1,A2 = 2,A3 =(空白),A4 = 4,A5 = 5.
这不会形成差距: A1 = 1,A2 =(空白),A3 = 3,A4 = 4.