ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 多sheet格式相同的表格汇总,求公式

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-11-4 21:07 | 显示全部楼层 |阅读模式
本帖最后由 gwgha 于 2024-11-4 22:03 编辑

附件中上数1表、上数22表、上数3表等sheet的格式类似,有区别的地方是姓名行和工序列可能发生变化或无限延申。
还有就是sheet会变多,如增加上数8821表、上数8822表、上数8823表,表格内容和上数1表格式相同。我在演示数据中只增加了上数8821表。
image.jpg image.png
现需要对这样的表汇总,汇总的效果见sheet1,如果新增加了sheet,在汇总sheet里也能自动汇总。
image.jpg

不自动是否可以实现,如可以,感激不尽。
谢谢各位大神了。

20241104新0.zip

27.13 KB, 下载次数: 15

TA的精华主题

TA的得分主题

发表于 2024-11-4 21:24 | 显示全部楼层
这种问题,要真正做到灵活通用,用代码会好些的吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-4 22:09 | 显示全部楼层
3190496160 发表于 2024-11-4 21:24
这种问题,要真正做到灵活通用,用代码会好些的吧

之前有解决方法,就是函数很复杂,想看看能否简化一些。

TA的精华主题

TA的得分主题

发表于 2024-11-5 07:12 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
gwgha 发表于 2024-11-4 22:09
之前有解决方法,就是函数很复杂,想看看能否简化一些。

sql应该语句比较短。

TA的精华主题

TA的得分主题

发表于 2024-11-5 08:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
gwgha 发表于 2024-11-4 22:09
之前有解决方法,就是函数很复杂,想看看能否简化一些。

上数1到上数8823,有多少个分表,再用函数来解决,你不怕函数折腾好后文件也卡死没商量了吗

TA的精华主题

TA的得分主题

发表于 2024-11-5 09:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub 多表汇总()
Dim ar As Variant
Dim sh As Worksheet
Dim i As Long
Dim br()
ReDim br(1 To 100000, 1 To 5)
For Each sh In Sheets
    If InStr(sh.Name, "上数") > 0 Then
        r = sh.Cells(Rows.Count, 2).End(xlUp).Row
        y = sh.Cells(6, Columns.Count).End(xlToLeft).Column
        If r > 6 Then
            ar = sh.Range(sh.Cells(5, 2), sh.Cells(r, y))
            For j = 4 To UBound(ar, 2)
                If ar(2, j) <> "" Then
                    For i = 3 To UBound(ar)
                        If ar(i, j) <> "" Then
                            n = n + 1
                            br(n, 1) = ar(2, j)
                            br(n, 2) = ar(1, 1)
                            br(n, 3) = ar(i, 1)
                            br(n, 4) = ar(i, 2)
                            br(n, 5) = ar(i, j)
                        End If
                    Next i
                End If
            Next j
        End If
    End If
Next sh
If n = "" Then MsgBox "没有需要汇总的数据!": End
With Sheets("汇总")
    .[a1].CurrentRegion.Offset(1).Borders.LineStyle = 0
    .[a1].CurrentRegion.Offset(1) = Empty
    .[a2].Resize(n, UBound(br, 2)) = br
    .[a2].Resize(n, UBound(br, 2)).Borders.LineStyle = 1
End With
MsgBox "ok!"
End Sub

TA的精华主题

TA的得分主题

发表于 2024-11-5 09:56 | 显示全部楼层
20241104新0.rar (34.57 KB, 下载次数: 3)

TA的精华主题

TA的得分主题

发表于 2024-11-5 11:54 | 显示全部楼层
在汇总表上将需要汇总进来的表建立一个列表

=LET(r,DROP(REDUCE("","上数"&UNIQUE(I2:I999,,1)&"表",LAMBDA(m,n,LET(fx,LAMBDA(x,TOCOL(IF(INDIRECT(n&"!E7:ZZ999")<>0,INDIRECT(n&"!"&x),1/0),2)),bw,INDIRECT(n&"!B5"),VSTACK(m,IFNA(HSTACK(fx("E6:ZZ6"),bw,fx("B7:B999"),fx("C7:C999"),fx("E7:ZZ999")),bw))))),1),VSTACK({"姓名","款号","工序","工价","数量"},SORT(r,{1,2,3})))

20241104公式.zip

30.64 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2024-11-5 11:58 | 显示全部楼层
本帖最后由 edwin11891 于 2024-11-5 15:46 编辑


优化一下,实现:
1. 只汇总工作表名称为“上数**”开头的工作表;
2. 工作表内只有一个区域数据(如示例),开始列(如B列)、结束列(如I列)均由公式自动判断;
3. 增加、删除数据页,均不需要修改公式,只需要保持数据样式(顶行为类型,下面的数据区,且数据区第一行为标题;第三列为总数),公式均自动汇总。
  1. =LET(fx,LAMBDA(x,y,TOCOL(IF(y<>"",x,1/0),2,1)),fy,LAMBDA(XX,YY,ZZ,SS,Srd,IFNA(HSTACK(fx(XX,Srd),YY,fx(ZZ,Srd),fx(SS,Srd),fx(Srd,Srd)),YY)),sht,SHEETSNAME(,1,1),ShName,FILTER(sht,LEFT(sht,2)="上数"),sInfo,REDUCE("",ShName,LAMBDA(x,y,VSTACK(x,LET(Rc,INDIRECT("'"&y&"'!A1:Z100"),Nr,BYCOL(Rc,COUNTA),nLeft,MIN(MAP(SEQUENCE(25),LAMBDA(x,IF(INDEX(Nr,,x)=(INDEX(Nr,,x+1)+1),x,999)))),sCol,SUBSTITUTE(ADDRESS(1,nLeft,4),1,),Src,INDIRECT("'"&y&"'!"&sCol&"1:"&sCol&"100"),nType,XMATCH(1=1,Src<>"",,1),nEnd,LOOKUP("座",Src,ROW(1:100)),sEnd,SUM(N(INDIRECT("'"&y&"'!"&sCol&(1+nType)&":Z"&(1+nType))<>"")),sData,OFFSET(Src,nType,,nEnd-nType,sEnd),Sa,TAKE(TAKE(sData,,3-sEnd),1),Sb,DROP(TAKE(sData,,1),1),Sc,DROP(CHOOSECOLS(sData,2),1),Sd,OFFSET(Src,nType-1,,1,),Se,DROP(TAKE(sData,,3-sEnd),1),Sf,fy(Sa,Sd,Sb,Sc,Se),Sf)))),SORT(DROP(sInfo,1)))
复制代码



微信图片_20241105115423.png

TA的精华主题

TA的得分主题

发表于 2024-11-5 12:23 | 显示全部楼层
跟还在审核中的上一贴本质思路上类似:
  1. =LET(fx,LAMBDA(x,y,TOCOL(IF(y<>"",x,1/0),2,1)),fy,LAMBDA(XX,YY,ZZ,SS,Srd,IFNA(HSTACK(fx(XX,Srd),YY,fx(ZZ,Srd),fx(SS,Srd),fx(Srd,Srd)),YY)),sht,SHEETSNAME(,1,1),ShName,FILTER(sht,LEFT(sht,2)="上数"),sInfo,REDUCE("",ShName,LAMBDA(x,y,VSTACK(x,LET(Src,INDIRECT(y&"!B1:B100"),nType,XMATCH(1=1,Src<>"",,1),nEnd,LOOKUP("座",Src,ROW(1:100)),sEnd,SUM(N(INDIRECT(y&"!B"&(1+nType)&":Z"&(1+nType))<>"")),sData,OFFSET(Src,nType,,nEnd-nType,sEnd),Sa,TAKE(TAKE(sData,,3-sEnd),1),Sb,DROP(TAKE(sData,,1),1),Sc,DROP(CHOOSECOLS(sData,2),1),Sd,OFFSET(Src,nType-1,,1,),Se,DROP(TAKE(sData,,3-sEnd),1),Sf,fy(Sa,Sd,Sb,Sc,Se),Sf)))),SORT(DROP(sInfo,1)))
复制代码
微信图片_20241105122345.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-27 05:05 , Processed in 0.049457 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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