首页 > 解决方案 > 有没有办法使用 Excel VBA 更新 powerquery 中的过滤器?

问题描述

所以我有一个 ODBC 数据集,我在加载到 Excel 之前在 PowerQuery 中进行了过滤。

在其中一个日期列上,我放置了一个过滤器:

保留“创建日期” 日期 X之后和日期 Y之前的行

如果不不断更改过滤器,数据集对于 Excel 来说太大了。我想在重新加载查询时使用 VBA 自动更改“之后”和“之前”日期。

这个想法是变量“之后”和“之前”日期可以插入到 Excel 中的两个单元格中。假设 Sheet1.range("A1") 和 sheet1.range("A2")。VBA 脚本会在重新加载查询之前在 PowerQuery 字段中插入这些日期。

这可能吗?如何?

更新:PowerQuery 菜单截图

标签: excelvbapowerquery

解决方案


如评论中所述,这不需要 VBA,您可以直接利用 Excel 名称和 Power Query。

脚步:

  1. 在 Excel 中添加单元格名称from和日期to
  • 将起始日期添加到单元格并为该单元格添加名称:fromDate
  • 将截止日期添加到单元格并为该单元格添加名称:toDate

在此处输入图像描述

  1. 将这些单元格添加到电源查询
  • 选择单元格并单击数据 | 从表/范围

在此处输入图像描述

  • 更改为日期类型

在此处输入图像描述

  • 向下钻取到第一个单元格(右键单击)

在此处输入图像描述

  1. 在表日期列过滤器中使用 fromDate 和 toDate 查询
  • 您可以编写代码或使用接口并对其进行调整:=Table.SelectRows(#"Changed Type", each ([Date] >= fromDate and [Date] <= toDate))

在此处输入图像描述

码:

表格1

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}}),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([Date] >= fromDate and [Date] <= toDate))
in
    #"Filtered Rows"

从日期

let
    Source = Excel.CurrentWorkbook(){[Name="fromDate"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type date}}),
    Column1 = #"Changed Type"{0}[Column1]
in
    Column1

迄今为止

let
    Source = Excel.CurrentWorkbook(){[Name="toDate"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type date}}),
    Column1 = #"Changed Type"{0}[Column1]
in
    Column1

表 1 查询

在此处输入图像描述

从日期查询

在此处输入图像描述

检查截屏视频

在此处输入图像描述

让我知道它是否有效


推荐阅读