ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助:按列提取汇总(格式不变)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-12-20 17:32 | 显示全部楼层 |阅读模式
求助:按列提取.zip (25.97 KB, 下载次数: 18)

TA的精华主题

TA的得分主题

发表于 2024-12-20 17:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
参与一下。

求助:按列提取.rar

39.42 KB, 下载次数: 10

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-12-20 18:15 | 显示全部楼层
是不是要把多表数据合并在一起并且字段名不能错位?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-20 18:19 | 显示全部楼层
列名是自己在第二行任何位置自有写的,放在那一列都可以

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-20 18:49 | 显示全部楼层
感谢chxw68老师的出手,已经能满足要求。就是要注意一个班不能有重名的,有重名就不能统计了。假如能把工作表名在右侧的某单独列显示出来就更好了。总之万分感谢

TA的精华主题

TA的得分主题

发表于 2024-12-20 19:23 | 显示全部楼层
hyhsql 发表于 2024-12-20 18:49
感谢chxw68老师的出手,已经能满足要求。就是要注意一个班不能有重名的,有重名就不能统计了。假如能把工作 ...

同班学生不能有同名的,不同班的学生可以有同名的。

TA的精华主题

TA的得分主题

发表于 2024-12-20 19:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
修改好了。

求助:按列提取.rar

39.8 KB, 下载次数: 12

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-12-20 20:04 | 显示全部楼层
参与一下。。。

502c82f4-9104-4b25-b9ad-ab7574c1a4f1.png

求助:按列提取.zip

37.92 KB, 下载次数: 6

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-12-20 20:04 | 显示全部楼层
参与一下。。。

  1. Sub ykcbf()   '//2024.12.20
  2.     Application.ScreenUpdating = False
  3.     Application.DisplayAlerts = False
  4.     Set d = CreateObject("Scripting.Dictionary")
  5.     ReDim brr(1 To 10000, 1 To 100)
  6.     m = 1: n = 2
  7.     brr(1, 1) = "班级": brr(1, 2) = "姓名"
  8.     On Error Resume Next
  9.     For Each sht In Sheets
  10.         If sht.Name Like "[A-Z]*" Then
  11.             arr = sht.UsedRange
  12.             For i = 2 To UBound(arr)
  13.                 If arr(i, 1) Like "[A-Z]*" Then
  14.                     m = m + 1
  15.                     brr(m, 1) = arr(i, 1)
  16.                     brr(m, 2) = arr(i, 2)
  17.                     For j = 3 To UBound(arr, 2)
  18.                         s = arr(2, j)
  19.                         If Not d.exists(s) Then
  20.                             n = n + 1
  21.                             d(s) = n
  22.                             brr(1, n) = s
  23.                         End If
  24.                         c = d(arr(2, j))
  25.                         brr(m, c) = brr(m, c) + arr(i, j)
  26.                     Next
  27.                 End If
  28.             Next
  29.         End If
  30.     Next
  31.     With Sheets("按要求多表提取")
  32.         .UsedRange.Offset(1).Clear
  33.         .[a2].Resize(1, n).Interior.Color = 49407
  34.         With .[a2].Resize(m, n)
  35.             .Value = brr
  36.             .Borders.LineStyle = 1
  37.             .HorizontalAlignment = xlCenter
  38.             .VerticalAlignment = xlCenter
  39.             With .Font
  40.                 .Name = "微软雅黑"
  41.                 .Size = 11
  42.             End With
  43.         End With
  44.     End With
  45.     Application.ScreenUpdating = True
  46.     MsgBox "OK!"
  47. End Sub

复制代码


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-12-20 20:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Option Explicit
Sub TEST6()
    Dim ar, br, i&, j&, k&, r&, dic As Object, iPosCol&, iPosRow&, strKey$
   
    Application.ScreenUpdating = False
    Set dic = CreateObject("Scripting.Dictionary")
   
    With Worksheets(1)
        With [A1].CurrentRegion
            .Offset(3).Clear
            ar = .Resize(10 ^ 3).Value
            r = 2
        End With
        For j = 2 To UBound(ar, 2)
            If Len(ar(2, j)) Then dic(ar(2, j)) = j
        Next j
        For k = 2 To Worksheets.Count
            With Worksheets(k)
                With Range(.[A1], .UsedRange)
                    br = Intersect(.Offset(), .Offset(1))
                    For j = 3 To UBound(br, 2)
                        If dic.exists(br(1, j)) Then
                            iPosCol = dic(br(1, j))
                            For i = 2 To UBound(br)
                                If br(i, 1) Like "C*" Then
                                    strKey = br(i, 1) & "," & br(i, 2)
                                    If Not dic.exists(strKey) Then
                                         r = r + 1
                                         dic(strKey) = r
                                    End If
                                    iPosRow = dic(strKey)
                                    ar(iPosRow, 1) = br(i, 1): ar(iPosRow, 2) = br(i, 2)
                                    ar(iPosRow, iPosCol) = br(i, j)
                                End If
                            Next i
                        End If
                    Next j
                End With
            End With
        Next k
        With .[A1].Resize(r, UBound(ar, 2))
            .Value = ar
           .Borders.LineStyle = xlContinuous
        End With
    End With
   
    Set dic = Nothing
    Application.ScreenUpdating = True
    Beep
End Sub



评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 16:11 , Processed in 0.040116 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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