如何在VBA中使用InStr函数(3个简单例子)

  • Share This
Hugh West

在使用Excel VBA代码的过程中,我们会遇到一些内置的函数,它们可以将复杂的任务转化为一个小的单行代码。 术语 是Excel VBA中的一个函数,它可以从一个给定的位置开始在另一个给定的字符串中搜索一个特定的字符串。 今天我将展示如何使用 术语 VBA中的函数可以在另一个给定的字符串中搜索一个特定的字符串。

下载实践工作手册

InStr函数.xlsm

讲座介绍 VBA的InStr函数

  • 摘要

在一个给定的字符串中搜索一个特定的字符串,从一个给定的位置开始。 如果找到一个匹配,返回给定字符串中匹配开始的位置。

  • 语法

InStr([start],string1,string2,[compare])

  • 论点
争论 要求 描述

[开始] 可选 开始搜索的位置。 默认为1。
绳子1 需要 它在其中搜索一个给定的字符串。
绳子2 需要 它在一个给定的字符串中搜索的字符串。
[比较] 可选 一个介于{-1,0,1,2}之间的数值,用于指定比较的类型。 默认为-1(vbUseCompareOption)。 如果没有指定Option Compare语句,则执行二进制比较。

请注意。

  • 虽然 [开始] 论点和 [比较] 参数是可选的,你需要 [开始] 参数,如果你指定 [比较] 否则,它将引发一个错误。
  • 如果其中一个或两个 [开始] 论点和 [比较] 论点是 ,你将面临一个错误。
  • 中的四个指定值。 [比较] 争论执行四种不同类型的比较。 它们在下面提到。
价值 恒定的 描述

-1 vbUseCompareOption 执行选项比较语句中指定的比较。
0 vbBinaryCompare 执行二进制比较。
1 vbTextCompare 执行一个文本比较。
2 vbDatabaseCompare 在你的数据库基础上进行比较。
  • 选项比较 语句是在主VBA代码开始前提供的语句,它指定了代码在需要时是搜索二进制比较还是文本比较。

选项比较文本

    • 简单来说 , 二进制比较 表示区分大小写的比较。
    • 简单来说 , 文本比较 表示不区分大小写的比较。
  • 返回值
    • 返回在 绳子1 从其中 弦乐2 开始了。
    • 如果是这样的话 弦乐2 内没有找到 绳子1 开始 位置,返回0。
    • 如果 绳子1 是零长度的,返回0。
    • 如果 弦乐2 是零长度的,返回参数 开始 .
    • 最后,如果有任何 绳子1 弦乐2 ,返回一个错误。

3个简单的例子来使用VBA的InStr函数

在本节中,我们将看到三个应用VBA的简单例子 术语 让我们看看Excel中的第一个例子 术语 在VBA代码中的函数。

1.决定一个地址是否是电子邮件地址 通过使用VBA的InStr函数

在这里,我们采取了一个包含一些客户联系地址的数据集。 我们在这里的目标将是识别这些地址是否是电子邮件地址。

现在我们将开发一个VBA代码,使用 术语 要做到这一点,请遵循以下步骤。

步骤。

  • 在开始的时候,去到 开发商 选项卡,并选择 视觉基础 ( 或按 Alt+F11) 以打开 VBA 窗口。

  • 然后,在 VBA 窗口,转到 插入> 模块 .

  • 之后,在模块上,粘贴以下代码。
 Function DECISION(string1 As String) Dim Position As Integer Position = InStr(1, string1, "@", 0) If Position = 0 Then DECISION = "Not Email" Else DECISION = "Email" End If End Function 

  • 此外,我们还创建了一个名为 决定 它决定一个地址是否是电子邮件地址。 让我们把这个函数应用到我们的数据集上。
  • 关于细胞 C5 写下下面的公式,然后用自动填充其余的单元格。 填充手柄 .
=DECISION(B5)

  • 正如我们所看到的,我们已经识别了每个地址,无论它是否是电子邮件地址。

🎓 代码是如何工作的?

  • 函数 DECISION(string1 As String)

首先,这创建了一个名为 决定 的字符串参数,名为 绳子1 .

  • 位置为整数

它声明了一个整数变量,名为 职务 .

  • 位置 = InStr(1, string1, "@", 0)

这就把 职务 变量的输出,作为 术语 函数,其参数为 1, string1, "@" 0 简而言之,这就指定了地址中的位置,那里有一个 "@" .

  • 如果Position = 0,那么DECISION = "Not Email"

它分配了 决定 功能为 "不是电子邮件" ,如果 职务 变量是 0 ,这意味着,没有 "@" 在地址中。

(回顾一下,如果在给定的字符串中找不到任何字符串,则 术语 函数返回 0 ).

  • 否则 DECISION = "电子邮件"

这就把 决定 功能为 "电子邮件" 如果有一个 "@" 因此,地址中存在着 "@" 被归类为 电子邮件 ,其余的被归类为 "不是电子邮件" .

类似读物

  • 如何在Excel中使用VBA的UCASE函数(4个例子)
  • 在Excel VBA中使用MsgBox函数(完整指南)
  • 如何在Excel中使用VBA的SPLIT函数(5个例子)
  • 在Excel的VBA中使用LCase函数(附4个例子)
  • 如何在Excel VBA中使用修复函数(4个例子)

2. 利用VBA的InStr函数 提取出一些电子邮件地址的扩展名

在这里,我们有一个一些客户的电子邮件地址列表。 这次我们将提取电子邮件地址的扩展名,如他们是否有 gmail.com yahoo.com .

要做到这一点,请遵循以下步骤。

步骤。

  • 首先,像前面的方法一样,打开一个新的 VBA 模块,并在窗口中粘贴以下代码。
 Function EXTENSION(Email As String) Dim Position As Integer Position = InStr(1, Email, "@", 0) EXTENSION = Right(Email, (Len(Email) - Position) End Function 

  • 此外,我们还创建了一个名为 延长线 它可以提取任何电子邮件地址的扩展名。
  • 此外,让我们把这个函数应用到我们的数据集上。 首先,在单元格上输入这个公式 C5 然后双击 填充手柄 .
=EXTENSION(B5)

  • 最后,我们可以看到,我们已经成功提取了所有邮件的扩展名。

🎓 代码是如何工作的?

  • 函数 EXTENSION(Email As String)

这创建了一个新的函数,名为 延长线 ,有一个字符串参数,名为 电子邮件 .

  • 位置为整数

这一部分声明了一个整数变量,名为 职务。

  • 位置 = InStr(1, Email, "@", 0)

这就把 职务 变量的输出,作为 术语 函数,其参数为 1,电子邮件,"@" 0 简而言之,这是将位置分配在 电子邮件 其中有一个 "@" .

  • 延伸 = Right(Email, (Len(Email) - Position))

这一部分分配了 延长线 的功能,作为符号后的字符 "@" 这是对 "中国 "的必要延伸。 电子邮件 .

3.从一个名字中提取出名字或姓氏 通过使用VBA的InStr函数

最后,我们将执行一个完全不同的任务。 这次我们有一个公司的一些雇员的名字,我们将尝试建立一个函数来提取这些雇员的名字或姓氏。

要做到这一点,请遵循以下步骤。

步骤。

  • 首先,类似于 方法一 将下面的代码粘贴在VBA窗口的一个新模块中。
 Function SHORTNAME(Name As String, First_or_Last As Integer) Dim Break As Integer Break = InStr(1, Name, " ", 0) If First_or_Last = -1 Then SHORTNAME = Left(Name, Break - 1) Else SHORTNAME = Right(Name, Len(Name) - Break) End If End Function 

  • 在这里,我们创建了一个名为 简称 让我们把这个公式应用于我们的数据集。
  • 首先,为了提取第一个名字,在单元格中写下以下公式 C5 .
=shortname(b5,-1)

  • 最后,为了提取姓氏,我们写下以下公式,在 D5 :
=shortname(b5,1)

  • 之后,如果我们在其余的单元格中自动填入 填充处理程序 ,我们将看到我们所期望的结果。

🎓 代码是如何工作的?

  • 函数 SHORTNAME(Name As String, First_or_Last As Integer)

它创建了一个新的函数,名为 简称 的一个字符串参数,名为 命名 和一个整数参数,名为 第一个或最后一个 .

  • Dim Break As Integer

这一部分声明了一个新的整数变量,名为 休息 .

  • Break = InStr(1, Name, " ", 0)

它分配给 休息 变量的输出,作为 术语 函数,其参数为 1, 名称, " " 0 简而言之,这是将位置分配在 命名 其中有一个 空格("")。

  • 如果 First_or_Last = -1 那么 SHORTNAME = Left(Name, Break - 1)

这一行指定了 简称 的功能,因为在 空间 ,如果 第一个或最后一个 参数为-1,这是第一个名字。

  • SHORTNAME = Right(Name, Len(Name) - Break)

这一部分分配了 简称 的功能,因为在 空间 ,如果 第一个或最后一个 参数为1,这是姓。

总结

通过这种方式,你可以用VBA代码编写 术语 此外,如果你有任何问题,请随时问我们。

Hugh West is a highly experienced Excel trainer and analyst with over 10 years of experience in the industry. He holds a Bachelor's degree in Accounting and Finance and a Master's degree in Business Administration. Hugh has a passion for teaching and has developed a unique teaching approach that is easy to follow and understand. His expert knowledge of Excel has helped thousands of students and professionals worldwide improve their skills and excel in their careers. Through his blog, Hugh shares his knowledge with the world, offering free Excel tutorials and online training to help individuals and businesses reach their full potential.