如何用VBA删除运行宏后PowerQuery表新增的带表头空白列
解决方案
方法1:从根源避免表2自动扩展(优先推荐)
PowerQuery生成的结构化表默认开启了自动扩展相邻数据为新列的功能,关闭该特性即可从根源杜绝多余列产生:
- 选中表2(NP_Data_output)任意单元格,点击「表格设计」选项卡
- 找到「外部表数据」组,点击「属性」
- 取消勾选「在键入时扩展表格范围」选项即可
如果不想修改表格默认设置,直接用VBA代码兜底删除多余列也可以。
方法2:优化后的VBA删除多余列代码
你原有的代码存在两个问题:一是用Select、Selection这类选中操作,运行效率低且容易因为工作表切换出错;二是硬编码固定删除11次,后续多余列数量变化就会失效。
优化后的代码直接放在你现有宏的末尾即可:
Dim ws As Worksheet Dim lo As ListObject Dim 标准列数 As Long ' 配置参数:修改为你表2正常的列数,比如初始为57列就填57 标准列数 = 57 ' 修改为你实际的工作表名称 Set ws = ThisWorkbook.Worksheets("你的工作表名称") ' 绑定表2对象 Set lo = ws.ListObjects("NP_Data_output") ' 从后往前删除所有超出标准列数的列,避免序号错乱 Do While lo.ListColumns.Count > 标准列数 lo.ListColumns(lo.ListColumns.Count).Delete Loop ' 释放对象 Set lo = Nothing Set ws = Nothing
代码说明
- 仅需修改
标准列数和工作表名称两个参数为你实际的数值即可 - 从后往前删除列,不会出现前序列删除后序号偏移导致删错的问题
- 全程无选中操作,运行更稳定,无论多出多少列都可以一次性清理完成
内容的提问来源于stack exchange,提问作者benjin
相关产品推荐
相关产品推荐

