今天遇到个问题,需要对大量表格中的“编号”字段对应补充上“名称”信息。已有“编号”与“名称"的对应关系表,"编号"是个具有唯一性的字段。需要处理的大量表格中出现的编号都可以在在对应关系表中找到,姓名与编号是一对一关系。
如果是单一或者少量的表格需要处理,可以使用vlookup函数,按照编号将名称匹配到需要处理的表格中即可。可是需要处理的表格是大量分散的文件,如果再用vlookup函数一个个处理,就会耗费大量的时间。这时就可以利用以前介绍过的批量提取文件路径的方法(具体见【实用VBA:6.一键批量提取文件名和存储路径】),先提取文件路径;再利用一个循环遍历各个文件,逐一打开文件;然后再按照vlookup函数的思路,逐行判断编号字段所在的列单元格中的编号值与“编号名称对应表”中的哪个编号一致;再从对应表中取出对应的那一行的“名称”信息,填入待处理的表格中;以此循环往复……
那么每次查找“编号名称对应表”中那个对应的编号都访问一遍这个表格似乎有点麻烦。频繁在待处理表和对应表之间切换也比较费时间。于是,考虑到我的“编号名称对应表”只有1000+条数据,决定使用数组来处理。
这个过程略微有点复杂,核心的是怎么从二维数组中找到匹配的编号。我以“VBA 二维数组 查找元素”为关键词进行搜索,AI给出来如下一个示例代码,感觉还挺有用,在此分享。
在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,同时结束子程序。若未找到目标元素,则会显示未找到的提示信息。
对这段代码稍作修改即可达到我要实现的效果。
如果对你也有帮助,欢迎关注、收藏、点赞、转发或评论交流。
点赞富三代,分享美一生! ^|^