2013-07-22 63 views
2

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

+0

嗨萨拉,你可以提供一些屏幕截图?在Excel 2010中,当我测试此方法时,评估为空字符串的公式在我的图表中不显示为零。 http://imgur.com/3bopUId –

回答

7

而不是放零或空字符串尝试把#N/A

你可以用像=IF([test],[value],NA())这样的公式来做到这一点。

这将允许图表不会将缺失的值显示为零,但如果我理解您的问题,它仍然不是您想要的,因为您希望将缺失的值表示为间隙,而不是缺少的值。

我知道查看差距的唯一方法是使用分散图。

据我所知,所有使一条线连接两个点的图确实加入了两点,并且没有缺失点的概念。他们只是加入了两个最近的点。

一个解决方案可能是创建一个VBA宏,该宏进入图中,并在数据丢失时更改每个图线的颜色。

+0

您的解决方案解决了我的问题,因为我在开始或结束时只有空白单元格。谢谢! –

+0

只对零散图作品的评论帮助了我。 “我知道查看差距的唯一方法就是使用分散的图表。” – luvlogic

0

一个解决方案可能是将一个VBA宏放入图中,并在数据丢失时更改每个图线的颜色。

我有代码,修改图表。 它适用于具有#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 

也许它并不完美,但它适用于我。 Sample of manipulated chart

0

可能是它可能是有用的任何一个人如何有这个问题,

第一步:先弄Chartpage访问和使用显示空白作为

Excel.Chart chartPage = myChart.Chart; 

    chartPage.DisplayBlanksAs = Excel.XlDisplayBlanksAs.xlInterpolated; 

编码愉快。

0

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

有一个解决办法,如果你愿意打开和关闭文件:

  1. 将空白单元格显示为空。例如:= IF(COUNT(A1)> 0,A1,“”);
  2. 保存工作簿的副本在您的首选格式,因为下一步将消除公式;
  3. 工作簿保存为一个不同的文件名.CSV文件;
  4. 关闭文件。然后重新打开文件;
  5. 现在的线图将提供空单元间隙。

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

而且这将不绘制的间隙: A1 = 1,A2 =(空白),A3 = 3,A4 = 4。

相关问题