Excel中使用string混合的图表编号

我有一些数据放在图表和格式中。 有一些业务规则,其中一些数据是“保护”的,就像在这个例子中。 用“受保护”(或任何其他词)graphics表示excel的问题是指向X轴底部的graphics。 我希望图表看起来像第二个图表,但是我想避免将一个隐藏的列标出来,因为我认为这会混淆我的高级用户。

图表示例

任何想法或见解都被赞赏!

手动构build图表时:

  1. select数据点
  2. 在格式function区上,select格式select
  3. 在“格式数据点”上,select“线”,然后select“无线”。
  4. select下一个数据点(对应于2013)。
  5. 在“格式数据点”上,select“线”,然后select“无线”。

这是我的结果…

在这里输入图像描述

一小部分的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 

替代方法

build立多个系列的散点图,以“违规”行分隔,并进行格式化,使它们显示为一个系列…

在这里输入图像说明

在这里输入图像说明

这有缺点:

  • 最终用户可能更容易混淆
  • 如果你有大量的“受保护的”数据,需要很多系列

虽然我同意@ OldUgly的回答,但如果您认为这是可以理解的,那么也可以在数据旁添加另一列。

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

这应该够了吧。

我有点内疚,我无法想象这个大部分,这似乎是这样一个简单的前提。 我已经提出了一些解决办法,但是可以肯定地做一些改进。

我正在使用名为Eval的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))) 

这使范围dynamic,但你可以使用=EVAL(B2:B6)如果需要的话。

在您的图表上,将系列值范围编辑为Sheet1.xlsm!Chart (或者您调用的任何表单),然后将所有“受保护”值转换为空白的数据范围。 唯一的事情是,图表不pipe是哪一点,我都不能把图表绘制出来。 也许有人比我自己更好的谷歌可以拿出一个解决scheme?