VBA Microsoft Excel 中的 FINDNEXT 函数

2025年2月28日 | 阅读 21 分钟

众所周知,在相应的 VBA 中,查找下一个功能主要用于在定义的单元格范围内搜索特定值或文本的多个实例。它通常允许我们以编程方式定位数据,然后继续搜索该选定数据的其他各种出现,而无需从头开始重新搜索。Find 方法首先用于定位第一个实例,而相应的Find Next则使代码能够有效地在循环或重复的搜索过程中查找后续匹配项。

VBA NEXT function in Microsoft Excel

尽管如此,这项功能在自动化处理涉及大型数据集的任务时特别有用,在这种情况下,我们需要搜索某个值的多个出现。例如,如果我们想在单元格范围内查找特定数字或文本字符串的所有实例,并需要对所有选定的单元格进行格式化或编辑等操作,Find Next可以轻松地按顺序查找每个实例。然而,相应的VBA 的 Find Next 函数与 Microsoft Excel 中提供的手动“查找下一个”选项非常相似。尽管如此,它通常提供更多的控制和灵活性,特别是当与循环和其他 VBA 逻辑结合使用时。它更常用于处理需要遍历多个匹配项的任务,因此对于高效地自动化重复性任务至关重要。通过利用所有这些方法,开发人员在使用大型数据集或在多个单元格或工作表中执行复杂搜索时,可以节省时间并减少错误。这使得Find Next成为希望通过 VBA 增强 Excel 自动化的任何人的关键功能。

在 Microsoft Excel VBA(Visual Basic for Applications)中,“查找下一个”函数主要用于在单元格范围内搜索和定位特定值或条件的重复出现。此函数通常在 Microsoft Excel 宏或脚本中使用,以自动化诸如搜索特定数据然后对其执行操作等任务。该过程涉及首先定位值的第一个出现,然后遍历范围以有效地查找后续匹配项。

VBA “查找”是如何工作的?

因此,在本教程中,在理解“查找下一个”之前,了解基本的Find 方法在 VBA 中是如何工作的非常重要。然而,Find 方法是Range 对象的一部分,该对象主要代表 Microsoft Excel 中的一组单元格。通常,Find 方法允许我们搜索指定范围的单元格以查找特定值,并返回第一个有效匹配搜索条件的单元格。

Microsoft Excel 中 Find 方法的细分

  1. 范围 (Range): 在这里,我们定义要搜索的单元格范围。
    • 例如,如果我们在 A 列中搜索,那么我们必须指定范围(“A1:A10”)。
  2. 搜索条件 (Search Criteria): 在这里,我们必须指定我们要查找的值或模式。
    • 例如,在动物名称列表中搜索单词“猫 (Cat)”。
  3. Find 方法 (Find Method): 在范围上调用Find 方法,通常返回与搜索条件匹配的第一个单元格。
    • 例如,如果我们有 A 列中的动物列表
VBA NEXT function in Microsoft Excel

如果我们使用Find 方法搜索动物“猫 (Cat)”,它将返回单元格“A3”,这是列表中“猫 (Cat)”一词的第一个出现。

VBA NEXT function in Microsoft Excel
VBA NEXT function in Microsoft Excel

Microsoft Excel 中 VBA “查找下一个”是什么意思?

一旦我们使用Find 方法找到或检测到值的第一个出现,相应的“查找下一个”功能通常允许我们继续搜索范围以有效地找到相同值的下一个出现。如果该值在列表中出现多次,并且我们确实想要查找并需要对每个出现执行操作,则此功能特别有用。

VBA NEXT function in Microsoft Excel

“查找下一个”函数通常建立在之前的Find 结果之上。它主要指示 Microsoft Excel 从最后一个找到的值的位置继续搜索,而不是从范围的开头重新开始搜索。

在我们的动物列表的情况下,在第一个“猫 (Cat)”在单元格“A3”中找到后,“查找下一个”函数将找到下一个出现,即在单元格“A5”中。

查找值的 VBA 代码示例


VBA NEXT function in Microsoft Excel

在此相应示例中,相应的脚本通常会搜索单词“猫 (Cat)”,该单词位于单元格范围A1:A10内,然后将打印出“猫 (Cat)”的第一个出现的地址。

VBA NEXT function in Microsoft Excel

优点

我们都知道,使用 Microsoft Excel 中的相应 VBA(Visual Basic for Applications)主要提供了许多好处,特别是为了自动化各种重复性任务或处理大量数据。VBA 中一个特别强大的函数就是FindNextFindNext 方法通常用于在范围或工作表中搜索特定值的多个实例,因为它允许我们循环遍历该值的所有出现。

VBA NEXT function in Microsoft Excel
  1. 高效的多重出现搜索:使用FindNext的最大优点之一就是它能够高效地查找 Microsoft Excel 中范围内所有值的出现。虽然基本的Find 方法会在遇到第一个实例时停止,但相应的FindNext使我们能够在不从工作表顶部重新开始搜索的情况下继续到下一个出现。这在处理大量数据时尤其有用。搜索成百上千行可能既耗时又容易出错。
  2. 简化结果循环:使用FindNext的另一个最大优点是它允许无缝地循环遍历结果。一旦找到第一个匹配项,该方法就可以自动返回到下一个实例,依此类推,直到所有匹配项都已处理完毕。这比手动设置所有复杂的循环机制要简单得多。无需编写额外的代码行来跟踪工作表中的当前位置或每次找到匹配项时手动重置搜索,FindNext使事情保持整洁高效。
    此外,由于该过程是自动化的,因此可以减少有效数据分析过程中出现人为错误的几率。整个过程变得更加流畅,从而提高了代码的可维护性,并减少了在将来相应地调整 VBA 脚本时出错的可能性。
  3. 处理复杂搜索的灵活性:众所周知,FindNext在处理更复杂的搜索任务时提供了极大的灵活性。例如,当与更​​多搜索条件或逻辑结合使用时(例如,搜索包含特定文本但忽略区分大小写或部分匹配的单元格),FindNext 方法可以很好地适应。我们可以轻松地自定义搜索以满足特定的业务需求,而无需更改数据集,从而使其成为一个非常有效的通用工具。然而,这种适应性使其在搜索条件经常变化的动态环境中极具价值。在某些情况下,我们可能需要根据不断变化的因素过滤数据,使用 VBA 中的FindNext可以让我们做到这一点,而无需重新编写整个代码段。
  4. 大型数据集的性能改进:处理大型数据集时,性能是一个令人担忧的问题。FindNext的最佳功能之一就是它经过优化以优化“速度”。FindNext不是每次都从头到尾扫描整个数据集,而是从最后一个出现的位置继续搜索,在许多情况下能显著提高性能。然而,与其他需要循环遍历每个单元格或手动遍历选定行数的搜索方法相比,这种性能提升尤其明显;尽管如此,通过简化流程,FindNext有效地减少了运行搜索所需的时间,并且可以处理大量数据而不会出现任何显著延迟。
    例如,在我们需要从多工作簿的 Microsoft Excel 工作簿中提取特定数据点的情况下,手动方法可能会减慢宏的速度,甚至导致 Microsoft Excel 冻结。然而,使用相应的 FindNext,我们可以确保数据顺畅高效地检索,从而有效地提高 VBA 脚本的整体性能。

如何在 Microsoft Excel VBA 中使用 Find Next

Microsoft Excel VBA 中的相应FindNext 方法是一个基本功能,主要允许我们在定义的范围内搜索特定值的各种出现。以下是使用 VBA 代码轻松实现此功能的逐步指南。

VBA NEXT function in Microsoft Excel

1.打开 VBA 编辑器:我们将首先按下 Microsoft Excel 的键盘快捷键Alt + F11,以打开 Visual Basic for Applications (VBA) 编辑器。

VBA NEXT function in Microsoft Excel

2.插入新模块:现在在相应的 VBA 编辑器中,我们需要转到“插入”菜单,然后选择“模块”。这将插入一个空白模块,我们可以在其中编写相应的 VBA 代码。

VBA NEXT function in Microsoft Excel

步骤 1:设置子程序:首先,我们需要在相应的 VBA 编辑器中创建一个子程序。这可以通过使用Sub 关键字后跟子程序名称来积极实现。

VBA NEXT function in Microsoft Excel

VBA NEXT function in Microsoft Excel

此外,这个相应的子程序将主要包含所有必需的代码,以有效地演示如何在一个选定的单元格范围内轻松地找出指定字符串的多个实例。

步骤 2:定义要搜索的范围:现在在此步骤中,我们将定义我们要搜索指定字符串的单元格范围。在此示例中,我们必须在“Sheet2”上提供的从单元格A2 到 A10的单元格范围内搜索,我们可以像下面那样设置范围:


VBA NEXT function in Microsoft Excel

此代码行通常会初始化一个名为“rng”的Range 对象,该对象引用所选工作表中的指定范围。

步骤 3:声明一个变量来存储第一个找到的实例:现在,为了存储我们要查找的字符串的第一个出现,我们需要声明一个变量来存储找到的范围;我们可以使用以下代码行来执行此操作:


VBA NEXT function in Microsoft Excel

在此示例中,我们实际上在搜索字符串“Orange”。相应的Find 方法然后将在定义的范围内返回此字符串的一个实例,分别。

步骤 4:检查是否找到字符串:在进行下一步之前,检查Find 方法是否成功找到字符串非常重要。通过检查第一个找到的是否为 Nothing,可以积极地实现这一点。如果它不是 Nothing,那么我们可以继续执行下一步:


VBA NEXT function in Microsoft Excel

此条件将确保代码仅在至少找到一个字符串实例时运行。

步骤 5:存储第一个找到的实例的地址:一旦我们确认找到了字符串,然后我们需要将第一个实例的地址存储在一个变量中以供以后引用。我们可以按如下方式执行此操作:

VBA NEXT function in Microsoft Excel

步骤 6:设置 Do 循环以查找其他实例:在这里,在此特定步骤中,我们将有效地搜索指定字符串的各种其他出现。然后,循环将迭代,直到找到所有实例。使用以下方式开始循环:


VBA NEXT function in Microsoft Excel

并且就在相应的循环内部,我们需要使用FindNext 方法来有效地查找下一个出现。

步骤 7:使用 FindNext 定位下一个实例:在循环内,我们必须使用FindNext 方法来积极地查找字符串的下一个出现。以下是我们如何有效地实现这一点:


VBA NEXT function in Microsoft Excel

然而,此代码行通常会将nextFound设置为包含firstFound之后找到的字符串的下一个实例的单元格,分别。

步骤 8:检查其他实例并退出循环:现在,在此特定步骤中,我们必须确保在没有更多实例可找到时退出循环,为此我们需要包含一个条件来检查nextFound是否为 Nothing。如果是,我们需要退出循环:


VBA NEXT function in Microsoft Excel

步骤 9:更新第一个找到的变量并继续循环:在检查其他实例后,我们将把第一个找到的变量更新为nextFound值,以便循环可以有效地继续搜索:


VBA NEXT function in Microsoft Excel

最后,我们可以使用loop-while条件来继续循环直到找到所有实例。以下是我们必须包含以有效实现我们结果的完整循环结构:


VBA NEXT function in Microsoft Excel

此条件通常确保循环在返回到第一个找到的实例的地址时终止。

步骤 10:处理未找到任何实例的情况:在此步骤中,如果我们搜索的选定字符串根本没有找到,那么通知用户将是一个好习惯。我们可以轻松地添加一个Else 语句来有效地处理这种情况:


VBA NEXT function in Microsoft Excel

如果指定的未在定义的单元格范围内找到,此消息框将有效地提醒用户。

完整示例代码

所以,将所有步骤放在一起,我们将得到如下所示的最终代码:


VBA NEXT function in Microsoft Excel

运行代码:要运行相应的子程序,我们只需按F5键或单击 VBA 编辑器工具栏中的“运行”图标。此操作将执行我们的子程序,然后它将有效地在“立即窗口”中打印出在指定范围内找到的“Orange”所有实例的地址。

VBA NEXT function in Microsoft Excel

Microsoft Excel VBA 中 Find Next 方法的示例

在此相应部分,我们将看到可以使用VBA FindNext为我们目的的各种方法,分别。

#示例 1:查找并突出显示数字的实例

假设我们在 Excel 范围内有一组数字。我们想找到数字 '5' 的所有实例,然后更改包含该特定数字的单元格的背景颜色。我们可以使用VBA FindNext 函数轻松完成此操作,该函数有助于查找给定范围内某个值的一个以上的实例。

VBA NEXT function in Microsoft Excel

步骤 1:创建子程序:首先,我们需要创建一个子程序(一段代码),该程序搜索数字 '5' 的实例并有效地突出显示它们。这是我们相应 VBA 代码的开头。

代码


VBA NEXT function in Microsoft Excel

步骤 2:使用 With 语句:相应的“With 语句”主要用于简化与特定对象相关的命令。在这里,在这种情况下,我们正在处理单元格范围,因此我们可以轻松地使用With来指定范围,该范围主要从所选Sheet1中的单元格A1 到 A10开始。此范围将是代码搜索数字 '5' 的地方。

代码


VBA NEXT function in Microsoft Excel

步骤 3:使用 Find 函数:接下来,我们可以有效地使用Find 函数来搜索指定范围内的值 '5'。如果它找到该值,那么在这种情况下,相应的代码将有效地保存其位置。

代码


VBA NEXT function in Microsoft Excel

步骤 4:检查是否找到值:现在在这个步骤中,为了避免错误,我们可以有效地使用If 条件来检查Find 函数是否找到了该值。如果找到值 '5',那么我们可以有效地以高效的方式在一个变量中存储找到该单元格的地址。

代码


VBA NEXT function in Microsoft Excel

步骤 5:设置 Do 循环:现在,我们需要设置一个Do 循环。此循环将允许代码轻松地重复执行一系列操作。在此循环内部,如果找到了选定单元格范围中的值 '5',那么我们可以轻松地将单元格的背景颜色更改为粉色,字体颜色更改为白色。

代码


VBA NEXT function in Microsoft Excel

步骤 6:使用 FindNext 函数:在此步骤中,更改颜色后,相应的代码将使用FindNext在范围内搜索数字 '5' 的下一个实例。然后,只要FindNext 函数找到该数字的另一个实例,并且单元格地址与第一个找到的地址不同,循环就会继续。

代码

VBA NEXT function in Microsoft Excel

步骤 7:结束 With 语句:在此特定步骤中,一旦找到并突出显示数字 '5' 的所有实例,With块将结束,并且子程序将分别完成。

这是此示例的完整代码:

要运行此代码,我们需要按“F5”键。输出将是包含数字 '5' 的所有单元格(从单元格A1 到 A10)将具有粉色背景和白色字体。

VBA NEXT function in Microsoft Excel

示例 2:基于搜索的连接值

在此示例中,我们将假设我们在两个相应的列中有蔬菜及其价格列表。对此,我们实际上想找到特定蔬菜,例如“胡萝卜 (Carrot)”的所有实例,然后需要将所有这些实例的价格连接(合并)到一个列表中,有效地。FindNext 函数主要用于查找蔬菜名称的每个实例。

VBA NEXT function in Microsoft Excel

步骤 1:创建子程序:首先,我们需要创建一个子程序函数,该函数将最终连接相似目标名称(在此例中为“胡萝卜 (Carrot)”)的值并有效地显示其值。

代码


VBA NEXT function in Microsoft Excel

步骤 2:定义范围:现在在此步骤中,我们需要定义我们要搜索目标值的单元格范围。在此案例中,我们将范围设置为Sheet1A 列中的所有单元格。

代码


VBA NEXT function in Microsoft Excel

步骤 3:设置目标值:在此特定步骤中,我们将设置我们正在搜索的目标值。在这种情况下,该值就是“胡萝卜 (Carrot)”。

代码


VBA NEXT function in Microsoft Excel

步骤 4:定义字符串变量:现在,我们需要定义一个空字符串变量,该变量将有效地用于存储连接的值。当找到“胡萝卜 (Carrot)”的价格时,它们将被有效地添加到此字符串中。

代码


VBA NEXT function in Microsoft Excel

步骤 5:使用 Find 函数:代码然后将使用Find 函数来搜索“胡萝卜 (Carrot)”这个值在定义的范围。如果它找到该值,那么在这种情况下,它将分别存储找到它的单元格。

代码


VBA NEXT function in Microsoft Excel

步骤 6:检查是否找到值:示例 1类似,我们现在可以使用If 条件来确保搜索成功。如果找到“胡萝卜 (Carrot)”,那么我们可以有效地将单元格的地址保存在一个选定的变量中,分别。

代码


VBA NEXT function in Microsoft Excel

步骤 7:设置 Do 循环:然后,我们可以在此循环内部设置一个Do 循环,代码将有效地将“胡萝卜 (Carrot)”的价格从第二列添加到连接值的字符串中。

代码


VBA NEXT function in Microsoft Excel

步骤 8:使用 FindNext 函数:在此步骤中,在将价格添加到字符串后,代码将有效地使用FindNext来查找范围内的“胡萝卜 (Carrot)”的下一个出现。然后,这个过程将为找到的“胡萝卜 (Carrot)”的每个实例有效地继续。

代码


VBA NEXT function in Microsoft Excel

步骤 9:退出循环:在此步骤中,循环将一直运行,直到没有更多“胡萝卜 (Carrot)”的实例。一旦找到最后一个实例,循环将退出。

代码


VBA NEXT function in Microsoft Excel

步骤 10:删除额外的字符:现在,为了使列表看起来整洁,代码将使用 Left 函数来分别删除连接值末尾的多余空格和逗号。

步骤 11:显示消息框:最后,如果该范围中找不到“胡萝卜 (Carrot)”,那么代码将显示一条消息框,说明该值未找到。如果找到,那么在这种情况下,它将显示一个消息框,其中包含连接价格列表。

代码


VBA NEXT function in Microsoft Excel

这是此示例的完整代码:

之后,我们需要按绿色箭头来运行此代码。结果将是一个消息框,显示“胡萝卜 (Carrot)”的连接价格。

VBA NEXT function in Microsoft Excel

注意事项

关于在 Microsoft Excel 中使用VBA NEXT 函数时个人需要记住的各种要点如下:

  1. 在使用Find 方法继续搜索下一个出现时,应始终使用相应的FindNext
  2. 为了获得VBA Find Next空列,必须使用FindNext在一个循环中迭代指定值在选定单元格范围内的所有出现。
  3. 为了确保在所选范围内正确导航,必须更新循环每次迭代中对相应找到单元格的引用。
  4. 不要假设循环将始终无限期地继续。它也可以根据我们的具体需求包含一个终止条件。
  5. 在使用同一循环中的Find 和 FindNext时,必须避免修改搜索范围(例如,在 VBA 中插入或删除行)。
  6. 不要假设找到的出现将始终是连续的。FindNext从当前单元格继续搜索,不一定从范围的顶部开始,分别。

常见问题解答/FAQ

关于在 Microsoft Excel 中使用VBA NEXT函数经常被问到的各种问题如下:

问题 1:在 Microsoft Excel VBA 中使用 Next 函数的主要目的是什么?

答案: VBA Microsoft Excel 中的相应Next 函数主要用于在For...Next 循环中移动到下一个迭代。然而,简单地说,当我们编写代码并需要重复执行某个操作多次时——例如,处理电子表格中的每一行——那么Next 函数主要帮助 Microsoft Excel 理解何时有效地从一次迭代移动到下一次迭代。

这是一个示例

在此相应循环中,代码将用从 1 到 10 的数字填充前十行的第一列。更常见的是,循环末尾的Next i告诉 Microsoft Excel 将 i 的值增加一,然后继续循环直到 i 等于 10。

问题:2 相应的 Next 函数与其他 Microsoft Excel VBA 中的循环控制函数有何不同?

答案:众所周知,相应的 VBA 主要提供多种遍历数据或重复代码的方法,但For...Next 循环Do While 或 For Each 循环等替代方案更简单、更直接。

  • For...Next 循环:当我们实际知道要迭代的次数时,它会被有效地使用。它适用于固定范围或计数。
  • For Each 循环:通常用于遍历集合或对象(如工作表或范围)。该循环不进行数字控制,而是通过遍历集合中的每个项目来工作。
  • Do While/Do Until 循环:基于条件循环的灵活性更高。循环一直持续到满足或失败条件。当我们实际上不知道需要重复代码多少次时,它非常有用。
  • Next 函数特定于For...Next循环,并指示 Microsoft Excel 分别移动到下一个迭代或单元格范围中的下一个数字。

问题 3:我们可以嵌套 For...Next 循环吗?在这种情况下 Next 函数如何表现?

答案:是的,我们可以轻松地嵌套For...Next循环,这意味着我们可以轻松地将一个循环放在另一个循环内部。当我们这样做时,我们需要小心Next 函数,因为每个循环都必须有自己的Next 语句

  • 例如,如果我们想在电子表格中遍历行和列,我们可以有效地使用两个嵌套的For...Next 循环:

在这里,在这种情况下:

  • 外层循环通常会遍历行(1 到 10)。
  • 内层循环会遍历列(1 到 5)。
  • Next j 移至下一列,并且在处理完所有列后,Next i 移至下一行。
  • 关键点是每个循环都需要其相应的 Next 语句。

问题 4:如何轻松地使用 Microsoft Excel 中的 Next 函数处理跳过迭代或退出循环?

答案:有时,我们实际上需要根据条件跳过循环中的某些迭代或完全停止循环。VBA 主要允许使用If...Then 和 Exit For等控制语句来实现这一点。

跳过迭代:我们可以有效地使用If...Then来检查条件,然后如果想跳到下一个迭代,我们需要使用 Continue For(或提前退出)。

  • 例如,如果我们想在循环中跳过偶数,我们可以使用这个:

退出循环:我们可以使用Exit For 在循环完成之前跳出循环。如果我们在循环结束前需要找到我们要查找的结果,这会很有用。

如果第一列中的单元格包含“Stop”一词,这将停止循环,并且将大大提高我们管理和有效处理数据的能力。