Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >VBA用字典批量查找社保数据

VBA用字典批量查找社保数据

作者头像
哆哆Excel
发布于 2022-10-25 05:50:51
发布于 2022-10-25 05:50:51
72100
代码可运行
举报
文章被收录于专栏:哆哆Excel哆哆Excel
运行总次数:0
代码可运行

VBA用字典批量查找社保数据(VLookup功能加强版)

【问题】我们知道社保导出的数据是很多合并的单元格,如果要查找一个数据都要找很久,如果数量多了更多费时,基于以上问题,特用VBA设计一个批量查找的程序。

==本程序是个人原创学习之用==

====程序1====

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub 批量查找社保数据a()
    Dim dic As Object, wb As Workbook
    Set dic = CreateObject("scripting.dictionary")
    Application.ScreenUpdating = False
    ti = Timer
    Set mysht = Sheets("主")
    With Sheets("主")
        LastCol = .Range("a4").End(xlToRight).Column
        arr = .Range(.Cells(4, 1), .Cells(4, LastCol))
        LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
        For dici = 5 To LastRow
            dic(.Cells(dici, 1).Value) = dici
'            Debug.Print dici
        Next dici
        file = .Range("b1")
        file_sht = .Range("D1")
        .Range(.Cells(5, 1), .Cells(LastRow, LastCol)).NumberFormatLocal = "@"
    End With
    Set wb = Workbooks.Open(file)
    With wb.Sheets(file_sht)
        brr = .UsedRange.Value
        For i = 1 To UBound(brr)
            s = .Cells(i, ColumnNum(arr(1, 1)))
            If dic.exists(s) Then
                For j = 2 To UBound(arr, 2)
                    mysht.Cells(dic(s), j) = .Cells(i, ColumnNum(arr(1, j)))
                Next j
            End If
        Next i
    End With
    wb.Close False
        Application.ScreenUpdating = True
    MsgBox "完成!时间为:" & Format(Timer - ti, "0.000秒")
End Sub

用时2.172秒

====程序2====

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub 用字典批量查找数据()
    Dim mydic As Object, obj As Object, main_sht As Worksheet
    Dim Urng As Range
    Dim arr, brr, temp_rr()
    Set mydic = CreateObject("scripting.dictionary")
    Application.ScreenUpdating = False
    ti = Timer
    Set main_sht = Sheets("主")
    With main_sht
        Lcol = .Range("a4").End(xlToRight).Column
        Lrow = .Cells(Rows.Count, 1).End(xlUp).Row
        Set Urng = Union(.Range("b1"), .Range("d1"), .Range("a4").Resize(1, Lcol))
        If Application.CountA(Urng) <> Urng.Count Or Lrow <= 4 Then MsgBox "有单元格的初始数据没设置": Exit Sub
        arr = .Range("a4").Resize(1, Lcol)
        file = .Range("B1")
        file_sht = .Range("D1")
        ReDim temp_arr(1 To UBound(arr, 2))
    End With
    Set obj = GetObject(file)
    With obj.Worksheets(file_sht)
        brr = .UsedRange.Value
        For i = 1 To UBound(brr)
            s = .Cells(i, arr(1, 1))
            If s <> "" Then
                'For j = 1 To UBound(temp_arr)
                mydic(s) = Array(.Cells(i, arr(1, 2)), .Cells(i, arr(1, 3)), .Cells(i, arr(1, 4)), .Cells(i, arr(1, 5)))
                'Next j
                'Debug.Print mydic(s)
            End If
        Next i
    End With
    With Sheets("Sheet2")
        For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
            s = .Cells(i, 1)
            If mydic.exists(s) Then
                .Cells(i, 2).Resize(1, Lcol - 1) = mydic(s)
            Else
                .Cells(i, 2).Resize(1, Lcol - 1) = "无"
            End If
        Next i
    End With
    obj.Close
    Set obj = Nothing
    Application.ScreenUpdating = True
    MsgBox "完成!时间为:" & Format(Timer - ti, "0.000秒")
End Sub

用时2.305秒

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 哆哆Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Excel学习----一键创建相应“惟一性”的文件,再筛选数据并写入相应的文件中
领导是要求是:有这样的一个表格,请按“模板”文件,建立面试级别的几个文件,并筛选出相应的内容填写到各工作簿中,
哆哆Excel
2022/10/25
8700
Excel学习----一键创建相应“惟一性”的文件,再筛选数据并写入相应的文件中
ExcelVBA请按班别拆分为工作簿(筛选复制法)
请按班别拆分为工作簿 Sub 筛选拆分() Dim d As Object, sht As Worksheet, arr,brr, r, kr, i&, j&, k&, x& Dim Rng As Range, Rg As Range, tRow&,tCol&, aCol&, pd&, Cll As Range Dim wb As Object, mysht As Worksheet Set d =CreateObject("scripting.dictionary") '
哆哆Excel
2022/10/31
4630
ExcelVBA从工作簿中查询多个姓名并复制出整行数据
工作中用的代码 Sub ExcelVBA从工作簿中查询多个姓名并复制出整行数据() Dim outFile As String, inFile As String Dim outWb As Workbook, mysht As Worksheet, tempsht As Worksheet, t_arr(1 To 30) Dim SearchRange As Range Dim LastRow As Integer, arr, FindStr As String, i
哆哆Excel
2022/10/31
1.7K0
VBA字典(详解,示例)「建议收藏」
如果对上面水果种类进行计数:countifs,只需要将分类汇总的值改为数值1即可,每出现一次‘+1’
全栈程序员站长
2022/07/22
6.3K1
VBA字典(详解,示例)「建议收藏」
ExcelVBA筛选法按分类条件拆分一个工作表为多个工作簿
对上次的文章进行优化 ==========代码如下===== Sub 筛选拆分() Dim d As Object, sht As Worksheet, arr, brr, r, kr, i&, j&, k&, x& Dim Rng As Range, Rg As Range, tRow&, tCol& Dim wb As Object, mysht As Worksheet Set d = CreateObject("scripting.dictionary") 'se
哆哆Excel
2022/10/31
3.7K1
VBA Excel总表以某列数据为基础拆分为独立文件的表,也可以拆分为独立的sheet表不导出!!
VBA Excel总表以某列数据为基础拆分为独立文件的表,也可以拆分为独立的sheet表不导出!!
办公魔盒
2019/07/22
1.6K0
yhd-ExcelVBA根据条件查找指定文件的数据填写到当前工作表指定列
【问题】当我们要用一个表的数据来查询另一个表的数据时,我们常常是打开文件复制数据源表的数据到当前文件新建一个数据表,再用伟大的VLookup,查询过来。再删除掉数据源,这样才完成。
哆哆Excel
2022/10/25
1.7K0
yhd-ExcelVBA根据条件查找指定文件的数据填写到当前工作表指定列
VBA一键提取4个excel社保文件的指定单元格
【问题】平时提取4个文件的数据时,是打开一个文件,复制数据,再打开一个文件,复制数据,再打开一个文件,复制数据,再打开一个文件,复制数据,用时要30分以上,于是我总想能不能快一点,今天写个代码来完成这个工作用时1.69秒。
哆哆Excel
2022/10/31
5350
VBA把数量不同的多表进行汇总
Set dic1 = CreateObject("Scripting.Dictionary")
哆哆Excel
2022/10/25
1K0
VBA把数量不同的多表进行汇总
VBA汇总一个文件多工作表到一个表
VBA汇总一个文件多工作表到一个表 . 今天在工作中,同事传来一个excel文件中有很多个工作表,要我汇总,每个表的标题是一样的,虽然一个一个复制、粘贴是可以做到的,但时间很长,所以把以前学习一个代码,拿来用一下,代码找了很久才找到,想想还是把他放在这里好一点,以后查找方便 . 把多个工作表的内容汇总到一个“汇总”表中 Sub sheets_to_one() Dim mysht As Worksheet, rng As Range, sht As Worksheet Dim
哆哆Excel
2022/10/31
5700
Python对比VBA实现excel表格合并与拆分
日常工作中经常需要对一系列的表进行合并,或者对一份数据按照某个分类进行拆分,今天我们介绍Python和VBA两种实现方案供大家参考~
可以叫我才哥
2021/08/05
3.1K0
Excel-VBA超级VLOOKUP查询引用输入工具
1.多条件设定(因为姓名时有重名,身份证时有大小写,有时姓名与身份证对不上,所以最好的方法是:姓名+身份证)
哆哆Excel
2022/10/31
1.2K0
VBA全自动录入“个人所得税的正常工资”文件模板
我们在做个人所得税时,我们需要导入“正常工资”模板文件,模板文件要录入的数据有“本期收入 、基本养老保险费、 基本医疗保险费、失业保险费、住房公积金、企业(职业)年金”有4000多人,以前用VLookup进行引用数据,每次做都要很长时间。
哆哆Excel
2022/10/31
4930
yhd_Excel VBA之税务系统与工资表比较不同
Dim dic_a As Object, dic_b As Object, asht As Worksheet, bsht As Worksheet
哆哆Excel
2022/10/25
2570
Excel应用实践14:合并多个工作簿中的数据—示例3
要合并工作簿的情形有许多种,但最终的目的只有一条,将繁锁的手工操作自动化,让程序快速帮助我们完成这些重复的工作。
fanjy
2019/07/19
1.7K0
ExcelVBA条件查找多文件并由整行复制到模板再存为新工作簿
【解决问题】在工作中我常要做的事:在几个文件中,查找某人的数据,并复制出来,到一个新的文件中。
哆哆Excel
2022/10/31
1.1K0
VBA在多个文件中Find某字符的数据并复制出来
【问题】有几个文件,每个文件中有很多条记录,我现在要提取出含有“名师”两个字符的记录。
哆哆Excel
2022/10/25
3K0
VBA在多个文件中Find某字符的数据并复制出来
yhd-VBA从一个工作簿的某工作表中查找符合条件的数据插入到另一个工作簿的某工作表中
【问题】我们在工作中有时要在某个文件(工作簿)中查找一些数据,提取出来。常用的方法是打开文件,来查找,再复制保存起来。如果数据少还是手工可以的,如果数据多了可能就。。。。
哆哆Excel
2022/10/31
5.7K0
ExcelVBA-多列单元格中有逗号的数据整理
【问题】某天老板传来一个文件,这里有一个数据表,帮我查找一下那个是我们单位的人,他们的职务是什么?
哆哆Excel
2022/10/25
1.5K0
ExcelVBA-多列单元格中有逗号的数据整理
导入文本(txt文件)的VBA代码
fileName = Application.GetOpenFilename("Excel 文件 (*.txt),*.txt")
但老师
2022/03/22
2.1K0
导入文本(txt文件)的VBA代码
推荐阅读
相关推荐
Excel学习----一键创建相应“惟一性”的文件,再筛选数据并写入相应的文件中
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验