Excel中的图表编号在字符串中混合使用

问题描述:

我有一些数据正在放入图表和格式中。有一些业务规则,其中一些数据是“受保护的”,如示例中所示。用“受保护”(或任何其他词)图形表示excel时出现的问题是指向X轴底部的图形。我希望图表看起来像第二张图表,但我想避免绘制隐藏的列,因为我认为这会混淆我的高级用户。Excel中的图表编号在字符串中混合使用

Chart Examples

任何想法或见解是值得赞赏!

+0

它是否必须有文本,或者它可以是空白的? – sous2817

+0

是的,我正在寻找的解决方案理想情况下是在绘制列中的文本。 (或者也许有些文档证明它不能用列中的文本来完成)。 – KyleUp

+0

“受保护”如何到达那里?这是一个公式吗? – sous2817

当手动构建图表:

  1. 选择数据点
  2. 在格式功能区中,挑选格式选择
  3. 在“格式化数据点”,选线,并选择无线。
  4. 选取下一个数据点(对应于2013)。
  5. 在“格式数据点”上,选择“线”,然后选择“无线”。

这里是我的结果...

enter image description here

VBA的小一点,这将生成图表...

Sub MakeChart() 
Dim cell As Range, mySerRng As Range, mySrcRng As Range 
Dim mySht As Worksheet, myChrt As Chart 
Dim lastRow As Long 

Set mySht = Worksheets("Sheet1") 
lastRow = mySht.Range("A" & mySht.Rows.Count).End(xlUp).Row 

Set mySerRng = mySht.Range(mySht.Cells(1, 2), mySht.Cells(lastRow, 2)) 
Set mySrcRng = mySht.Range(mySht.Cells(1, 1), mySht.Cells(lastRow, 2)) 

Set myChrt = mySht.Shapes.AddChart2(-1, xlLine, mySht.Range("C1").Left, mySht.Range("C1").Top).Chart 
With myChrt 
    .SeriesCollection.Add Source:=mySrcRng, RowCol:=xlColumns, serieslabels:=True, categorylabels:=True, Replace:=True 
    For Each cell In mySerRng 
     If cell.Value = "Protected" Then 
      .SeriesCollection(1).Points(cell.Row - 1).Format.Line.Visible = False 
      .SeriesCollection(1).Points(cell.Row).Format.Line.Visible = False 
     End If 
    Next cell 

End With 
End Sub 

替代方法

构建具有多个系列的散点图,通过“攻击”行分离,格式化,因此它们看起来是一个系列...

enter image description here

enter image description here

这有缺点:

  • 可能会让最终用户感到困惑
  • 如果分散在“受保护”范围内的数据很多,则需要很多系列整个

尽管我同意@ OldUgly的回答,如果您认为这可以理解,也可以在数据旁添加另一列。

=IF(ISNUMBER($B2),$B2,"") 

这应该做的伎俩。

+0

这与使用“受保护的”具有相同的问题。使用一个字符串(甚至是一个空字符串)excel将其绘制为零。我确实玩过这个,并尝试使用NA()而不是“”。这导致了excel只是插入了前一个点和下一个点之间的界限。对NA()使用隐藏和空单元设置不起作用。它的行为就好像它被设置为“用数据线连接数据点” – KyleUp

+0

如果我听到您的意见,图表会为空字符串填充0,但不会填充真空单元格。如果是这样的话,你可以做我刚才提到的,然后选择你的数据。通过主页 - >编辑 - >查找和选择 - >转到特殊 - >空白查找所有“空白”单元格。然后用Home-> Editing-> Clear-> Clear All清除所有单元格数据/格式。 –

我有点内疚,我无法弄清楚大多数这一点,它似乎是这样一个简单的前提。我已经提出了一些解决方法,但它肯定可以做一些改进;

我使用VBA函数调用的评估和演示:

Public Function Eval(varRange As Range) 
Dim varArray() As Variant 
varArray = varRange 
Dim R As Long 
Dim C As Long 
For R = 1 To UBound(varArray, 1) 
    For C = 1 To UBound(varArray, 2) 
     If varArray(R, C) = "Protected" Then 
      varArray(R, C) = CVErr(xlErrNA) 
     End If 
    Next C 
Next R 
Eval = varArray 
End Function 

,并具有下列公式

=EVAL(INDIRECT("Sheet1!$B$2:$B$"&1+COUNTA(Sheet1!$B$2:$B$31))) 

这使得该范围的动态称为“表”规定的范围内,但你可以如果需要,只需使用=EVAL(B2:B6)

在您的图表上,将系列值范围编辑为Sheet1.xlsm!Chart(或者您调用的任何表单),并且您将数据范围的所有“受保护”值转换为空白。唯一的问题是,图表将绘制两点之间的界线,无论如何,我不能让图表绘制出差距。也许有人比我自己有更好的google-fu可以提出一个解决方案?