Excel按字体颜色、数值、日期筛选行适配Power BI读取的实现方法
解决方案:Excel VBA宏自动筛选同步数据
本方案通过Excel自带的VBA宏实现按字体颜色、数值、日期规则自动筛选数据,同步到指定工作表后Power BI可直接读取。
前置准备
- 确认源数据工作表名称,后续可在代码中对应修改
- 新建空白工作表命名为
筛选结果,用于存放输出数据,Power BI直接连接该工作表即可 - 数据集片段参考:

操作步骤
1. 打开VBA编辑器
按Alt + F11组合键打开Excel VBA编辑器,右键点击你的工作簿名称→插入→模块。
2. 粘贴代码
将以下代码粘贴到新建的模块中,可根据注释修改对应参数适配你的表格结构:
Sub 按规则筛选同步数据() Dim 源表 As Worksheet, 结果表 As Worksheet Dim 最后行 As Long, 结果行 As Long, i As Long Dim 指定起始日期 As Date ' --------------------------可修改参数区域-------------------------- 指定起始日期 = DateSerial(2024, 1, 1) ' 修改为你需要的指定日期 Set 源表 = ThisWorkbook.Worksheets("源数据") ' 替换为你的源表实际名称 Set 结果表 = ThisWorkbook.Worksheets("筛选结果") ' 替换为你的结果表实际名称 基准列 = "A" ' 源表中存在连续数据的基准列,用于计算数据最后一行 颜色判断列 = "B" ' 用来判断字体颜色的数值列列号 日期列 = "A" ' 存放日期的列列号 ' ----------------------------------------------------------------- ' 清空结果表原有数据 结果表.Cells.Clear ' 复制表头 源表.Rows(1).Copy 结果表.Rows(1) 结果行 = 2 ' 获取源表数据最后一行行号 最后行 = 源表.Cells(源表.Rows.Count, 基准列).End(xlUp).Row ' 遍历所有数据行 For i = 2 To 最后行 ' 条件1:黑色字体+数值非0+符合日期要求 条件1 = (源表.Cells(i, 颜色判断列).Font.Color = vbBlack) And _ (源表.Cells(i, 颜色判断列).Value <> 0) And _ (源表.Cells(i, 日期列).Value >= 指定起始日期) ' 日期判断规则可自行调整,比如修改为区间判断 ' 条件2:红色字体 条件2 = (源表.Cells(i, 颜色判断列).Font.Color = vbRed) If 条件1 Or 条件2 Then ' 复制符合条件的行到结果表 源表.Rows(i).Copy 结果表.Rows(结果行) 结果行 = 结果行 + 1 End If Next i ' 自动调整结果表列宽 结果表.Columns.AutoFit MsgBox "同步完成,共" & 结果行 - 2 & "条符合条件的数据" End Sub
3. 运行宏
回到Excel界面,按Alt + F8选择按规则筛选同步数据点击运行即可。
可选优化
- 可以在源数据工作表插入按钮,绑定宏,更新完数据后点击按钮即可一键同步
- 如需自动触发,可以在源表的
Worksheet_Change事件中调用该宏,修改源数据后自动同步 - 文件需保存为
.xlsm启用宏的格式,代码才可以正常运行 - 存放在SharePoint的文件,只要在本地同步目录中用桌面版Excel打开运行宏,同步后Power BI连接SharePoint路径下的
筛选结果工作表即可正常读取数据
内容的提问来源于stack exchange,提问作者fluffy101
相关产品推荐
相关产品推荐

