在使用EXCEL中经常性的要遇到数据可视化的问题,也就是要用数据做成一个个的图表。这个时候假如数据源比较多的时候,如果能很方便的切换数据源并显示新的图表,就会大大提高工作的效率。今天我们就来尝试用VBA来实现这种效果。
-
首先我们看下图,图中是第一列“中国”的数据形成的图表,我们要实现这样的效果,当点击美国和俄罗斯的时候,图表会自动将数据源切换到相应的下面一列的数据,从而形成新的图表。
最后形成的效果是这样的,点击不同的国家,就会根据不同国家的数据源形成不同的图表 :
下面我们来看看VBA代码:
Sub Worksheet_SelectionChange(ByVal Target As Range)
' For i = 1 To ActiveSheet.ChartObjects.Count
' MsgBox ActiveSheet.ChartObjects(i).Name
' Next
If Target.Column = 2 And Target.Row = 1 Then '判断鼠标点击第一行的哪个单元格
' MsgBox "你选中了:" & Target.Value
' 下面这里总共分了三列来判断和作为数据源
ActiveSheet.ChartObjects(1).Chart.SetSourceData Source:=Range("b1:b" & Cells(Rows.Count, 2).End(xlUp).Row)
ElseIf Target.Column = 3 And Target.Row = 1 Then
ActiveSheet.ChartObjects(1).Chart.SetSourceData Source:=Range("c1:c" & Cells(Rows.Count, 3).End(xlUp).Row)
ElseIf Target.Column = 4 And Target.Row = 1 Then
ActiveSheet.ChartObjects(1).Chart.SetSourceData Source:=Range("d1:d" & Cells(Rows.Count, 4).End(xlUp).Row)
Else
End If
End Sub
我们分析一下这几句VBA代码,其实没必要全部弄懂,只要学会用既可以了,只需要替换其中一些参数就可以了。
首先我们这个VBA是随点击事件触发的,所以我们用的是Worksheet_SelectionChange(ByVal Target As Range)
这里点击哪个单元格,Target就是那个单元格对象,然后第一段的话:
' For i = 1 To ActiveSheet.ChartObjects.Count
' MsgBox ActiveSheet.ChartObjects(i).Name
' Next
这一句是输出这个sheet每个图表的名字,这一句代码可以不用,我们已经把他注释了起来。
最主要的还是下面的一段代码
If Target.Column = 2 And Target.Row = 1 Then '判断鼠标点击第一行的哪个单元格
' MsgBox "你选中了:" & Target.Value
' 下面这里总共分了三列来判断和作为数据源
ActiveSheet.ChartObjects(1).Chart.SetSourceData Source:=Range("b1:b" & Cells(Rows.Count, 2).End(xlUp).Row)
ElseIf Target.Column = 3 And Target.Row = 1 Then
ActiveSheet.ChartObjects(1).Chart.SetSourceData Source:=Range("c1:c" & Cells(Rows.Count, 3).End(xlUp).Row)
ElseIf Target.Column = 4 And Target.Row = 1 Then
ActiveSheet.ChartObjects(1).Chart.SetSourceData Source:=Range("d1:d" & Cells(Rows.Count, 4).End(xlUp).Row)
Else
End If
这里面的Target.Column = 2 And Target.Row = 1
就是判断鼠标点击的是不是第2列第一行的单元格,余下的一样,只是判断是哪一个单元格,然后执行一句:
ActiveSheet.ChartObjects(1).Chart.SetSourceData Source:=Range("b1:b" & Cells(Rows.Count, 2).End(xlUp).Row)
这一句话就是修改这个sheet中图表的数据源,因为我们只有一个图表,所以只需要把这个图表的数据源设置范围为
Range("b1:b" & Cells(Rows.Count, 2).End(xlUp).Row)
的数据源,上面这个范围就是b列从b1到该列最后一个值。
所以我们有三列不同的数据源,只需要有三个判断,然后当点到那一列,修改图表的数据源到那一列的数据就可以啦~
- 总结一下,最关键的就是那一句修改数据源的代码比较难理解,其他都还好,如果看不懂的话也没关系,把代码拷贝下来,在哪个表格用就只需要右击sheet名字 -》查看代码,然后把代码拷贝进去即可,然后改一下参数,点击相应的单元格就可以啦^^
注意:事先需要先有一个图表,并随便指定一个数据源
注:表格中数据纯属测试,不具备真实性