前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA专题04:Like运算符详解

VBA专题04:Like运算符详解

作者头像
fanjy
发布2019-09-09 16:08:27
2.3K0
发布2019-09-09 16:08:27
举报
文章被收录于专栏:完美Excel完美Excel完美Excel

Like运算符用于判断给定的字符串是否与指定的模式相匹配,其语法为:

结果=<字符串> Like <模式>

其中:

1.<字符串>为文本字符串或者对包含文本字符串的单元格的引用,是要与<模式>相比较的字符串,数据类型为String型。

2.<模式>数据类型为String型,可以使用一些特殊字符,其它的字符都能与它们相匹配,如下图1所示。

图1

3.<结果>为Boolean型。如果字符串与指定的模式相匹配,则<结果>为True;否则<结果>为False。如果字符串或者模式Null,则结果为Null。

4.Like运算符默认的比较模式区分大小写。可以用OptionCompare语句来改变比较模式,如改变为文本比较模式,则不区分大小写。

5.[字符列表]将模式中的一组字符与<字符串>中的一个字符进行匹配,可以包含任何一种字符,包括数字。

6.在[字符列表]中使用连字号(-)产生一组字符来与<字符串>中的一个字符相匹配,如[A-D]与<字符串>相应位置的A、B、C或D匹配.

7.在[字符列表]中可以产生多组字符,如[A-DH-J];各组字符必须按照排列顺序出现。

8.在[字符列表]的开头或结尾使用连字号(-)与连字号自身相匹配,例如[-H-N]与连字号(-)或H到N之间的任何字符相匹配。

9.在[字符列表]中的一个字符或者一组字符前加上!号,表明与该字符或该组字符之外的所有字符匹配,如[!H-N]与字符H-N范围之外的所有字符匹配;而在[]外使用!号则只匹配!自身。

10.要使用任何特殊字符作为匹配字符,只需将它放在[]中即可,例如[?]表明要与一个问号进行匹配。

11.为了与左括号 ([)、问号 (?)、数字符号 (#)和星号(*) 等特殊字符进行匹配,可以将它们用方括号括起来。不能在一个组内使用右括号 (]) 与自身匹配,但在组外可以作为个别字符使用。

示例1:基本用法

下面的代码演示了Like运算符的基本使用:

Sub testLikePattern()

Dim bLike1 As Boolean

Dim bLike2 As Boolean

Dim bLike3 As Boolean

Dim bLike4 As Boolean

Dim bLike5 As Boolean

Dim bLike6 As Boolean

Dim bLike7 As Boolean

'返回 True

bLike1 = "aBBBa"Like "a*a"

'返回 True

bLike2 = "F" Like"[A-Z]"

'返回 False

bLike3 = "F" Like"[!A-Z]"

'返回 True

bLike4 = "a2a"Like "a#a"

'返回 True

bLike5 = "aM5b"Like "a[L-P]#[!c-e]"

'返回 True

bLike6 = "BAT123khg" Like "B?T*"

'返回 False

bLike7 = "CAT123khg" Like "B?T*"

End Sub

示例2:自定义字符比较函数

下面是一个简单的自定义函数IsLike:

'摘自Excel高级VBA编程宝典

Function IsLike(text As String, _

pattern As String) _

As Boolean

IsLike = text Like pattern

End Function

如果文本字符串text与指定的模式pattern匹配,该函数则返回True。该函数接受两个参数:

text:字符串或者是对包含字符串的单元格的引用。

pattern:包含有如上表1所示特殊字符的字符串。

在工作表公式中可以方便地使用IsLike函数:

1.下面的公式返回True。因为*匹配任意数量的字符,所以如果第一个参数是以“g”开始的任意文本,则返回True:

=IsLike(“guitar”,”g*”)

2.下面的公式返回True。因为?匹配任意的单个字符,所以如果第一个参数是以“Unit12”,则返回False:

=IsLike(“Unit1”,”Unit?”)

3.下面的公式返回True,因为第一个参数是第二个参数的某个单个字符:

=IsLike(“a”,”[aeiou]”)

4.如果单元格A1包含a,e,I,o,u,A,E,I,O或者U,那么下面的公式返回True。使用Upper函数作为参数,可以使公式不区分大小写:

=IsLike(Upper(A1),Upper(“[aeiou]”))

5.如果单元格A1包含以“1”开始并拥有3个数字的值(也就是100到199之间的任意整数),那么下面的公式返回True:

=IsLike(A1,”1##”)

示例3:分类统计所选单元格区域中的文本字数

下面的代码可用于统计所选单元格区域中的总字数、汉字数、字母数及数字数:

Sub SubTotalSelectionCharNum()

Dim str As String

Dim ChineseChar As Long

Dim Alphabetic As Long

Dim Number As Long

Dim i As Long

Dim rng As Range

Dim j As Long

'遍历所选单元格

For Each rng In Selection

'字数累加

j = j + Len(rng.Value)

For i = 1 To Len(rng)

'逐个取字符

str = Mid(rng.Value, i,1)

If str Like "[一-龥]" = True Then

'汉字累加

ChineseChar =ChineseChar + 1

ElseIf str Like "[a-zA-Z]" = True Then

'字母累加

Alphabetic =Alphabetic + 1

ElseIf str Like "[0-9]" = True Then

'数字累加

Number = Number + 1

End If

Next

Next

MsgBox "所选单元格区域中共有字数"& j & "个,其中:" _

& vbCrLf & "汉字:" & ChineseChar & "个" & _

vbCrLf & "字母:" &Alphabetic & "个" & _

vbCrLf & "数字:" &Number & "个", _

vbInformation, "文本分类统计"

End Sub

在示例工作表中运行代码的结果如下图2所示。

图2

示例4:判断用户窗体文本框中的输入是否符合要求

如下图3所示的用户窗体,其中放置了一个文本框和一个按钮。

图3

“确定“按钮控件的代码如下:

Private Sub CommandButton1_Click()

Dim sEnd As String, sPattern As String

sEnd = "in excelperfect"

sPattern = "[F W]*" & sEnd

If TextBox1.Text Like sPattern Then

MsgBox "输入正确"

Else

MsgBox "输入错误"

End If

End Sub

此时,当用户在文本框中输入文本,单击“确定“按钮后,如果输入的是以字符F或字符W开头并以“in excelperfect”结尾的句子,将显示“输入正确”消息框,否则将显示“输入错误”的消息框。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档