题目要求:
下拉标题变化,图表变化
原始数据:
题目要求:
解决思路:数据验证+VBA
操作如下:
第一步:选定一个区域
原始数据位于A3:E15范围,选定G3:H15来做这个事情,将年份列复制粘贴至G3:G15,设置筛选的格子选为H3
第二步 设置数据验证
单击选定H3,在”数据“选项卡,”数据工具“栏内找到数据验证
将允许选为“序列”,来源设置为需要筛选的列名序列,用英文逗号隔开,然后单击确定。
此时观察H3单元格已经能完成筛选,但无法实现数据的切换,需要写VBA代码
第三步:VBA代码编写
Alt+F11快捷键进入宏,找到对应sheet 输入以下代码
Private Sub Worksheet_Change(ByVal Target As Range)
Dim selectedColumn As String
Dim sourceRange As Range
Dim copyDestination As Range
' 使用Application.EnableEvents防止在复制过程中触发其他事件
Application.EnableEvents = False
' 检查更改是否发生在H3单元格(下拉列表的位置)
If Not Intersect(Target, Me.Range("H3")) Is Nothing Then
' 获取所选的列名
selectedColumn = Target.Value
' 根据所选列名设置源数据范围
Select Case selectedColumn
Case "流量"
Set sourceRange = Me.Range("B4:B15")
Case "订单数"
Set sourceRange = Me.Range("C4:C15")
Case "订单金额"
Set sourceRange = Me.Range("D4:D15")
Case "客单价"
Set sourceRange = Me.Range("E4:E15")
Case Else
' 如果没有匹配的列名,则不执行任何操作或显示错误消息
MsgBox "未找到匹配的列名。"
' 重新启用事件后退出子程序
Application.EnableEvents = True
Exit Sub
End Select
' 设置复制的目标范围(从H4开始)
Set copyDestination = Me.Range("H4")
' 将源数据范围复制到目标范围
If Not sourceRange Is Nothing Then
' 由于只需要复制值,我们首先复制,然后使用PasteSpecial粘贴为值
sourceRange.Copy
copyDestination.PasteSpecial Paste:=xlPasteValues
' 清除剪贴板
Application.CutCopyMode = False
End If
End If
' 完成复制后,重新启用Application事件
Application.EnableEvents = True
End Sub
逻辑基本就是 根据筛选的条件复制粘贴对应位置的数据
最后选定G3:H15的范围来画折线图就好了
即可完成筛选联动
以上就是类似于在Excel实现BI工具看板的筛选联动
特别鸣谢师妹提供的题目素材!