VBA从数组制作图表 - 缺少值的问题
Posted
技术标签:
【中文标题】VBA从数组制作图表 - 缺少值的问题【英文标题】:VBA Making chart from array - problem with missing values 【发布时间】:2019-03-21 08:34:01 【问题描述】:我正在制作带有标记的折线图。数据正在代码中创建到数组中,并将该数组放入图表中。
问题是数组中的缺失值表示为 EMPTY。
在绘制确实存在的两个点时,它们与线相连。 如果单元格为空,则选择该选项以绘制间隙。
Serie 公式将 EMPTY 显示为 #N/A。
XValues=="11/28/2016","12/5/2016","12/12/2016","12/19/2016","12/26/2016","1/ 2/2017","1/9/2017","1/16/2017","1/23/2017","1/30/2017","2/6/2017","2/13/ 2017","2/20/2017","2/27/2017"
值= 125.15,93.875,#N / A,#N / A,#N / A,#N / A,42,125,48.5714285714285,137,127.285714285714,81.6428571428571,89.9375,69.5,65.6428571428571,75.5,47.1666666666666
尝试用 0、""、NaN 替换,但没有任何效果。我想中断绘图线。
我有现有值,然后是一系列缺失值,然后是一些值。 我注意到,如果 serie 以缺失值开头,那么它的绘制效果很好。 否则不工作。
For i = LBound(p_data, 1) + 1 To UBound(p_data, 1)
sSerieName = p_data(i, 0)
If sSerieName <> "" Then
Dim serie() As Variant
Dim w As Long
w = 0
For j = LBound(labels) To UBound(labels)
ReDim Preserve serie(j): serie(j) = p_data(i, j + 1)
Next j
If Not Len(Join(serie, "")) = 0 Then
On Error Resume Next
With p_chart.Chart.SeriesCollection.NewSeries
.XValues = labels
.Values = serie
.Name = sSerieName
End With
On Error GoTo 0
End If
End If
Next i
【问题讨论】:
请edit您的问题并显示代码,或者更好的是minimal reproducible example。On Error Resume Next
最好不要这样做,你可以跳过错误,你正在尝试查找
你能告诉我xvalues
和serie
的结果吗?
@Nathan_Sav 添加在上面
你试过用字符串“empty”或Null替换错误。
【参考方案1】:
我认为在通过数组设置值等时这是不可能的。似乎将 Empty
解析为 N/A。我尝试了以下解决方案,这将涉及您记录这些空的发生位置。因此,例如,在这种情况下,我在第 3 点用之前的值替换了我的空值,并使用了以下
需要的值是 10,20,EMPTY,40
With s.NewSeries
.XValues = Array("a", "b", "c", "d")
.Values = Array(10, 20, 20, 40)
.Points(3).Format.Line.Visible = msoFalse
End With
我尝试的完整解决方案如下
Sub x()
Dim s As SeriesCollection
Dim lc As Long
Dim aTest() As Variant
Dim serie As String
aTest = Array(15, 20, Empty, 40)
Set s = ActiveChart.SeriesCollection
For lc = 0 To UBound(aTest)
If aTest(lc) = "" Then ' <--- record these lc values to hide points
If lc = 0 Then
aTest(lc) = 0
Else
aTest(lc) = aTest(lc - 1)
End If
Else
End If
Next lc
With s.NewSeries
.XValues = Array("a", "b", "c", "d")
.Values = aTest
.Points(3).Format.Line.Visible = msoFalse
End With
End Sub
【讨论】:
像魅力一样工作。有类似的想法。非常感谢!以上是关于VBA从数组制作图表 - 缺少值的问题的主要内容,如果未能解决你的问题,请参考以下文章
如何通过VBA代码获取Excel 2012条件格式的色标制作的颜色