ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: jjmysjg

[求助] 多层合并表头的工作簿中的工作表能否实现汇总

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-2 19:42 | 显示全部楼层
yylucke 发表于 2023-4-2 18:45
请参见附件,小计的公式我没有写,你自己弄吧。

太好了,表头自动筛选到汇总表。
有几个求助:
1、只把数据源中的各表2-4行表头不重复的筛选到汇总表,各表合计列也作为数字合并进入。
2、数据源中各个表头对应汇总表筛选出的表头、按姓名汇入金额
谢谢大师,只看代码就知道这个帖子的复杂程度了

TA的精华主题

TA的得分主题

发表于 2023-4-3 09:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 yylucke 于 2023-4-3 09:54 编辑

更新:

1、增加小计公式自动生成
2、修正序号多了3行的错误
新建文件夹.rar (84.27 KB, 下载次数: 6)

你自己最好比对结果,看看有无窜行,若有,你再回复我修正或者你你自己修改代码。

另,思路:
1、用字典记录表头和数据。
2、字典采用3层字典结构(参照3行标题行),且最末级采用数组作为字典的Item。这样想象:把数据源的数据每列想象成一个字典的分支。
3、没有采用数据源的合计列,因为不同表的子项不同,有子项的增加,导致合计列后面有子项,后期调整麻烦,不如舍去,用代码生成合计。
4、【注意】数据源表必须有几个特征:(1)A1单元格必须是“工资发放明细表”,否则视为非工资表,而舍弃。(2),表头是4行(3)合计列必须用合计列,不要改成别的名称,比如“XX合计"、”XX小计“、”小计“,否则,会被复制到汇总表,造成混乱。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-3 10:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 jjmysjg 于 2023-4-3 10:56 编辑
yylucke 发表于 2023-4-3 09:26
更新:

1、增加小计公式自动生成

谢谢大侠的帮助!
1、工资B工作簿F表,字段列比别的表少,汇总的时候2-4行的表头筛选进来了,但表头以下的数据没有汇总进来。
2、数据源表中的第4层字段“合计”,能否把他看作一个普通的末级字段名,放到汇总表所属2、3层字段的下面。这样的目的是:类似这样的汇总,数据源的格式不一定是这样的名称,用这个代码能汇总的通用性就强些,不知都能否达到。
感谢大师的帮助!

TA的精华主题

TA的得分主题

发表于 2023-4-3 17:25 | 显示全部楼层
本帖最后由 yylucke 于 2023-4-3 17:26 编辑
jjmysjg 发表于 2023-4-3 10:53
谢谢大侠的帮助!
1、工资B工作簿F表,字段列比别的表少,汇总的时候2-4行的表头筛选进来了,但表头以下 ...

修正了取数串行的问题。

新建文件夹.rar (85.49 KB, 下载次数: 12)



2、数据源表中的第4层字段“合计”,能否把他看作一个普通的末级字段名,放到汇总表所属2、3层字段的下面
不这样处理:
没有采用数据源的合计列,因为不同表的子项不同,有子项的增加,导致合计列后面有子项,后期调整麻烦,不如舍去,用代码生成合计。


TA的精华主题

TA的得分主题

发表于 2023-4-6 09:26 | 显示全部楼层
cjc209 发表于 2023-4-2 11:13
你的汇总表是不是已经有表头 还是要自动生成表头?

老师您好!
请你帮忙:下面是我录制的宏的内容,单独运行没有问题。
    Sheets("成绩查询").Select
    Range("AA5:AA69").Select
    Selection.Copy '复制文本
    Range("Z5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=F
alse, Transpose:=False '粘贴数值
    Range("Z5").Select
可是我加一个工作表事件,为什么就运行不了?
Private Sub Worksheet_Change(ByVal Target As Range) '工作表触发事件
    Set Myrng = Range("A1")   
    Sheets("成绩查询").Select
    Range("AA5:AA69").Select'老是从这个地方开始卡住了
    Selection.Copy '复制文本
    Range("Z5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False '粘贴数值
    Range("Z5").Select
End Sub

TA的精华主题

TA的得分主题

发表于 2023-4-6 09:26 | 显示全部楼层
gwjkkkkk 发表于 2023-4-2 17:41
各种工作表表头不一样,定位比较难,字段有重复值,也无法通过字典来定位。。。

老师您好!
请你帮忙:下面是我录制的宏的内容,单独运行没有问题。
    Sheets("成绩查询").Select
    Range("AA5:AA69").Select
    Selection.Copy '复制文本
    Range("Z5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=F
alse, Transpose:=False '粘贴数值
    Range("Z5").Select
可是我加一个工作表事件,为什么就运行不了?
Private Sub Worksheet_Change(ByVal Target As Range) '工作表触发事件
    Set Myrng = Range("A1")   
    Sheets("成绩查询").Select
    Range("AA5:AA69").Select'老是从这个地方开始卡住了
    Selection.Copy '复制文本
    Range("Z5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False '粘贴数值
    Range("Z5").Select
End Sub

TA的精华主题

TA的得分主题

发表于 2023-4-6 17:06 | 显示全部楼层
以此例的数据写了一个例子,
详见:
https://club.excelhome.net/forum ... 16&pid=11223272



那就以这个帖子的内容写一个例子吧:


https://club.excelhome.net/thread-1658608-1-1.html

文件夹内的工作簿,其中的工作表数量名称不一,第2-4行是合并单元格的字段、且顺序名称不一。

    用VBA将所有簿中所有表的不重复字段(合并单元格形式)筛选到汇总表,按姓名、分字段进行合并及汇总。

   麻烦各位看看能否达到这样的目的。

    谢谢各位大师!






原始数据和结果数据:
datas.zip (25.3 KB, 下载次数: 0)

以第一个sheet的数据为例,要提取出不固定位置的数据,只需要一句SQL:
  • select
  • `序号`
  • `姓    名`
  • `职务工资` -- 如果有多种列头写法,用正则:`(职务工资|岗位工资|职业工资)`
  • `级别工资`
  • `基本工资合计`
  • `艰苦边远地区津贴`
  • `税务征收津贴`
  • `移动通讯费用补贴`
  • `独生子女费`
  • `回族伙食补贴`
  • `国家统一规定的津贴补贴合计`
  • `生活性补贴`
  • `工作性补贴`
  • `^改革性补贴$`-- 区别于`月增改革性补贴13.5`
  • `^津贴补贴合计$`--区别于`国家统一规定的津贴补贴合计`
  • `月增改革性补贴13.5`
  • `2017年提高改革性补贴`
  • `车改补贴`
  • `工资总额`
  • `养老保险8`
  • `职业年金4`
  • `住  房公积金     `
  • `医疗保险`
  • `2021年7月应扣个税`
  • `2021年税务制服个人部分`
  • `2021年大病医疗保险`
  • `代扣及返还项目合    计`
  • `实发金额`
  • from excels;


[color=rgb(51, 102, 153) !important]复制代码





如果要做汇总计算,还可以select sum(xx) from (上面的sql) 嵌套sql。
或者insert into到结果表后再汇总等。熟悉sql的很容易理解。

TA的精华主题

TA的得分主题

发表于 2023-4-7 06:01 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
jjmysjg 发表于 2023-4-3 10:53
谢谢大侠的帮助!
1、工资B工作簿F表,字段列比别的表少,汇总的时候2-4行的表头筛选进来了,但表头以下 ...

工资B工作簿F表,字段列比别的表

没发现少啊?
Screenshot_2023-04-07-05-55-09-343_cn.uujian.browser.jpg
原来是F列,是没有对齐,如果是对齐,就方便一点。
Screenshot_2023-04-07-06-01-12-411_cn.uujian.browser.jpg


字段如果缺少一点,最好还是在来源表F表上。还有。。。没有还有了,哈哈

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-7 06:17 来自手机 | 显示全部楼层
kaixinbuy 发表于 2023-4-6 17:06
以此例的数据写了一个例子,
详见:
https://club.excelhome.net/forum.php?mod=redirect&goto=findpost& ...

这个在2007上怎么执行呢?

TA的精华主题

TA的得分主题

发表于 2023-4-7 07:06 | 显示全部楼层
jjmysjg 发表于 2023-4-7 06:17
这个在2007上怎么执行呢?

不是在Excel中运行。

帖子的开头说明了。
https://club.excelhome.net/threa ... tml?_dsign=1854dee5

Excel表格是不规范的,格式不统一的表格数据,对这些数据进行抽取,整合非常困难。

例如,在我们的审计项目中,需要合并,抽取,整合上万个表头和内容都不规范的非结构化Excel报价单文件。


这些Excel文档存在的困难点包括:
1.布局不规范:每个Excel文件可能包含数十个Sheet(最多可能40-50个sheet),每个Sheet可能包含不固定位置,不固定表头的不固定表格
(同一个表头字段可能有多种写法,例如产品名的表头可能有:产品名称,产品名,ProductName,名称,商品名,MeteralName等)。
2.表头不统一:合并单元格表头、多栏、多行表头、表头顺序不一致、表头写法描述不一致
3.内容不规范:同一个公司名、项目名、产品名、产品规格或属性有多种写法和描述方式

基于手工复制粘贴整理这些数据,几乎无法完成任务。最终我们基于 tablemerge.com 非结构化文档结构化抽取模型,使用SQL语言,在数万个sheet上运行SQL抽取:
自动识别复杂表头和行列:
     通过定制的SQL解析引擎和正则表达式解析引擎,在SQL中嵌入正则表达式实现抽取
自动识别合并单元格、多栏、多行表头
自动分析文档布局和版面,自动将文档分块和表格抽取
一个SQL在上万个不规范的非结构化Excel文档上运行
导出成结构化数据

下面是一个SQL语法和例子:在SQL中模糊抽取和匹配需要的列名:稍微看过SQL的同学都能看懂。
INSERT into tb_results  --抽取结果保存到数据库表

SELECT name,--抽取字段表头,最大1000个字段name as fieldname,--传统的SQL字段,匹配Excel表头
`regular_expression` as fieldname,--用正则匹配多个可能的表头值,例如(产品名称|产品名|商品名|ProductName)
`regular_expression`.match(text) as fieldname,--基于文本匹配表头(默认不写match部分就是匹配文本)
`regular_expression`.match(text).output(color) as fieldname,--基于字体颜色去匹配表头
`regular_expression`.match(text).offset(1,0).output(color) as fieldname,--提取某个匹配单元格的右边单元格的值

FROM excels;--选择需要抽取的1-1000个sheet,同时运行数据抽取
复制代码

(注意:这个SQL是只能在tablemerge.com客户端才能支持的语法。在传统数据库中是不能运行的)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-29 06:21 , Processed in 0.049322 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表