PowerQuery 合并单簿内的多表(合并方式:直接查询/VBA建表后查询/建表后用M查询)

单簿合并多表,起始招数分两派 - <直接查询> 和 <建立表后在查询>

********一种是直接从工作簿建立查询************

1.不建立表,直接新建空白查询 - 导入工作簿 - 完成合并

数据/查询/文件/从工作簿

2.查询界面打开, 如要合并全部表, 直接 右键选编辑(Edit). 

  若是只合并若干表,则勾选 多选(Select multiple items),再勾选待合并表后选编辑(Edit)

3. 编辑界面打开后, 在右侧的步骤点击源(Source)

    再转到公示栏, 先在 = 号后添加 Table.Combine(  然后在结尾处添加 )[Data] 完成后回车

* = #shared 可查询M用法

4.现在只需要做些整理,就能就可以上传合并后的表去Excel里面了

转换/使用第一行做标题 

点击筛选,反选 bb, 只保留数值

5, Home 下面选 关闭且上传至表(Close & Load)

6. 完成~ *** 支持增加新表后自动加入查询结果.***

***或者用合并多工作薄的方式合并单簿多表

将要合并的工作薄单独存放在一个文件夹中,然后 建立查询: 数据/查询/文件/从文件夹

在打开的查询界面选着 添加自定义列(Add Custom Column), 自定义公示栏中输入 =Excel.Workbook([Content],true) 回车

选中结果中的 Name 和 Custom列, 管理列/删除其他列 , 然后点击Custom列的展开, 接着点 Data 继续展开

得到下表, 删除多余列上传Excel即为所得. 

**PS:如果往这个文件夹中添加工作薄, 或者在这个工作薄中添加工作表,会被自动添加到查询结果.

********另一种是先建立表,在查询************

先建立表:可以手动建表(Ctrl+T/L),或者VBA(文末分享代码) - 纯点击 / 或者 M 代码完成合并

1. 所有需要合并的工作表都分别建立成格式表, (Ctrl + T/L)

Ctrl+F3, 在名称管理器中,查看你所要合并的表, 带特征码重命名之(方便之后合并时做时筛选), 或者将不要合并的表重命名(增加新表时不用特意特征命名,直接刷新)

2. 步骤

-- 2.1数据/从表 建立查询

-- 2.2 右侧步骤/删除其他步骤 

-- 2.3 点击 源(Source) 

-- 2.4 点击公示栏, 修改公式为:= Excel.CurrentWorkbook() 后回车

3. 点击筛选,  过滤 为 只显示 不包含 "_不合并"的表

4, ,反选下框, 将结果的列名不使用原列名为前缀, 点击 Expand

5. 之后上传excel

6. 完成.  *** 支持增加新表后自动加入查询结果.***

添加新表后刷新,自动加入查询结果:

****先建立表: 用M 代码完成合并

1.先将所有待合并表建立成格式表(Table)

2.  数据/ 从表格 建立查询

3.  删除步骤,只保留 源(Source), 选择 合并/追加 (只是为了帮助理解M,可省略步骤)

3. 追加 本身 (只是为了帮助理解M,可省略步骤)

4. 查看/高级编辑 打开后可看见M

此处代码为高级编辑 打开


  let

    Source = Excel.CurrentWorkbook(){[Name=”tblNorth”]}[Content],

    #”Appended Query” = Table.Combine({Source, Source})

  in

    #”Appended Query”

显然, Table.Combine 语句是把前一句 定义的 源(Source)  进行了自我合并.

于是简单了, let 后面把所有需要合并的表定义加进去, 再用Table.Combine 合并起来就完成了.

**当然, 有新表加入的时候,只能手动编辑了.

此处代码:

let

    Source1 = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],

    Source2 = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],

    Source3 = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],

    Source4 = Excel.CurrentWorkbook(){[Name="Table4"]}[Content],

    #"Appended Query" = Table.Combine({Source1,Source2,Source3,Source4})

in

    #"Appended Query"

******************VBA建立格式表(Convert Range To Table in all worksheets in one workbook)*************

Sub CreatTableRenameAll() '#1 Creat Table and Rename as sheet for All sheets '


Dim wrksht As Worksheet

Dim objTable As ListObject

Application.ScreenUpdating = False


    For i = 2 To 25  '表2到表25,Excel窗口里的排序,不是VBE中顺序

        'or ActiveWorkbook.Worksheets.Count ' 或者,最大工作表数


        Set sh = ActiveWorkbook.Worksheets(i)


        If sh.Index > 0 Then 'Conditions for traversal 'For i = 1 To ActiveWorkbook.Worksheets.Count

            Debug.Print sh.Index


            TName = sh.Name


            sh.Activate


            sh.Range("A27:F39").Select  '固定区域建立为表

    'or sh.range("A1").CurrentRegion.select '或者, A1 所在数据区域建立成表

            'ActiveCell.CurrentRegion.Select '或者,当前激活的单元格所在区域建立表

            'sh.ListObjects.Add(xlSrcRange, Selection, , xlYes).Name = "a" 'Creat Table,Rename Table as sheet name '另一种建表方式

            Set objTable = sh.ListObjects.Add(xlSrcRange, Selection, , xlYes) 'Creat Table

                objTable.Name = TName

                objTable.TableStyle = None '表格式为 无格式 可选TalbeStyleLight1 等等


        End If

    Next

Application.ScreenUpdating = Ture

End Sub

*********VBA取消格式表(Convert Table to Range in all worksheets in one workbook)********

Sub UnlistTableAll() '#1 Convert Table to range for All sheets  '多表取消table


Dim wrksht As Worksheet

Dim objListObj As ListObject

Dim rList As Range

    Application.ScreenUpdating = False

    For i = 1 To ActiveWorkbook.Worksheets.Count

        Set wrksht = ActiveWorkbook.Worksheets(i)

        Set objListObj = wrksht.ListObjects(1) 'the No.1 Tabel in current worksheet

        Set rList = objListObj.Range



    'objTable.TableStyle = None '先将表格式设为无, 再转换成区域,可将区域恢复建表前的默认格式. 同时可省略下面语句:重设所有格式

      objListObj.Unlist  'Convert Table to range '取消表,转化为区域



        With rList          'Reset Table format 重设所有格式. 建表前如有格式被重设.

        .Interior.ColorIndex = xlColorIndexNone

        .Font.ColorIndex = xlColorIndexAutomatic

        .Borders.LineStyle = xlLineStyleNone

        End With


    Next


    Application.ScreenUpdating = Ture

End Sub

用时2小时.......

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容