ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求复杂表格的数据提取

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-7-6 10:43 | 显示全部楼层 |阅读模式
表格是软件里面导出来的,有固定格式,表格的层级结构是两层的,需要在目标提取表里面转换成多层级
PixPin_2024-07-06_10-42-15.jpg
数据样本.rar (21.15 KB, 下载次数: 13)

TA的精华主题

TA的得分主题

发表于 2024-7-6 12:34 | 显示全部楼层
本帖最后由 quqiyuan 于 2024-7-6 15:44 编辑

参与一下,供参考。。。
image.png
image.png
image.png

数据样本.zip

34.45 KB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2024-7-6 12:35 | 显示全部楼层
代码如下,仅供参考。。。
Sub test()
    arr = Sheet1.UsedRange
    ReDim brr(1 To UBound(arr), 1 To 6)
    Set d = CreateObject("scripting.dictionary")
    For i = 2 To UBound(arr)
        If InStr(arr(i, 1), "工程名称") Then
            s = Split(arr(i, 1), "工程名称:")(1)
            If InStr(s, "【") Then
                ss = Split(s, "【")(0)
                sss = Replace(Split(s, "【")(1), "】", "")
                If Not d.exists(ss) Then
                    Set d(ss) = CreateObject("scripting.dictionary")
                    d(ss)(sss) = ""
                    n = n + 1
                    brr(n, 1) = WorksheetFunction.Text(d.Count, "[dbnum1]")
                    brr(n, 2) = ss
                    n = n + 1
                    brr(n, 1) = d(ss).Count
                    brr(n, 2) = sss
                End If
            ElseIf Not d(ss).exists(s) Then
                d(ss)(s) = ""
                n = n + 1
                brr(n, 1) = d(ss).Count
                brr(n, 2) = s
            End If
        ElseIf IsNumeric(arr(i, 1)) And Len(arr(i, 1)) <> 0 Then
            n = n + 1
            brr(n, 1) = d(ss).Count & "." & arr(i, 1)
            brr(n, 2) = arr(i, 3)
            brr(n, 3) = arr(i, 5)
            brr(n, 4) = arr(i, 6)
            brr(n, 5) = arr(i, 7)
            brr(n, 6) = arr(i, 8)
        End If
    Next
    Set d = Nothing
    With Sheet3
        .UsedRange.Clear
        .[a1].Resize(, 6) = [{"序号","项目名称","计量单位","工程量","综合单价","合价"}]
        .[a2].Resize(n, 6) = brr
        With .UsedRange
            .Borders.LineStyle = 1
            .HorizontalAlignment = xlCenter
            .Columns.AutoFit
        End With
        .Activate
    End With
    Beep
End Sub

TA的精华主题

TA的得分主题

发表于 2024-7-6 12:43 | 显示全部楼层
借楼练一下 PQ。


用PQ完美解决。因为数据太脏,清理好麻烦

不过,自己写完代码,自己都要佩服自己。REPLACEVALUE 套REPLACEVALUE,  group 套 group.

有没PQ大神帮我看看,我自学半年的成果!!!!!!!!
捕获2.PNG
捕获.PNG

7-6-1.rar

30.59 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2024-7-6 13:08 | 显示全部楼层
WPS里的JSA练习一下——


微信截图_20240706130547.png


240706_数据样本.rar

23.36 KB, 下载次数: 4

用WPS打开并启用宏

TA的精华主题

TA的得分主题

发表于 2024-7-6 14:32 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-6 15:27 | 显示全部楼层

厉害,我现在VBA都没搞明白,整准备等10月底把执业考试弄完了,学一下PQ,因为工作涉及到很多数据的清洗和各种表格数据的提取
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 23:37 , Processed in 0.047446 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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