VBA 二维数组查找并定位数据

这篇具有很好参考价值的文章主要介绍了VBA 二维数组查找并定位数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据源:

vba在数组中查找指定元素,Excel VBA JS,算法,数据结构

 

将这个二维数组导入内存后,存储到一个二维数组里,查找其中一个数组成员,返回其在表格中的地址.

如找44,返回M20文章来源地址https://www.toymoban.com/news/detail-572616.html

Function FindAll(outDict As Object, what As String, scrRngs As Range, Optional isOne As Boolean = False)
'what       参数2: 要查找的数据
'scrRngs    参数3: 查找的范围 , 包含二维数组或一维数组的单元格
'outDict    参数1: 考虑会有多个结果,使用字典存储单元格地址
'                   key存储单元格地址,item存储数组坐标
'isOne      参数4: 可选,默认是False.设置True,找到一个结果后就结束.

    If scrRngs.Count < 2 Then   '如果传进来的单元格只有一个
        If what = scrRngs.Value Then
            outDict.Add scrRngs.Address, "1-1"
            FindAll = True
            Exit Function
        Else
            FindAll = False
            Exit Function
        End If
    Else
        arr = scrRngs.Value
        arr_min = LBound(arr)           '数组最小元素
        arr_max_row = UBound(arr)       '二维数组的最大行数
        arr_max_col = UBound(arr, 2)    '二维数组的最大列数
        
        FindAll = False
        For Row = 1 To arr_max_row
            For col = 1 To arr_max_col
                If CStr(arr(Row, col)) = CStr(what) Then
                    outDict.Add scrRngs.Cells(Row, col).Address, Row & "-" & col
                    FindAll = True
                    If isOne Then Exit Function
                End If
            Next
        Next
    End If
End Function

Function FindColumn(outDict As Object, what As String, scrRngs As Range, Optional Column As Integer = 1, Optional Offset As Integer = 0, Optional isOne As Boolean = False)
'what       参数2: 要查找的数据
'scrRngs    参数3: 查找的范围 , 包含二维数组或一维数组的单元格
'Column     参数4: 在哪一列查找
'outDict    参数1: 考虑会有多个结果,使用字典存储单元格地址
'                   key存储单元格地址,item存储偏移后单元格地址
'Offset     参数5: 找到后向左右偏移的量,正数向右,负数向左
'isOne      参数6: 可选,默认是False.设置True,找到一个结果后就结束.

    If scrRngs.Count < 2 Then   '如果传进来的单元格只有一个
        If what = scrRngs.Value Then
            outDict.Add scrRngs.Address, "1-1"
            FindColumn = True
            Exit Function
        Else
            FindColumn = False
            Exit Function
        End If
    Else
        arr = scrRngs.Value
        arr_min = LBound(arr)           '数组最小元素
        arr_max_row = UBound(arr)       '二维数组的最大行数
        arr_max_col = UBound(arr, 2)    '二维数组的最大列数
        
        If Column + Offset > arr_max_col Then   '要查找的列大于列数是错误的
            FindColumn = False
            MsgBox ("要查找的列或向右偏移量过大")
            Exit Function
        End If
        If Column + Offset < 1 Then '向左偏移量过大
            FindColumn = False
            MsgBox ("向左偏移量过大")
            Exit Function
        End If
        
        FindColumn = False
        For Row = 1 To arr_max_row
            If CStr(arr(Row, Column)) = CStr(what) Then
                outDict.Add scrRngs.Cells(Row, Column).Address, scrRngs.Cells(Row, Column + Offset).Address
                FindColumn = True
                If isOne Then Exit Function
            End If
        Next
    End If
End Function

Sub ddd()
    Dim Rngs As Range   '函数的参数规定了数据类型
    Dim outRng As Range '这里就一定要定义数据类型
    Dim sh As Worksheet
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    
    Set sh = Worksheets("Sheet3")
    Set Rngs = sh.Range("J12:N31")
    dict.RemoveAll
    success = FindColumn(dict, "3", Rngs, 3, -1, True)
    If b And dict.Count > 0 Then
        a = dict.keys()
        b = dict.items()
    End If
End Sub

到了这里,关于VBA 二维数组查找并定位数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 怎么使用VBA查找多个工作表中相同和不相同的数据

    您可以使用VBA代码来查找多个工作表中的相同和不相同的数据。以下是一些基本步骤: 打开Microsoft Excel,然后打开您想要查找的工作簿。 按下\\\"Alt + F11\\\"键打开\\\"Visual Basic for Applications\\\" (VBA) 编辑器。 在VBA编辑器中,单击\\\"插入\\\",然后选择\\\"模块\\\"以创建一个新的模块。 在模块窗口

    2024年02月12日
    浏览(49)
  • 在数组中查找指定元素

    本题要求实现一个在数组中查找指定元素的简单函数。 函数接口定义: 其中 list[] 是用户传入的数组; n (≥0)是 list[] 中元素的个数; x 是待查找的元素。如果找到 则函数 search 返回相应元素的最小下标(下标从0开始),否则返回−1。 裁判测试程序样例: 输入样例1:

    2024年02月07日
    浏览(71)
  • C语言:在数组中查找指定元素

    【问题描述】本题要求实现一个在数组中查找指定元素的简单函数。   函数接口定义:   如果找到,则函数search返回相应元素的最小下标(下标从0开始),否则返回−1。 【输入形式】输入数组元素的个数n ;用户传入的数组list[ ] ; 待查找的元素 x 【输出形式】输出相应元

    2024年02月02日
    浏览(49)
  • Excel·VBA按指定顺序排序函数

    与之前写过的《Excel·VBA数组冒泡排序函数》不同,不是按照数值大小的升序/降序对数组进行排序,而是按照指定数组的顺序,对另一个数组进行排序 以下代码调用了《Excel·VBA数组冒泡排序函数》 bubble_sort_arr 函数(如需使用代码需复制) 举例1 start 参数为默认值 False ,字符

    2024年01月25日
    浏览(48)
  • VBA(6)数组基本用法及写入输出

    1.数组的基本概念就不过多介绍了;本次为基础复习篇:直接上实例备注说明 K例在本机测试K1运行时间为1帧不到,K2为16帧左右.故而注:调用内存时运行速度较快,在写宏时应尽量多使用内存/数组运算. 2.数组的写入及输出 \\\'以上几种为数组常见赋值方式,部分版本定义一个变量体

    2024年02月11日
    浏览(46)
  • 第6讲:利用VBA获得指定行、列中最后一个非空单元格

    【分享成果,随喜正能量】修行佛法从哪儿下手呢?要从信心下手。佛法大海,唯信能入。三皈依就是世间获得吉祥如意,出世间获得究竟解脱的正因,慎勿退失,谨守修行。。 《VBA代码解决方案》(10028096)这套教程是我最早推出的教程,目前已经是第三版修订了。这套教程

    2024年02月10日
    浏览(36)
  • VBA:Application.GetOpenFilename打开指定文件夹里的excel类型文件(xls、xlsx)

    \\\'GetOpenFilename相当于Excel打开窗口,通过该窗口选择要打开的文件,并可以返回选择的文件完整路径和文件名。 \\\'Application.GetOpenFilename(“文件类型筛选规则(就是说明)”,“优先显示第几个类型的文件”,“标题”,“是否允许选择多个文件名”) 打开类型只限excel文件 \\\'“文件类型

    2024年02月11日
    浏览(49)
  • 使用VBA将大纲级别定义良好的单个Word文档按指定的大纲样式分割成多个文档

    我们知道,大纲级别定义良好的 Word 文档可以轻松用 Edraw master 转换成思维导图。但是,对于一个极长的文档,例如一本教材,直接导入 Edraw master 转换后的思维导图,因为内容过多,仍然很难阅读。这时候,可以考虑分章节将长文档分割成一个一个小文档,再将小文档导入

    2024年02月12日
    浏览(52)
  • 数据结构:图文详解顺序表的各种操作(新增元素,查找元素,删除元素,给指定位置元素赋值)

      目录 一.顺序表的概念 二.顺序表的实现 新增元素 默认尾部新增 指定位置添加元素 查找元素 查找是否存在 查找元素对应的位置 查找指定位置对应的元素 删除元素 获取顺序表长度 清空顺序表 在线性数据结构中,我们一般分为俩类:顺序表和链表         顺序表是一

    2024年02月05日
    浏览(65)
  • Excel VBA 复制除指定工作表外所有的工作表的内容到一张工作表中

    当我们有一张表里面有很多sheet 具有相同的表结构,如果需要汇总到一张表中,那么我们可以借助VBA 去实现汇总自动化 示例1 : 运行结果如下: 示例2 : 如下图所示 汇总的时候需要插入一个新列,填入各个sheetname ; 各个sheet 有合并单元格,汇总之后需要拆分合并单元格并

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包