ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 同一工作簿下多个表格数据汇总到一个表,且删除重复身份证号码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-12-6 11:08 | 显示全部楼层 |阅读模式
同一工作簿下有不同学生的身份证号码,有多次出现的,要在汇总表中自动汇总身份证号码,且要自动删除重复身份证号

名册.zip

16.2 KB, 下载次数: 25

TA的精华主题

TA的得分主题

发表于 2019-12-6 13:44 | 显示全部楼层
本帖最后由 约定的童话 于 2019-12-6 13:55 编辑

把四个表去重之后汇总到第一个表?
20191206_135458.gif

TA的精华主题

TA的得分主题

发表于 2019-12-6 14:05 | 显示全部楼层
在PQ中试了一下,很方便。

TA的精华主题

TA的得分主题

发表于 2019-12-7 11:36 | 显示全部楼层
试试这个可达到您要的需求不?
  1. ub 合并()
  2.   Dim sht As Worksheet, i As Byte, x%, j%, n% '声明变量
  3.   Application.ScreenUpdating = False  '关闭屏幕刷新
  4.     On Error Resume Next  '当程序出错时继续执行下一句
  5.   Application.DisplayAlerts = False  '关闭提示(删除工作表时会有提示)
  6.   Worksheets("汇总表").UsedRange.ClearContents  '清空原表的内容
  7.   For Each sht In Worksheets  '遍历活动工作簿中的所有工作表
  8.     If sht.Name <> "汇总表" Then  '如果sht的名字不等于“总表”
  9.       '如果工作表A列有值(忽略空表或者A列无值的工作表)
  10.       If WorksheetFunction.CountA(sht.Range("A:A")) > 0 Then
  11.         i = i + 1  '累加变量
  12.         If i = 1 Then  '如果变量i的值等于1
  13.           sht.UsedRange.Copy  '复制sht工作表的已用区域
  14.           Range("a1").PasteSpecial xlPasteAllUsingSourceTheme  '粘贴到活动工作表的A1单元格
  15.           Range("a1").PasteSpecial xlPasteValues  '再次粘贴,只粘贴值(防止合并前的公式的值不一致)
  16.           Range("a1").PasteSpecial xlPasteColumnWidths  '再次粘贴,只粘贴列宽
  17.   x = sht.Cells(Rows.Count, 1).End(xlUp).Row   '目标工作表行总数
  18.   j = Worksheets("总表").Cells(Rows.Count, 1).End(xlUp).Row ' 活动工作表行总数
  19.   
  20. Worksheets("汇总表").Range("I2" & ":" & "I" & x).Value = sht.Name
  21.         Else
  22.           sht.UsedRange.Offset(1, 0).Copy  '复制sht工作表的已用区域(排除标题行)
  23.           With Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)  '引用A列最后一个非空行的下一行
  24.             .PasteSpecial xlPasteAllUsingSourceTheme  '粘贴
  25.             .PasteSpecial xlPasteValues  '再次粘贴,只粘贴列宽
  26.             .PasteSpecial xlPasteColumnWidths  '再次粘贴,只粘贴列宽
  27.          End With
  28.   x = sht.Cells(Rows.Count, 1).End(xlUp).Row   '目标工作表行总数
  29.   j = Worksheets("汇总表").Cells(Rows.Count, 1).End(xlUp).Row  ' 活动工作表行总数
  30. Worksheets("汇总表").Range("I" & j - x + 2 & ":" & "I" & j).Value = sht.Name  '添加哪个工作中考过行
  31.       
  32.         End If
  33.       End If
  34.     End If
  35.   Next sht
  36.   ActiveSheet.Range("$A$1:$p$" & j).RemoveDuplicates Columns:=1, Header:=xlNo    '去除重复项
  37.   Application.ScreenUpdating = True  '恢复屏幕刷新
  38. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2019-12-7 11:40 | 显示全部楼层
试试这个能达到你的需求不

名册完成.rar

29.03 KB, 下载次数: 26

TA的精华主题

TA的得分主题

发表于 2019-12-7 11:41 | 显示全部楼层
Sub 合并()
  Dim sht As Worksheet, i As Byte, x%, j%, n% '声明变量
  Application.ScreenUpdating = False  '关闭屏幕刷新
    On Error Resume Next  '当程序出错时继续执行下一句
  Application.DisplayAlerts = False  '关闭提示(删除工作表时会有提示)
  Worksheets("汇总表").UsedRange.ClearContents  '清空原表的内容
  For Each sht In Worksheets  '遍历活动工作簿中的所有工作表
    If sht.Name <> "汇总表" Then  '如果sht的名字不等于“总表”
      '如果工作表A列有值(忽略空表或者A列无值的工作表)
      If WorksheetFunction.CountA(sht.Range("A:A")) > 0 Then
        i = i + 1  '累加变量
        If i = 1 Then  '如果变量i的值等于1
          sht.UsedRange.Copy  '复制sht工作表的已用区域
          Range("a1").PasteSpecial xlPasteAllUsingSourceTheme  '粘贴到活动工作表的A1单元格
          Range("a1").PasteSpecial xlPasteValues  '再次粘贴,只粘贴值(防止合并前的公式的值不一致)
          Range("a1").PasteSpecial xlPasteColumnWidths  '再次粘贴,只粘贴列宽
  x = sht.Cells(Rows.Count, 1).End(xlUp).Row   '目标工作表行总数
  j = Worksheets("总表").Cells(Rows.Count, 1).End(xlUp).Row ' 活动工作表行总数
  
Worksheets("汇总表").Range("I2" & ":" & "I" & x).Value = sht.Name
        Else
          sht.UsedRange.Offset(1, 0).Copy  '复制sht工作表的已用区域(排除标题行)
          With Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)  '引用A列最后一个非空行的下一行
            .PasteSpecial xlPasteAllUsingSourceTheme  '粘贴
            .PasteSpecial xlPasteValues  '再次粘贴,只粘贴列宽
            .PasteSpecial xlPasteColumnWidths  '再次粘贴,只粘贴列宽
         End With
  x = sht.Cells(Rows.Count, 1).End(xlUp).Row   '目标工作表行总数
  j = Worksheets("汇总表").Cells(Rows.Count, 1).End(xlUp).Row  ' 活动工作表行总数
Worksheets("汇总表").Range("I" & j - x + 2 & ":" & "I" & j).Value = sht.Name  '添加哪个工作中考过行
      
        End If
      End If
    End If
  Next sht
  ActiveSheet.Range("$A$1:$p$" & j).RemoveDuplicates Columns:=1, Header:=xlNo    '去除重复项
  Application.ScreenUpdating = True  '恢复屏幕刷新
End Sub

说明:这是在罗老师代码基础上改的

TA的精华主题

TA的得分主题

发表于 2019-12-8 16:42 | 显示全部楼层
Sub CC()
Set D = CreateObject("SCRIPTING.DICTIONARY")
Set cn = CreateObject("ADODB.CONNECTION")
cn.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;EXTENDED PROPERTIES=EXCEL 8.0;DATA SOURCE=" & ThisWorkbook.FullName
For Each SH In Sheets
If SH.Name <> "汇总表" Then
Sql = "SELECT * FROM [" & SH.Name & "$]"
D(Sql) = ""
End If
Next
Sql = Join(D.KEYS, " UNION ALL ")
Sql = "select DISTINCT 身份证号码,姓名 from (" & Sql & ")"
Range("a2").CopyFromRecordset cn.Execute(Sql)
End Sub

TA的精华主题

TA的得分主题

发表于 2019-12-8 16:43 | 显示全部楼层
附件请参考************

名册.rar

28.52 KB, 下载次数: 13

TA的精华主题

TA的得分主题

发表于 2019-12-8 17:02 | 显示全部楼层
Sub C()
Set D = CreateObject("SCRIPTING.DICTIONARY")
For Each SH In Sheets
If SH.Name <> "汇总表" Then
arr = SH.Range("A1").CurrentRegion
For I = 1 To UBound(arr)
D(arr(I, 1) & vbTab & arr(I, 2)) = ""
Next
End If
Next
[A1].Resize(D.Count) = Application.Transpose(D.KEYS)
[A1].Resize(D.Count).TextToColumns
End Sub

TA的精华主题

TA的得分主题

发表于 2019-12-8 17:05 | 显示全部楼层
附件请参考**************

名册 数组 字典.rar

28.97 KB, 下载次数: 25

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

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-20 00:58 , Processed in 0.050487 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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