Excel中的图表编号在字符串中混合使用
我有一些数据正在放入图表和格式中。有一些业务规则,其中一些数据是“受保护的”,如示例中所示。用“受保护”(或任何其他词)图形表示excel时出现的问题是指向X轴底部的图形。我希望图表看起来像第二张图表,但我想避免绘制隐藏的列,因为我认为这会混淆我的高级用户。Excel中的图表编号在字符串中混合使用
任何想法或见解是值得赞赏!
当手动构建图表:
- 选择数据点
- 在格式功能区中,挑选格式选择
- 在“格式化数据点”,选线,并选择无线。
- 选取下一个数据点(对应于2013)。
- 在“格式数据点”上,选择“线”,然后选择“无线”。
这里是我的结果...
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
替代方法
构建具有多个系列的散点图,通过“攻击”行分离,格式化,因此它们看起来是一个系列...
这有缺点:
- 可能会让最终用户感到困惑
- 如果分散在“受保护”范围内的数据很多,则需要很多系列整个
尽管我同意@ OldUgly的回答,如果您认为这可以理解,也可以在数据旁添加另一列。
=IF(ISNUMBER($B2),$B2,"")
这应该做的伎俩。
这与使用“受保护的”具有相同的问题。使用一个字符串(甚至是一个空字符串)excel将其绘制为零。我确实玩过这个,并尝试使用NA()而不是“”。这导致了excel只是插入了前一个点和下一个点之间的界限。对NA()使用隐藏和空单元设置不起作用。它的行为就好像它被设置为“用数据线连接数据点” – KyleUp
如果我听到您的意见,图表会为空字符串填充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可以提出一个解决方案?
它是否必须有文本,或者它可以是空白的? – sous2817
是的,我正在寻找的解决方案理想情况下是在绘制列中的文本。 (或者也许有些文档证明它不能用列中的文本来完成)。 – KyleUp
“受保护”如何到达那里?这是一个公式吗? – sous2817