首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Excel VBA -查找单元格并添加到动态数组

Excel VBA是Excel宏语言,它提供了一种编程方式,可以通过编写宏来自动化Excel操作。VBA(Visual Basic for Applications)是一种面向对象的编程语言,结合了Visual Basic语言和Microsoft Office应用程序的功能。通过使用VBA,开发人员可以编写自定义的宏和函数,实现各种复杂的操作和任务。

在Excel VBA中,查找单元格并添加到动态数组的步骤如下:

  1. 声明一个动态数组变量,用于存储查找到的单元格的值。
  2. 使用Range对象的Find方法来查找目标单元格。Find方法接受多个参数,包括要查找的值、查找的起始位置、查找方向等。具体参数可以根据实际需求进行设置。
  3. 使用循环结构,在每次查找到目标单元格后,将其值添加到动态数组中。
  4. 最后,可以对动态数组进行遍历,访问查找到的单元格的值,或者将其写入其他地方。

下面是一个示例代码:

代码语言:txt
复制
Sub FindAndAddToDynamicArray()
    Dim targetValue As String
    Dim targetRange As Range
    Dim foundCell As Range
    Dim dynamicArray() As Variant
    Dim i As Integer
    
    targetValue = "目标值"
    Set targetRange = ActiveSheet.UsedRange
    
    ReDim dynamicArray(1 To 1) ' 初始化动态数组
    
    Set foundCell = targetRange.Find(targetValue)
    
    If Not foundCell Is Nothing Then
        dynamicArray(1) = foundCell.Value ' 将找到的值添加到动态数组中
        Do
            Set foundCell = targetRange.FindNext(foundCell)
            If Not foundCell Is Nothing Then
                i = i + 1
                ReDim Preserve dynamicArray(1 To i) ' 扩展动态数组
                dynamicArray(i) = foundCell.Value
            End If
        Loop While Not foundCell Is Nothing And foundCell.Address <> targetRange.Cells(1, 1).Address
    End If
    
    ' 遍历动态数组中的值
    For i = 1 To UBound(dynamicArray)
        MsgBox dynamicArray(i)
    Next i
End Sub

在这个示例代码中,我们首先声明了几个变量,包括要查找的目标值(targetValue)、查找范围(targetRange)、查找到的单元格(foundCell)以及动态数组(dynamicArray)。然后我们使用ReDim语句初始化了动态数组,并使用Find方法查找目标单元格。如果找到了目标单元格,我们将其值添加到动态数组中,并使用FindNext方法继续查找下一个匹配项。最后,我们使用For循环遍历动态数组,并通过MsgBox语句显示每个值。

这是一个简单的示例,根据实际需求,你可以根据这个框架进行扩展和修改。在实际使用中,你可能需要考虑更多的情况,例如查找条件、查找范围、查找方向等。你还可以将动态数组中的值写入其他单元格或进行其他操作。

对于Excel VBA的学习和更多示例,请参考腾讯云Excel VBA开发教程(https://cloud.tencent.com/document/product/1123/36822)。

注意:这个答案是不涉及亚马逊AWS、Azure、阿里云、华为云、天翼云、GoDaddy、Namecheap、Google等流行的一些云计算品牌商。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Excel实战技巧86:从下拉列表中选择显示相关的图片和文字说明

在《Excel实战技巧15:在工作表中查找图片》中,我们使用名称和INDEX/MATCH函数组合,在工作表中显示与所选择名称相对应的图片。...在《Excel实战技巧22:在工作表中查找图片(使用VBA代码)》中,使用VBA代码来达到根据名称显示相应图片的效果。...如下图1所示,在《Excel实战技巧85:从下拉列表中选择显示相关的图片》的工作表示例中,添加了图片文字说明。 ?...图4 相关文章: Excel实战技巧15:在工作表中查找图片 Excel实战技巧21:在工作表中查找图片 Excel实战技巧22:在工作表中查找图片(使用VBA代码) Excel实战技巧85:从下拉列表中选择显示相关的图片...欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料。 完美Excel社群2020.9.9动态 #Excel VBA解读之用户窗体00# 写在前面的话

7.1K20
  • 正则表达式来了,Excel中的正则表达式匹配示例

    关于RegExpMatch,你应该知道的三件事 在进行实际计算之前,注意以下几点: 1.该函数可以处理单个单元格单元格区域。在后一种情况下,结果以动态数组或溢出区域的形式返回到相邻单元格中。...一旦开始键入公式,函数名就会出现在Excel的自动完成建议的列表中。然而,在动态数组Excel(Microsoft 365)和传统Excel(2019及更旧版本)中存在一些细微差别。...一次匹配多个单元格中的字符串 要使用单个公式匹配多个字符串,在第一个参数中包含单元格区域引用: =RegExpMatch(A5:A9, “\b[A-Z]{2}-\d{3}\b”) 在支持动态数组Excel365...记住,我们的自定义函数可以一次处理多个单元格Excel的总和可以在一个数组中累加值,下面是你要做的: 为RegExpMatch提供一个单元格区域引用,以便它返回一个包含TRUE和FALSE值的数组。...代码添加到他们的工作簿中,因为在外接程序安装过程中,这些函数可以顺利集成到Excel中。

    21.2K30

    Excel VBA解读(146): 使用隐式交集处理整列

    Excel希望获得单个单元格引用但却提供给它单元格区域时,Excel会自动计算出单元格区域与当前单元格的行或列相交的区域使用。例如下图1所示: ?...图3 如果在多个单元格中输入上述数组公式,则会获取多个值,如下图4所示,在单元格区域C5:C9输入上面的数组公式,会得到列A中的前5个数据。 ? 图4 那么,对于函数Excel又是怎么处理的呢?...例如,公式: =VLOOKUP(A4,$A:$C,3,false) 在列A至列C组成的区域中精确查找单元格A4中的内容,返回列C中相应的值。...如果将单元格区域作为要查找的值,并且输入的不是数组公式: =VLOOKUP($A:$A,$A:$C,3,FALSE) 那么Excel将为查找值使用隐式交集,上面公式的结果如下图5所示。 ?...Excel将其视为一个表达式,并在将其传递给UDF前评估该表达式,也就是说Excel会传递给该表达式的结果给UDF。 下面是一个通用的VBA函数,可以从VBA UDF内部调用,从而执行隐式交集。

    4.9K30

    Excel公式练习55: 获取重复数据出现的最大次数

    本次的练习是:给定一个单元格区域,要求使用公式得到该区域中出现重复次数最多的数据的重复次数。如下图1所示,在单元格区域A1:F1中,重复次数最多的数据是“完美Excel”,重复次数是3。 ?...完美Excel","VBA","Office365","完美Excel"})) 生成两个数组数组1:{"VBA","完美Excel","完美Excel","VBA","Office365","完美Excel..."} 数组2:{"VBA","完美Excel","完美Excel","VBA","Office365","完美Excel"} COUNTIF函数依次查找数组2中每个元素在数组1中出现的次数,得到数组:...扩展 运用上述技术,可以获取指定数据在单元格区域中出现的次数,如下图2所示,要求“VBA”和“完美Excel”在单元格区域A1:F1中出现的次数。 ?...图2 选择单元格区域A4:B4,输入数组公式: =COUNTIF(A1:F1,A3:B3) 即可获得结果。

    3.3K10

    Excel中自定义上下文菜单(中)

    标签:VBA,用户界面 本文接上篇文章: 在Excel中自定义上下文菜单(上) 使用RibbonX将控件添加到单元格上下文菜单 在下面的示例中,将创建与上文描述的示例相同的按钮和子菜单,但使用RibbonX...图3 6.保存关闭编辑器。 7.在Excel中打开该工作簿。...使用VBA代码或RibbonX将动态菜单添加到单元格上下文菜单 动态菜单指向在运行时创建菜单的回调过程。dynamicMenu控件包含指向GetContent回调过程的getContent属性。...下面是在单元格上下文菜单中创建动态菜单的RibbonX XML。...图4 例如,下面的VBA代码在运行时使用两个按钮构建动态菜单,这意味着只有单击上下文菜单上的菜单控件才能创建动态菜单。

    1.7K40

    Excel中自定义上下文菜单(下)

    在本文开头的VBA示例中,你看到了如何通过使用工作簿的Activate和Deactivate事件调用宏来创建和删除菜单控件,从而来更改单元格上下文菜单。...例如,单元格、行和列上下文菜单就是如此。RibbonX中似乎没有支持的控件ID列表。可以通过使用VBA代码禁用与上一节中所述类似的特定控件来使用变通方法。...小结 在Excel 97至Excel 2003中,可以使用VBA代码将控件添加到每个上下文菜单中,但无法使用RibbonX更改上下文菜单。...在Excel 2007中,可以使用VBA代码将控件添加到几乎每个上下文菜单中。但是,无法使用VBA更改某些上下文菜单,例如形状和图片的上下文菜单。此外,无法使用RibbonX更改上下文菜单。...在Excel 2010及后续版本中,可以使用VBA代码将控件添加到几乎每个上下文菜单中。使用VBA更改某些上下文菜单的限制与Excel 2007中相同。

    2.6K20

    WPS表格的高光时刻马上要来,支持动态数组公式溢出

    今天从WPS官方邓华老师那里获得了WPS内测安装包,支持WPS表格的动态数组公式,测试了一轮,还是比较满意,没有像之前跟进Excel365新函数那样,只是部分支持,这一次,基本上已经和Excel365的体验一致...二、支持引用首单元格加#号后,可引用整个动态数组公式区域 三、支持定义名称中,引用动态数组公式区域 只需在定义名称中,输入第二点所示的引用方式,即可动态引用整个数组公式返回内容的单元格区域 四、支持自定义函数的动态溢出...增加了动态数组公式后,VBA对象模型的Range对象新增了几个属性和方法,对于二次开发比较关键,如: HasSpill属性代表当前区域是否有动态溢出的公式, 当选定区域为动态数组公式左上单元格,SpillingToRange...代表整个动态数组公式的单元格区域 当选定区域为动态数组公式不是左上单元格,SpillParent返回首个左上单元格。...相信有了动态数组公式,中高级Excel用户,会以非常高的热情拥抱WPS。

    2.1K20

    Excel实战技巧85:从下拉列表中选择显示相关的图片

    在《Excel实战技巧15:在工作表中查找图片》中,我们使用名称和INDEX/MATCH函数组合,在工作表中显示与所选择名称相对应的图片。...在《Excel实战技巧21:在工作表中查找图片(方法2)》中,使用名称和OFFSET/COUNTA/MATCH函数来实现相同的效果。...在《Excel实战技巧22:在工作表中查找图片(使用VBA代码)》中,使用VBA代码来达到根据名称显示相应图片的效果。本文实现的效果相同,实现的方法类似,但可能更简单些。...图7 相关文章: Excel实战技巧15:在工作表中查找图片 Excel实战技巧21:在工作表中查找图片 Excel实战技巧22:在工作表中查找图片(使用VBA代码) 欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识...欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料。

    6.4K10

    Excel催化剂开源第51波-Excel催化剂遍历单元格操作性能保障

    Excel催化剂推出的这一年多时间里,经常性听到一种声音,大概意思是真正会写代码的人,都不会看上Excel催化剂写出来的功能,自己造一个更舒服贴心,仿佛会一点VBA就可以天下无敌一般,也好像Excel...这里不对此看法置评,只用事实说话,看看会一点VBA的人,能否造出以下的超强性能保障的代码功能来。 遍历单元格性能问题 学过VBA的群体,都知道遍历单元格是一个很慢的过程,最好将其放进数组中再遍历。...为何会慢这个问题,可能就没有深入研究过,而笔者用自己不专业的语言表达下原因,是因为VBA或VSTO等代码与Excel交互是用的是COM的通信,这个COM通信非常臃肿,遍历过程中,不断地来回通信,产生了十分低效的性能...而数据在数组里,即放到内存里访问了,无需再频繁和COM接口通信,所以可以快起来。...在普通遍历上可以用数组或原生的查找方法,但在需要查找替换旧数据,并且需要使用正则表达式来匹配的场景中,用以上两种方法就显得非常笨拙。

    90220

    精通Excel数组公式14:使用INDEX函数和OFFSET函数创建动态单元格区域

    INDEX:查找行或列的公式 创建动态单元格区域的最基本的公式类型是基于条件来查找整行或整列值,可以使用INDEX函数实现。...图1:查找求2月份的数值之和 注意,图1所示的公式并不需要按Ctrl+Shift+Enter组合键,虽然INDEX函数返回的是一个单元格区域,其原因是没有执行直接数组操作。...图4:当有6条记录时查找单元格区域中的最后一项 使用INDEX和MATCH函数创建可以扩展和缩小的动态单元格区域 如下图5所示,在单元格E2中是一个数据有效性下拉列表,其内容来源于单元格区域A2:A5,...在单元格F2中的VLOOKUP公式从单元格区域A2:C5中查找返回相应的数据。...注:本文为电子书《精通Excel数组公式(学习笔记版)》中的一部分内容节选。你可以到知识星球App的完美Excel社群下载这本电子书的完整中文版。

    9.1K11

    Excel VBA解读(139): 用户定义函数计算了多次

    学习Excel技术,关注微信公众号: excelperfect 写在开头的话:本系列从第133篇开始的22篇文章,都是翻译改编自fastexcel.wordpress.com的Making your VBA...然而,随着自已研究VBA的深入,不由得佩服老外对VBA研究的深入,此时刚好Excel VBA解读系列又写到自定义函数这里,正好拿出来,边研究翻译分享给大家。...(数组公式表达式等),检查参数中的所有单元格是否包含公式和未计算任何单元格。...由函数向导引起的多个用户定义函数重新计算 每当将函数向导与用户定义函数一起使用时,用户定义函数会被多次调用,因为在输入函数的参数时,函数向导使用评估动态显示函数的结果。...使用将结果返回到多个单元格数组用户定义函数是加速用户定义函数执行的一种非常好的方法(请参阅前面的文章),但是应该注意一个导致速度减慢的Bug: 当输入或修改多单元格用户定义函数并且取决于易失性公式时

    1.8K30

    VBA数组用法案例详解

    具体操作1、VBA数组的定义方法下面是几种数组常用的定义方法,一维数组的定义、二维数组的定义直接赋值定义、调用Array函数定义、调用Excel工作表内存数组''''''''''''直接定义给数组赋值'...arr(1)(1)End Sub '调用Excel工作表内存数组' 一维数组[{"A",1,"C"}]'二维数组[{"a",10;"b",20;"c",30}]Sub mylook()Dim arrarr...Sub arrDemo5()Dim arr1() '声明一个动态数组动态指不固定大小)Dim arr2  '声明一个Variant类型的变量 arr1 = Range("a1:b2")   '把单元格区域...arr2(2, 2) '读取arr1数组的第2行第2列的数值End Sub2、数组的赋值和计算'读取单元格数据到数组,进行计算,再赋值给单元格Sub arr_calculate()Dim arr    ...数组还是很强大的,通过对单元格区域数据的读取,赋值给数组,再利用数组函数或者调用Excel内置函数进行相关处理。

    2K00

    Range对象

    我用自己的理解先来讲讲它: 因为我们主要是在说ExcelVBA,为什么要特指是ExcelVBA?...我们所讲的Range对象是Excel特有的(虽然Word里也有个Range对象,但只是名字相同),它所代表的就是我们平时操作Excel表格里的最小单元——单元格。...然后你可以看看Range对象,你会发现它有好多方法、属性,所以上一讲数组里我提到,直接操作Range对象就很慢的,主要是Range对象其实是一个比较复杂的东西,它包含了很多内容。...对象浏览器使用简单介绍: 在编辑器里按F2,出来1个新界面,在查找框里输入Range,但是这个并不能比较精准的定位到,你还得在下面一点类(在VBA里类就可以理解是对象)的框框里去找,它是按照字母排序了的...2、使用 使用过Excel的人都知道,如果你要在一个单元格写东西,你得选中单元格、再输入、回车,这才能完成一个单元格的赋值。

    1.5K20

    常用功能加载宏——工作表目录

    对于Excel用的不大熟练的人,只会按左下角的方向箭头,然后用眼睛去查找,有的人为了让Excel显示多一些工作表名称,还会把右下角的滚动条拉的只剩一点点,造成操作Sheet都不方便。...其实Excel里还有一个方便一点的操作: ? 在图上那个位置,点击鼠标右键,就能弹出一个新的窗口来选择激活Sheet,这个操作应该已经很方便了。...当然也可以使用VBA来快速创建一个所有Sheet的目录: ?...MShtWk.ShtDir End Sub 函数实现: Sub ShtDir() Dim i As Long Dim result() As Variant '定义结果数组...Activecell.FormulaR1C1 其实这里使用VBA直接在对应的单元格创建超链接更好,使用HYPERLINK是为了解VBA配合Excel函数的使用。

    96530

    VBA与数据库——简化程序编写-排序

    如果是要在VBA里对Excel数据进行排序,直接使用Range的Sort方法即可,也非常的简单。 但是Range的Sort方法具体是如何实现的,我们根本不知道!...如果想在VBA里对一个数组进行排序,也可以将数组的数据先输出到Excel单元格,然后调用Range的Sort方法进行排序,排序完成后再读取到数组中。...如果想在数组中对数据直接进行排序,就需要实现一个排序的算法,像冒泡排序、插入排序、快速排序之类的。...如果仅仅是对Excel单元格数据进行排序,除了Range的Sort方法,也可以使用ADO来实现: 项目 数据 Excel 7738 Access 6028 SQL serve 2531 Oracle 246...Sheet1$A1:B5] order by 数据 asc", , 1) AdoConn.Close Set AdoConn = Nothing End Sub 代码和前面的汇总数据、查找数据一样

    1.1K10

    Excel VBA解读(145): MaxMinFair资源分配——一个数组UDF示例

    学习Excel技术,关注微信公众号: excelperfect 本文主要介绍使用VBA自定义函数(UDF)实现一个名叫MaxMinFair的有趣的算法。...为了简单起见,Supply必须是单个数字>=0.0,并且Demands必须是单列垂直单元格区域或者数字数组。...该函数的参数声明为变体,以便用户可以提供单元格区域或者常量数组或返回数字数组的计算表达式。 该函数声明为返回变体。这允许函数返回错误值,或者单个数字或数字数组。...该函数首先设置错误处理并将单元格区域强制转换为值。 该函数的结果放置在一个动态调整大小的数组中,以匹配需求的数量。...VBA代码 下面是该函数的VBA代码: Option Base 1 Function MaxMinFair(Supply AsVariant, Demands As Variant) As Variant

    1.7K20

    Excel中自定义上下文菜单(上)

    Excel中的上下文菜单 在Microsoft Excel中,人们最常用的上下文菜单是单元格上下文菜单,这是在工作表单元格或选定单元格上单击鼠标右键时看到的菜单(如下图1所示)。...图1 在Excel中自定义上下文菜单 在Excel 2007以前的版本中自定义上下文菜单的唯一方法是使用VBA代码,然而,在Excel 2007后续版本中,还可以使用相同的功能区扩展性(RibbonX)...下面列出了可以添加到上下文菜单的控件: 按钮(button) 复选框(checkBox) 控件(control) 动态菜单(dynamicMenu) 库(gallery) 菜单(menu) 菜单分隔条(...menuSeparator) 拆分按钮(splitButton) 切换按钮(toggleButton) 使用VBA代码将控件添加到单元格上下文菜单 下面的示例在单元格上下文菜单顶部添加了自定义按钮、内置按钮...注意,Excel中有两个单元格上下文菜单,一个是标准菜单,另一个是在分页预览模式下的菜单。分页预览模式显示每页上显示的数据,使用户能够快速调整打印区域和分页符。

    2.7K40

    简单的Excel VBA编程问题解答——完美Excel第183周小结

    14.如何将数组作为参数传递给过程? 数组名后加上空括号。 15.如何指定函数要返回的值? 通过将值赋给函数名称。 16.过程中的局部变量能否在调用过程之间“记住”其值?如果要这样,怎么办?...19.哪两个函数用于搜索文本(在另一个字符串中查找一个字符串)? InStr函数和InStrRev函数。 20.如何转换字符串,以使每个单词的首字母大写,而所有其他字母小写?...23.在VBA程序中使用哪个Excel对象引用的工作表单元格区域? Range对象。 24.假设单元格区域引用单个工作表单元格,你如何知道该单元格是否为空?...完美Excel微信公众号本周内容 在完美Excel公众号中,本周推出的内容清单如下: 一些基本的Excel VBA编程问题,答案来了 Excel小技巧66:快速求和 Excel实战技巧92:快速获取指定目录下所有文件清单...简单的Excel VBA编程问题又来了,你能答出来吗?

    6.6K20
    领券