实用VBA:14.在二维数组中查找特定元素 您所在的位置:网站首页 vba遍历单元格查找数据错误怎么解决 实用VBA:14.在二维数组中查找特定元素

实用VBA:14.在二维数组中查找特定元素

2024-07-03 09:01| 来源: 网络整理| 查看: 265

1.需求场景

今天遇到个问题,需要对大量表格中的“编号”字段对应补充上“名称”信息。已有“编号”与“名称"的对应关系表,"编号"是个具有唯一性的字段。需要处理的大量表格中出现的编号都可以在在对应关系表中找到,姓名与编号是一对一关系。

2.解决思路

如果是单一或者少量的表格需要处理,可以使用vlookup函数,按照编号将名称匹配到需要处理的表格中即可。可是需要处理的表格是大量分散的文件,如果再用vlookup函数一个个处理,就会耗费大量的时间。这时就可以利用以前介绍过的批量提取文件路径的方法(具体见【实用VBA:6.一键批量提取文件名和存储路径】),先提取文件路径;再利用一个循环遍历各个文件,逐一打开文件;然后再按照vlookup函数的思路,逐行判断编号字段所在的列单元格中的编号值与“编号名称对应表”中的哪个编号一致;再从对应表中取出对应的那一行的“名称”信息,填入待处理的表格中;以此循环往复……

那么每次查找“编号名称对应表”中那个对应的编号都访问一遍这个表格似乎有点麻烦。频繁在待处理表和对应表之间切换也比较费时间。于是,考虑到我的“编号名称对应表”只有1000+条数据,决定使用数组来处理。

先把对应关系表读入一个二维数组中,n行,2列,n即为对应关系表的条数,2列的值分别是“编号”和“名称”。打开待处理表格之后,取出一个编号,拿这个编号和二维数组中的编号逐一对比。找到二维数组中匹配的编号后,读取该数组当前行的“名称”值。

这个过程略微有点复杂,核心的是怎么从二维数组中找到匹配的编号。我以“VBA 二维数组 查找元素”为关键词进行搜索,AI给出来如下一个示例代码,感觉还挺有用,在此分享。

3.VBA实现

在VBA中,可以使用For Each语句来遍历二维数组并查找特定的元素。下面是一个示例代码:

Sub FindElementInArray() Dim arr(1 To 3, 1 To 2) As Variant ' 创建一个3行2列的二维数组 ' 初始化数组 For i = 1 To 3 For j = 1 To 2 arr(i, j) = "Element" & (j - 1 + ((i - 1) * 2)) Next j Next i Dim searchValue As String searchValue = "Element5" ' 要查找的值 Dim found As Boolean found = False ' 标记是否找到了目标元素 ' 遍历数组进行查找 For i = LBound(arr, 1) To UBound(arr, 1) For j = LBound(arr, 2) To UBound(arr, 2) If arr(i, j) = searchValue Then MsgBox "找到了!位置为 (" & i & ", " & j & ")", vbInformation found = True Exit Sub ' 如果已经找到,则跳出子程序 End If Next j Next i If Not found Then MsgBox "未找到该元素。", vbExclamation End If End Sub

这段代码首先创建了一个3行2列的二维数组arr,然后通过两个嵌套的For循环对其进行初始化。接下来,我们指定要查找的值为"Element5",并将变量found设置为False表示还没有找到。最后,使用两个嵌套的For循环遍历数组,当找到与目标值相等的元素时,会显示提示信息并将found设置为True,同时结束子程序。若未找到目标元素,则会显示未找到的提示信息。

对这段代码稍作修改即可达到我要实现的效果。

如果对你也有帮助,欢迎关注、收藏、点赞、转发或评论交流。

点赞富三代,分享美一生! ^|^



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有