Excel 将变量系列添加到带VBA的图表中
我的电子表格如下所示:Excel 将变量系列添加到带VBA的图表中,excel,vba,charts,series,Excel,Vba,Charts,Series,我的电子表格如下所示: A 1/1/2013 100 A 2/1/2013 200 A 3/1/2013 300 B 1/1/2013 150 B 2/1/2013 175 B 3/1/2013 200 这三列是固定的,但每个系列(第一列)的条目数不同 使用VBA,我想自动将第一列中的每个唯一值添加为散点图上的一个系列,使用第二列作为X值,第三列作为Y值。例如,对于上面的系列A,我需要动态确定B1:
A 1/1/2013 100
A 2/1/2013 200
A 3/1/2013 300
B 1/1/2013 150
B 2/1/2013 175
B 3/1/2013 200
这三列是固定的,但每个系列(第一列)的条目数不同
使用VBA,我想自动将第一列中的每个唯一值添加为散点图上的一个系列,使用第二列作为X值,第三列作为Y值。例如,对于上面的系列A,我需要动态确定B1:B3和C1:C3的范围
我使用录制的宏生成了将序列添加到图表的代码,因此我真正的障碍是找到每个序列的范围。我需要保留序列的名称以进行关联(第一列),并希望避免使用过滤器。我最终想到了一种有点迂回的解决方法;以下是适合任何感兴趣的人的代码,适用于我原始问题的布局:
Sub Example()
' Variable Definitions
Dim y As Integer
Dim Name(73) As String
Dim Mins(73) As Integer
Dim Maxs(73) As Integer
' Loop Through Name Column (Series)
For Each x In Range("A4:A" & Cells(Rows.Count, "A").End(xlUp).Row)
' Add Values to Arrays, If Not Preexisting
If IsInArray(x.Value(), Name) = False Then
Name(y) = x.Value()
Mins(y) = x.Row()
Maxs(y) = x.Row()
y = y + 1
Else
Maxs(y - 1) = x.Row()
End If
Next x
' Add to Chart
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(1).Name = Name(0)
ActiveChart.FullSeriesCollection(1).XValues = "=Data!$B$" & Mins(0) & ":$B$" & Maxs(0)
ActiveChart.FullSeriesCollection(1).Values = "=Data!$C$" & Mins(0) & ":$C$" & Maxs(0)
End Sub
' Array Function from @JimmyPena
' http://stackoverflow.com/a/11112305/2141501
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
请注意
过滤器
-如果您有一个序列名是另一个名称的子字符串,那么如果已将较长的序列名添加到数组中,您将获得错误的命中率。我的教程介绍了如何使用VBA执行此操作,同时介绍了如何在没有VBA的情况下执行此操作。