13

我有一些数据要放入图表和格式中。有一些业务规则,其中一些数据像示例中一样受到“保护”。使用“受保护”(或任何其他词)excel 绘制图形时的问题是指向 X 轴底部的图形。我希望图表看起来像第二张图表,但我想避免绘制隐藏列,因为我认为它会使我的高级用户感到困惑。

图表示例

任何想法或见解表示赞赏!

4

3 回答 3

6

手动构建图表时:

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

这是我的结果...

在此处输入图像描述

一小部分将生成图表的 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

替代方法

构建一个包含多个系列的散点图,由“违规”行分隔,并格式化,使它们看起来是一个系列......

在此处输入图像描述

在此处输入图像描述

这有缺点:

  • 最终用户可能会更加困惑
  • 如果您有大量“受保护”分散在各处的数据,则需要大量系列
于 2016-05-04T00:56:22.513 回答
0

我有点沮丧,我无法弄清楚其中的大部分,这似乎是一个如此简单的前提。我做了一些解决方法,但肯定可以做一些改进;

我正在使用一个名为 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 的人可以想出一个解决方案?

于 2016-05-10T09:29:46.830 回答
0

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

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

这应该够了吧。

于 2016-05-06T18:43:53.013 回答