Office实用小技能get高效率办公&科研VBA For Excel

EXCEL代码实现图表自动切换不同数据源

2018-03-15  本文已影响14人  tobbyvic
image

在使用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到该列最后一个值。
所以我们有三列不同的数据源,只需要有三个判断,然后当点到那一列,修改图表的数据源到那一列的数据就可以啦~

注:表格中数据纯属测试,不具备真实性

上一篇 下一篇

猜你喜欢

热点阅读