ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 按多列的值汇总对应工作表内容并将结果按列新建表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-12-20 16:23 | 显示全部楼层 |阅读模式
各位大神:在实际应用中遇到下面的问题:1.想要按每列粘贴的内容查找到对应的工作表;2.按每列的结果新建对应的工作表,新建表名为每列列标,即A列查找的结果新建工作表A,B列查找的结果新建工作表B;3.每个新建工作表只需要留一个表头。找的代码只能实现1与3,即只能将A列的查找结果显示在汇总表里,无法实现2的需求。另外,明细表里只是举例到D列,实际应用中会存在40多列的都有值的可能,所以麻烦考虑后续的延伸问题。望各位有经验的多多指教。万分感谢!

按多列的值汇总对应工作表内容并将结果按列新建表.zip

34.41 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2022-12-20 16:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
如果查找的结果有多个,那新建的表名不是有相同的了?

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-20 17:01 | 显示全部楼层
ykcbf1100 发表于 2022-12-20 16:31
如果查找的结果有多个,那新建的表名不是有相同的了?

查找列的内容会先校验是否重复的,所以一定是不重复的,而新建的表是按列标来建,不以查找的内容来建的。

TA的精华主题

TA的得分主题

发表于 2022-12-20 17:16 | 显示全部楼层
Sub 合并工作表()
Application.ScreenUpdating = False
Dim ar As Variant
Dim d As Object, dc As Object
Set d = CreateObject("scripting.dictionary")
For Each sh In Sheets
    d(sh.Name) = ""
Next sh
With Sheets("明细")
    y = .Cells(1, Columns.Count).End(xlToLeft).Column
    For j = 1 To y
        m = 0
        r = .Cells(Rows.Count, j).End(xlUp).Row
        For i = 1 To r
            If Trim(.Cells(i, j)) <> "" Then
                mc = Trim(.Cells(i, j))
                If d.exists(mc) Then
                    m = m + 1
                    If m = 1 Then
                        If Not d.exists(j & "工作表") Then
                            Sheets(mc).Copy after:=Sheets(Sheets.Count)
                            Set sht = ActiveSheet
                            sht.Name = j & "工作表"
                        Else
                            Set sht = Sheets(j & "工作表")
                            With sht
                                .UsedRange.Clear
                                Sheets(mc).Cells.Copy .[a1]
                            End With
                        End If
                    Else
                        With Sheets(mc)
                            rs = .Cells(Rows.Count, 2).End(xlUp).Row
                            If rs >= 5 Then
                                ws = sht.Cells(Rows.Count, 2).End(xlUp).Row + 1
                                .Rows("5:" & rs).Copy sht.Cells(ws, 1)
                            End If
                         End With
                    End If
                End If
            End If
        Next i
    Next j
End With
Application.ScreenUpdating = True
MsgBox "ok!"
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-12-20 17:17 | 显示全部楼层
按每列的值查找对应表并汇总每列新建表.rar (52.21 KB, 下载次数: 9)

TA的精华主题

TA的得分主题

发表于 2022-12-20 17:40 | 显示全部楼层
  1. Sub test1()
  2.   Dim ar, i As Integer, j As Integer, k As Integer
  3.   Dim strName As String, Sht As Worksheet
  4.   Application.ScreenUpdating = False
  5.   On Error Resume Next
  6.   ar = Worksheets("明细").Range("A1").CurrentRegion
  7.   For j = 1 To UBound(ar, 2)
  8.     k = 0
  9.     strName = Split(Cells(1, j).Address, "$")(1)
  10.     Set Sht = Worksheets(strName)
  11.     If Err.Number <> 0 Then
  12.       Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = strName
  13.       Set Sht = ActiveSheet
  14.       Err.Clear
  15.     End If
  16.     Sht.Cells.Delete
  17.     For i = 1 To UBound(ar)
  18.       If Len(ar(i, j)) Then
  19.         k = k + 1
  20.         If k = 1 Then
  21.           Worksheets(ar(i, j)).Range("A1").CurrentRegion.Copy Sht.Range("A1")
  22.         Else
  23.           With Worksheets(ar(i, j)).Range("A1").CurrentRegion
  24.             Intersect(.Offset(0), .Offset(4)).Copy Sht.Range("A65536").End(3)(2)
  25.           End With
  26.         End If
  27.       End If
  28.     Next
  29.   Next
  30.   Worksheets("明细").Activate
  31.   Application.ScreenUpdating = True
  32. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-21 08:18 | 显示全部楼层
3190496160 发表于 2022-12-20 17:16
Sub 合并工作表()
Application.ScreenUpdating = False
Dim ar As Variant

非常感谢!代码的结果正是我想要的!

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-21 08:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

非常感谢你的代码!

TA的精华主题

TA的得分主题

发表于 2022-12-21 08:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
anline1739 发表于 2022-12-21 08:28
非常感谢你的代码!

s  n  o  b   !
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 04:28 , Processed in 0.042966 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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