我有一些数据要放入图表和格式中。有一些业务规则,其中一些数据像示例中一样受到“保护”。使用“受保护”(或任何其他词)excel 绘制图形时的问题是指向 X 轴底部的图形。我希望图表看起来像第二张图表,但我想避免绘制隐藏列,因为我认为它会使我的高级用户感到困惑。
任何想法或见解表示赞赏!
我有一些数据要放入图表和格式中。有一些业务规则,其中一些数据像示例中一样受到“保护”。使用“受保护”(或任何其他词)excel 绘制图形时的问题是指向 X 轴底部的图形。我希望图表看起来像第二张图表,但我想避免绘制隐藏列,因为我认为它会使我的高级用户感到困惑。
任何想法或见解表示赞赏!
手动构建图表时:
这是我的结果...
一小部分将生成图表的 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
替代方法
构建一个包含多个系列的散点图,由“违规”行分隔,并格式化,使它们看起来是一个系列......
这有缺点:
我有点沮丧,我无法弄清楚其中的大部分,这似乎是一个如此简单的前提。我做了一些解决方法,但肯定可以做一些改进;
我正在使用一个名为 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)))
=EVAL(B2:B6)
这使范围动态,但如果需要,您可以使用。
在您的图表上,将系列值范围编辑为Sheet1.xlsm!Chart
(或任何您的工作表),您将获得任何“受保护”值转换为空白的数据范围。唯一的事情是,图表将绘制两点之间的线,我无法让图表绘制间隙。也许比我有更好的 google-fu 的人可以想出一个解决方案?
虽然我同意@OldUgly 的回答,但如果您认为可以理解,您也可以在数据旁边添加另一列。
=IF(ISNUMBER($B2),$B2,"")
这应该够了吧。