Excel 批量查找录入

  • 简介

VLOOKUP(垂直查找)是Excel中常用的函数之一,用于在表格中查找某个值,并返回该值所在行中的另一个值。VLOOKUP在批量处理数据时非常高效,比如需要根据一个字段(如“地点”)查找并返回其他相关数据(如“经度”和“纬度”)的场景。

比如,已知表1中的信息,现在需要得到表2中的经纬度时(特别在数据量大,比如又不同时间的不同地点的数据需要对其分别填充经纬度),此功能是快捷又准确的方法。

表1

表2

  • 小体量数据-工具栏操作

小体量数据可以直接使用工具栏快速操作,具体步骤如下:

1.找到查找录入工具

 

2.选择数据区域

查找表区域为已有数据区域,如上面的表1,而录入表区域则是我们需要填充数据的表格如上面表2。这两个区域可以在同一个sheet表中,也可以位于不同sheet表中。完成后点击下一步。

 

3.选择对应字段。

其中查找字段为已知字段,录入字段为需要录入信息的字段。自己可以按照实际需求增减字段信息。设置完成后点击开始录入即可得到结果。

 

  • 大体量数据-VBA编辑器

当数据量较小的时候,此方法是非常方便的,担当数据量大时未收到限制,因为该功能的最大单元格数量限制为10000。为解决此限制可以采取以下方法:

方法 1: 使用 INDEX 和 MATCH 代替 VLOOKUP

INDEX 和 MATCH 的组合比 VLOOKUP 更灵活,并且没有 VLOOKUP 中列数的限制。可以将其替代 VLOOKUP 进行数据查找。

方法 2: 使用字典对象优化查找

如果你有一个非常大的数据集,可以使用 VBA 中的 Scripting.Dictionary 来快速查找数据。字典对象可以通过键值对存储数据,并且查找速度非常快。

方法 3: 分批查找

如果你不得不使用 VLOOKUP,可以尝试分批查找来避免一次性加载过多数据。你可以将数据分成几个较小的部分,分别执行查找操作。这样可以减轻 Excel 处理大量数据时的压力。

方法 4: 使用数组进行查找

如果数据量特别大,使用数组处理数据会比直接在工作表中操作更高效。你可以将数据加载到数组中,再进行查找和操作。

其中方法4可以解决大部分问题,此处给出示例代码,可根据自己的需求修改工作表名称,匹配和录入字段名称,字段行数、所在列等信息

在开发工具-VB编辑器中输入并运行一以下代码:

Sub BatchLookupAndInsert()

    Dim wsData As Worksheet

    Dim wsLookup As Worksheet

    Dim dict As Object

    Dim i As Long, stationName As String

    Dim longitude As Variant, latitude As Variant

    Dim resultRow As Long

    

    ' 初始化工作表

    Set wsData = ThisWorkbook.Sheets("Sheet") '录入数据所在工作表名称

    Set wsLookup = ThisWorkbook.Sheets("Sheet2") ' 查找数据所在工作表

    ' 创建字典对象

    Set dict = CreateObject("Scripting.Dictionary")

    ' 载入查找数据 (Sheet2: stationname, Longitude, Latitude)

    For i = 1 To n ' n为查找数据的行数

        stationName = Trim(wsLookup.Cells(i, k).Value) ' k查找字段所在的列,如以上的地点字段

        Longitude = wsLookup.Cells(i, l).Value ' l 录入字段 经度 所在列

        Latitude = wsLookup.Cells(i, m).Value ' m 录入字段 维度 所在列  

        ' 检查 Longitude 和 Latitude 是否为有效的数值

        If IsNumeric(longitude) And IsNumeric(latitude) Then

            ' 将 stationname 作为键,Longitude 和 Latitude 作为值存储到字典

            If Not dict.Exists(stationName) Then

                dict.Add stationName, Array(longitude, latitude)

                Debug.Print "已加载字典: " & stationName & " -> Longitude: " & longitude & ", Latitude: " & latitude

            End If

        Else

            ' 如果数据无效,则跳过该行

            Debug.Print "无效数据: " & stationName & " -> Longitude: " & longitude & ", Latitude: " & latitude

        End If

    Next i

    ' 遍历数据1 (查找字段为 stationname,录入字段为 Longitude, Latitude)

    resultRow = 1 ' 从第一行开始处理数据1中的行

    For i = 1 To p ' p为录入数据的总行数

        stationName = Trim(wsData.Cells(i, k).Value) ' 获取 匹配字段,如地点(在第k列)

        ' 如果字典中存在该 stationname,则进行录入

        If dict.Exists(stationName) Then

            wsData.Cells(i, l).Value = dict(stationName)(0) ' 录入 Longitude(第l列)

            wsData.Cells(i, m).Value = dict(stationName)(1) ' 录入 Latitude(第m列)

            Debug.Print "已录入: " & stationName & " -> Longitude: " & dict(stationName)(0) & ", Latitude: " & dict(stationName)(1)

        End If

        ' 每处理1000行数据输出进度

        If i Mod 1000 = 0 Then

            Debug.Print "已处理 " & i & " 行"

        End If

    Next i

    MsgBox "查找并录入完成!"

End Sub

使用说明 : 1、本程序可以作什么? 本程序功能分为两个部分: 一部分是:批量查找指定路径下的文件中的内容中,是否包含要查询的项目。并把查询出的内容分文件存储。 一部分是:将文本文件导入EXCEL中,可以将上一步查找的结果导入,也可以自己选择文件导入(支持多选)。 2、如何使用他? a、批量查找: 首先,在“读入位置”按钮处设置你所要读取的文件的存放位置,此时程序会自动读入此文件夹下所有文件,以供选择;其次,用“>>”或“>”将要读取的文件选入读取队列,当然如果选错了可以用“<<”或“<”删除队列,或者鼠标双击选中项删除;再次,点击“+”按钮,添加查找项目到查找项目列表,一次只可以添加一条,如需添加多条则需要重复添加操作;如果添加错误可以双击选中项删除或选中后点击“-”按钮。最后,点击“开始查找”,程序将会把查找结果输出保存到指定路径下面的output文件夹下面,你可以选择是否打开目录查看。如果需要查询的文件有文件头,可以选择“保留文件首行”。 b、EXCEL导入: 首先,选择导入方式,导入方式分为“查询结果导入”和“新选文件导入”两种;当选择“查询结果导入”时,本程序将把“读入位置”处“output”文件夹下文件批量导入EXCEL。当选择“新选文件导入”时,本程序在点击“开始导入”时将弹出窗口,您可以自己选择需要导入文件(支持多选),导入EXCEL。其次,设置导入文件时的分割符,默认为“|”,本程序只支持按照分隔符导入。最后,点击“开始导入”按钮开始导入。 3、本程序不判断所查找的文件类型 由于本程序在读入文件时,并没有校验文件的内容和文件类型,因此本程序会读取用户所选择的任意文件,即使此文件是二进制格式的。不论是查询或者是导入功能都是这样。本程序将按行读取所选择的文件(或者有换行符的),在读取完文件后,无论是否找到,都会创建和源文件相同类型的文件,即使是.exe或.rar(一般是打不开的),文件名存储为“output”+原文件名。即使没有找到任何相匹配的内容,本程序也会创建文件,这时后文件大小是0字节,可以按照大小排列看到。 4、请使用“清除文件”按钮及时清除查询结果 程序在查询和创建文件的过程中,不会判断是否已经执行过查询操作。如果已经执行过查询操作,“output”文件夹下就会存在查询出的文件,当再次执行查询时,本程序会在已存在的文件后追加查询结果。这样就会出现重复的记录或内容。因此,当需要多次查询时,每次查询前需要点击“清空文件”按钮删除output文件夹,才能保证查找的准确。 5、本程序不会判断运行的环境,因此在运行过程中可能会有些未知的错误 本程序在win7环境,vs2012,Netframe4.0下编译通过。本程序支持winxp及以上操作系统。执行EXCEL导入的时候,需要安装Office。Office的版本在2003以上就可以。但是不同我Office版本对导入性能,有一定的影响。Excel2003,最多256列,即2的8次方,最多65536行,即2放入16次方; Excel2007及以上版本,最多16384列,即2的14次方,最多1048576行,即2的20次方。因此如果需要导入的单个文件的行数或者列数,超过了所安装Office版本的最多行列数,程序将会报错!
Excel 自带的查找功能只能在当前工作表页中搜索。当切换工作表时就必须关掉查找对话框。这给面临大量数据检索的工作带来非常的不便。本软件就是用以扩展及加强 Excel查找功能的工具之一。它可实现在工作簿全部工作表中检索并定位的功能。可以降低工作人员的机械劳动,提高工作效率。 使用说明: 本软件为Excel加载宏程序,软件为您建立了一个“高级查找工具” 菜单。本软件的全部功能也集合在此菜单中。点击下拉菜单中“高级查找工具”即可使用本工具。 在使用中,当鼠标指向控件的时候,即会得到简短的说明。与 Excel 自带的查找功能一样可实现 按“公式”或“数值”的方式进行检索。软件特带“精度匹配”功能。软件启动时“精度匹配”值为默认值“1”。可通过“微调按钮”或直接输入数值更改检索匹配精度。数值约高,精度约大。但最大精度为“ 5”。 单击搜索结果列表中的搜索结果,即可转移到该结果的所在单元格。但需要指出的是:当工作簿有隐藏的工作表或工作表有特殊的保护机制时(例如选定区域锁定)。本软件可以正常搜索带有密码保护的隐藏工作表数据。但无法定位转移。 运行环境:本软件使用 MICROSOFT OFFICE 2000开发制作。在 WINDOW 2000 + OFFICE 2000环境下测试通过。建议运行环境为MICROSOFT OFFICE97/2000/XP支持,操作系统为WINDOWS9.x/NT/2000。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值