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

发布时间:2024年01月10日

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,同时结束子程序。若未找到目标元素,则会显示未找到的提示信息。

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

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

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

文章来源:https://blog.csdn.net/chinajavafan/article/details/135515025
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。