在Excel中以空白的forms绘制空白单元格

我正在绘制一些在某些单元格中空白的数据。 在空白单元格我有公式,我必须保持公式。 当我绘制数据时,空白单元格绘制为零。 我想在图中填充空白而不是零。 我试图右键单击图>select数据>隐藏和空单元格设置>显示空单元格作为差距。 但是这并没有帮助!

不要把零或空string尝试放#N/A

你可以用公式如=IF([test],[value],NA())

这将使图不能显示缺失的值为零,但如果我理解你的问题,它仍然不是你想要的,因为你想缺失的值被表示为差距,而不是缺失值。

我所知道的唯一方法就是使用分散的图表。

据我所知,所有join两点的图表都join了两点,并没有缺失点的概念。 他们只是join了两个最接近的点。

一个解决scheme可能是创build一个VBAmacros,进入图中,并在数据丢失时更改每个graphics行的颜色。

一个解决scheme可能是创build一个VBAmacros,进入图中,并在数据丢失时更改每个graphics行的颜色。

我有代码,修改图表。 它适用于具有#N / A和na()函数的单元格。 像老式的Excel一样。 首先,你需要一个公共子模块:

 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中定义子项:

 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 

也许这不是完美的,但它适用于我。 操纵图表的样本

可能是有用的任何一个这个问题怎么样,

步骤1:首先获取Chartpage访问权限并使用Display blank作为

  Excel.Chart chartPage = myChart.Chart; chartPage.DisplayBlanksAs = Excel.XlDisplayBlanksAs.xlInterpolated; 

快乐的编码。

正如stenci所说,由于单元格中存在公式,所以很难创build没有VBA的间隙。 耗时的解决办法是逐个删除提供空白单元格的公式,以便将它们绘制为间隙。 对于可能太耗时的大数据集。

有一个解决方法,如果你愿意打开和closures文件:

  1. 将空白单元格设置为空。 例如:= IF(COUNT(A1)> 0,A1,“”);
  2. 以您喜欢的格式保存工作簿的副本,因为下一步将消除公式;
  3. 将工作簿另存为具有不同文件名的.CSV文件;
  4. closures文件。 然后重新打开文件;
  5. 现在线图将为空单元格提供空白。

请注意,间隙的两侧都需要有一个线段,即间隙两侧至less有两个数据单元。 具体来说,这将形成一个空白:A1 = 1,A2 = 2,A3 =(空白),A4 = 4,A5 = 5。

这不会画出一个空白:A1 = 1,A2 =(空白),A3 = 3,A4 = 4。