ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 多个不规则的数据表怎么用VBA汇总

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-2-10 09:10 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 jiaqitang 于 2023-2-10 09:23 编辑

我的工作簿有几张店铺的数据表。想把数据都汇集在一张总表上。店铺数据的样式有两种,分别在店铺A,店铺B里展现(B中多了一个项REVENUE的数据)。


我把希望汇总的样式贴在了汇总表里。如果店铺某产品类别下没数据,那在汇总表里不需要显示这一类别(显示空值或0也可以)。工作簿里除了汇总,信息,备注三个SHEET,其它的SHEET都是店铺表,一共10几张,但样式就两种,像AB那样的。

这样复杂的,VBA能实现吗?

store.rar

14.99 KB, 下载次数: 31

TA的精华主题

TA的得分主题

发表于 2023-2-10 09:26 | 显示全部楼层
能,但你要把特殊情况说明,现在提问的人很奇怪,只说个大概,别人写好了就一堆问题了,然后就是各种修改。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-10 09:30 | 显示全部楼层
都差不多说明了。也是在摸索。没有模板,也是想像出来的。

TA的精华主题

TA的得分主题

发表于 2023-2-10 09:36 | 显示全部楼层
做是可以做到的。
参考昨天你问的这个帖子案例,实现的代码思路是差不多的
https://club.excelhome.net/thread-1652931-1-1.html

但是我多问一句,“店铺”表的格式都是固定的吗,最多8个地区/产品类别?不会随意增加/缩减么?位置会变动吗,比如现在是固定B3/B22开头的,会不会有个别表从A1/C40开始做新表头?

如果你给出的案例很模糊,那么代码只能限定适应你所给到的案例情况,并不能复制粘贴应用到其他更宽泛的实例上去。
如果你想完整应用到自己的实例上,要么学习一下别人的代码到底是怎么实现的思路,试着理解代码思路后自己改写一下。要么把实例可能遇到的情况都做进案例里,把复杂情况说明清楚,让别人知道你所想要达到的目标到底是什么。

因为可能你多补充一句“店铺表里可能不止有8个小表头,表头位置不确定,小表的行数不确定”,
别人可能就只能推翻之前写的几十行代码,重新构思代码方案,思考如何找表头、如何定位、如何判断兼容性,代码量可能翻倍或几何倍数增加。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-10 09:37 | 显示全部楼层
都说明了。我也是在摸索,没有模板。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-10 09:45 | 显示全部楼层
moonlit123 发表于 2023-2-10 09:36
做是可以做到的。
参考昨天你问的这个帖子案例,实现的代码思路是差不多的
https://club.excelhome.net/t ...

我明白了大佬们的意思了。

店铺表格样式固定。目前就 8个地区/类别,每个店铺都是一样的地区/类别,8个。 就算以后增加到 16个,每个店铺也是一样的,不会几个多另几个少。这是模板。都是固定 B3/B22开头。

TA的精华主题

TA的得分主题

发表于 2023-2-10 10:06 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-2-10 10:33 | 显示全部楼层
Sub 汇总()
Application.ScreenUpdating = False
Dim br As Variant
Dim d As Object
Set d = CreateObject("scripting.dictionary")
Dim ar()
ReDim ar(1 To 10000, 1 To 6)
With Sheets("汇总")
    .[a1].CurrentRegion.Offset(1) = Empty
    For Each sh In Sheets
        If sh.Index > 3 Then
            br = sh.UsedRange
            mc = sh.Name
            For i = 1 To UBound(br) Step 19
                For j = 1 To UBound(br, 2) - 1
                    If Trim(br(i + 2, j)) = "Accounting Number" Then
                        For s = i + 3 To i + 17
                            If s <= UBound(br) Then
                                If Trim(br(s, j)) <> "" Then
                                    n = n + 1
                                    ar(n, 1) = sh.Name
                                    ar(n, 2) = br(i, j)
                                    ar(n, 3) = br(i + 1, j)
                                    ar(n, 4) = br(s, j)
                                    If Trim(br(i + 2, j + 1)) = "Revenue" Then  ''
                                        ar(n, 5) = br(s, j + 1)
                                        ar(n, 6) = br(s, j + 2)
                                    ElseIf Trim(br(i + 2, j + 1)) = "Expense" Or Trim(br(i + 2, j + 1)) = "Payment" Then
                                        ar(n, 5) = ""
                                         ar(n, 6) = br(s, j + 1)
                                    End If
                                End If
                            End If
                        Next s
                    End If
                Next j
            Next i
        End If
    Next sh
    .[a2].Resize(n, 6) = ar
End With
Application.ScreenUpdating = True
MsgBox "ok!"
End Sub

TA的精华主题

TA的得分主题

发表于 2023-2-10 10:34 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-2-10 10:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
store.rar (24.14 KB, 下载次数: 19)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 05:31 , Processed in 0.039144 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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