没有合适的资源?快使用搜索试试~ 我知道了~
VBA字符串用法(自整理)[参照].pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 147 浏览量
2021-10-12
01:13:23
上传
评论
收藏 164KB PDF 举报
温馨提示
试读
22页
VBA字符串用法(自整理)[参照].pdf
资源推荐
资源详情
资源评论
VBA 字符串用法
一、字符串比较:
1.解读 Like运算符
Like 运算符是字符串比较时经常使用的运算符,也是 VBA 较难掌握的运算符。
语法:
result = string Like pattern
Like 运算符的语法具有以下几个部分:
部分 描述
result 必需的;任何数值变量。
string 必需的;任何字符串表达式。
pattern 必需的;任何字符串表达式,遵循 “说明 ”中的模式匹配约定。
如果字符串 (string ) 与模式 (pattern ) 匹配, 结果为 True,否则为 False。但是如果 Like 两端
的字符串和模式有一个为 Null,则结果为 Null。
VBA 内建的模式匹配功能提供了丰富的字符串比较方式,在模式 (pattern ) 表达式中可以使
用通配符、字符列表(或字符区间)的任何组合来匹配字符串。
pattern 中的字符 符合 string 中的
? 任何单一字符
* 零个或多个字符
# 任何一个数字( 0-9)
[字符列表 ] 字符列表中的任何一个字符
[! 字符列表 ] 不在字符列表中的任何一个字符
其它字符 (串) 与自身匹配
1). Like 在字符串比较时受 Option Compare 语句的影响,在默认情况下( Option Compare
Binary),字符比较根据内部二进制表示法( ASCII码)进行,是区分大小写的,此时 "A" Like
"a" 的结果为 False。如果声明了 Option Compare Text,则不区分大小写比较, "A" Like "a" 的
结果为 True。
后面的讨论假设默认情况下。
2). 如果模式中没有使用通配符( ?、*、#)和字符列表,此时 Like 运算符等价于 =(等号)
运算符。下面表达式的结果相同。
s Like "AB"
s = "AB"
3). 字符列表
理解字符列表的用法是学会 Like 的难点
(1) 一个字符列表匹配的是字符串中的一个字符,不管字符列表中实际有多少个字符。
"A" Like [ABCDEGHIJ2345] 结果为 True
"AB" Like [ABCDEGHIJ2345] 结果为 False
唯一的例外是 [] 被看作长度为零的字符串。
问:
“一个字符列表匹配的是字符串中的一个字符,不管字符列表中实际有多少个字符。 ”
"A" Like [ABCDEGHIJ2345]
结果为
True
"AB" Like [ABCDEGHIJ2345] 结果为 False
这个不理解。
为什么
"A" Like [ABCDEGHIJ2345]
结果为
True
而多一个
B
就为
“False ”
答:
和模式 [ABCDEGHIJ2345] 匹配的字符串需符合两个条件 :
1.它是有 1 个字符组成的字符串 .因为这个模式只有一个字符列表 .
2.这个字符是 ABCDEGHIJ2345中的一个 .
"A"
符合这两个条件
.
所以为
TRUE
"AB"不符合第 1 个条件 .结果为 FALSE
问:
"AB" 不也是包含在 ABCDEGHIJ2345 的吗?难道有两个字符以上就不能比较是否包含
在另一个字符串(字符列表)里面?谢谢!
答:
如果要判断字符串是否由两个上面的字符组成 :
模式为 [ABCDEGHIJ2345][ABCDEGHIJ2345]
这时上面的 "A" 不匹配 ,"AB"匹配
(2) 字符列表中的单个字符,没有顺序要求,上面 [ABCDEGHIJ2345]和 [ACDEGHIJ2345B]、
[3ABCDEGHIJ245]...等等是一样的表达。
(3) 字符列表中一段连续的字符(称为区间,一个字符列表可以有多个区间,广义上,单个
字符也可被看作一个区间) ,可以使用连字符( -,减号)简化表达式,如上面的表达式
[ABCDEGHIJ2345]可以简化为 [A-EG-J2-5],连字符要遵循从小到大的顺序(升序) ,即连字符
(-)右端的字符应大于左端的字符,如其中的 A-E 不能写成 E-A,后者系统会报错。但多个区
间之间没有顺序要求,这意味着 [G-J2-5A-E]、[2-5G-JA-E]...等是同一表达。但下面的表达是错
误的,同时也是常见的:
[A-E G-J 2-5]、[A-E,G-J,2-5]、[A-E;G-J;2-5]
也许只是一种习惯或想当然,第一个除了要求表达的 ABCDEGHIJ2345外,还多加了一个空
格;后面两个分别多了逗号 (,)和分号 (;)。
"," Like [A-EG-J2-5] 结果为 False
"," Like [A-E,G-J,2-5] 结果为 True
(4) 被中括号( [])括起的字符列表中的字符, ?、* 、#不被理解为通配符,而是表示符号自
身。如果要表示 -(减号,连字符) ,可以放在列表的开头或结尾。如 [ABC-]、[-ABC]。
"3" Like "?" 结果为 True
"3" Like "[?]" 结果为 False
"?" Like "[?]" 结果为 True
这一特性通常被用作特殊字符的表示, 例如, 除了通配符外, 左括号 ([)等特殊字符都可以
将它们用方括号括起来。 要注意的是, 也不能在一个组内使用右括号 (]) 与自身匹配, 但在
组外可以作为个别字符使用。
(5) 在字符列表加上 !(感叹号)开头,表示要匹配的是不在字符列表中的任一字符(不包括
开头的 !自身)。[!!] 表示除了感叹号之外的任一字符。
4). 例子
下面是 EXCEL/VBA帮助中举的几个 Like 运算符的例子,对照结果看看,如果和你想的结果
都一样,说明你已经基本掌握了 Like 用法。
Dim MyCheck
MyCheck = "aBBBa" Like "a*a" ' 返回 True。
MyCheck = "F" Like "[A-Z]" '
返回
True
。
MyCheck = "F" Like "[!A-Z]" ' 返回 False。
MyCheck = "a2a" Like "a#a" ' 返回 True。
MyCheck = "aM5b" Like "a[L-P]#[!c-e]" ' 返回 True。
MyCheck = "BAT123khg" Like "B?T*" ' 返回 True。
MyCheck = "CAT123khg" Like "B?T*" '
返回
False
。
5). 思考题
假设有一字符串 s,写出表达式,判断 s 是否是仅由字母组成并且以字母 e(E)结尾的字符
串。
Sub
主程序
()
字符串 ("aasdfasdba1E")
End Sub
Function 字符串 (s As String)
Dim b As Long, a As Long
If Mid(s, Len(s), 1) Like "[eE]" Then
b = b + 1
For a = 1 To Len(s) - 1
If Mid(s, a, 1) Like "[a-zA-Z]" Then
b = b + 1
End If
Next
End If
If b = Len(s) Then
MsgBox "完全正确 "
End If
End Function
总是测试不成功,在这个基础上,改一改吧:
Sub
字符串
()
Dim b As Long, a As Long
Dim s As String
s = "aasdfasdbaE"
' If Mid(s, Len(s), 1) Like "[eE]" Then
' b = b + 1
For a = 1 To Len(s)
If Mid(s, a, 1) Like "[a-zA-Z]" Then
b = b + 1
End If
Next
' End If
If b = Len(s) And Right(s, 1) Like "[eE]" Then
MsgBox "完全正确 "
Else
MsgBox "No"
End If
End Sub
2.StrComp函数
StrComp 函数返回字符串比较的结果。其语法为:
StrComp(string1,string2[,compare])
其中,参数 string1 和 strng2 为必需的参数,可以是任何有效的字符串表达式。
参数 Compare 为可选参数,如果该参数为 Null ,将发生错误。
如果参数 Compare 设置为常数 vbUseCompareOption 或-1 或忽略该参数,将使用 Option
Compare 语句设置进行比较;
如果忽略该参数且没有设置 Option Compare 语句,则按二进制进行比较;
如果参数 Compare 设置为常数 vbBinaryCompare 或 0,则用二进制进行比较;
如果参数 Compare 设置为常数 vbTextCompare 或 1,则按文本进行比较;
如果参数 Compare 设置为常数 vbDatabaseCompare 或 2,此时仅适用于 Microsoft Access,
进行基于数据库信息的比较。
StrComp 函数的返回值为:
如果 String1<String2,则返回值为 -1;
如果 String1=String2,则返回值为 0;
如果 String1> String2,则返回值为 1;
如果 String1 或 String2 为 Null,则返回值为 Null。
看看下面的示例:
Sub testStringCompare()
Dim MyStr1 As String, MyStr2 As String, MyComp1, MyComp2, MyComp3, MyComp4
MyStr1 = "ABCD"
MyStr2 = "abcd"
MyComp1 = StrComp(MyStr1, MyStr2, 1) ' 返回 0
MyComp2 = StrComp(MyStr1, MyStr2, 0) ' 返回 -1
MyComp3 = StrComp(MyStr1, MyStr2) ' 返回 -1
MyComp4 = StrComp(MyStr2, MyStr1) '
返回
1
MsgBox "StrComp(MyStr1, MyStr2, 1) 的结果为 :" & MyComp1
MsgBox "StrComp(MyStr1, MyStr2, 0)
的结果为
:" & MyComp2
MsgBox "StrComp(MyStr1, MyStr2) 的结果为 :" & MyComp3
MsgBox "StrComp(MyStr2, MyStr1) 的结果为 :" & MyComp4
End Sub
示例说明:如果 StrComp 函数的第三个参数值为 1,则以文本比较的方式进行字符串比较;
如果第三个参数值为 0 或忽略该参数, 则以二进制比较的方式进行字符串比较。 注意, 文本
比较的方式不区分字母大小写,而二进制比较方式则区分大小写。
示例:完成一次简单的单一比较,如
If UCase(sString1)<UCase(sString2) Then
比使用 StrComp 函数:
If StrComp(sString1,sString2,vbTextCompare)=-1 Then
在性能上要提高 30%,且更容易阅读和理解。
Option Compare
在模块级别中使用,用于声明字符串比较时所用的缺省比较方法。
语法: Option Compare {Binary | Text | Database}
说明:如果使用,则 Option Compare 语句必须写在模块的所有过程之前。
Option Compare 语句为模块指定字符串比较的方法( Binary、Text 或 Database)。如果模块
中没有 Option Compare 语句,则缺省的文本比较方法是 Binary。
Option Compare Binary 是根据字符的内部二进制表示而导出的一种排序顺序来进行字符串
比较。在 Microsoft Windows 中,排序顺序由代码页确定。
典型的二进制排序顺序如下例所示:
A < B < E < Z < a < b < e < z
Option Compare Text 根据由系统国别确定的一种不区分大小写的文本排序级别来进行字符
串比较。当使用 Option Compare Text 对相同字符排序时,会产生下述文本排序级别:
(A=a) < ( _=_) < (B=b) < (E=e) < (_=_) < (Z=z) < (_=_)
Option Compare Database 只能在 Microsoft Access 中使用。 当需要字符串比较时, 将根据数
据库的国别 ID 确定的排序级别进行比较。
二、字符串替换: Mid 语句
Mid 语句:替换字符串的部分内容
是的,你没有看错,我是说 Mid 语句,而不是 Mid 函数。
让我们看一个例子。
已知:字符串 s="12345" ,整数 i=2
要求 :将 s 的第 i 个字符替换为 "d"
通常的方法 (Mid 函数 ):
s=left(s,i-1) & "d" & mid(s,i+1)
Mid 语句的方法:
Mid(s, i, 1) = "d"
下面我们来看看帮助中介绍的的 Mid 语句
在一 Variant (String) 变量中以另一个字符串中的字符替换其中指定数量的字符。
语法
剩余21页未读,继续阅读
资源评论
czq131452007
- 粉丝: 2
- 资源: 12万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- shufflenet模型-python语言pytorch框架训练识别樱桃新鲜度-不含数据集图片-含逐行注释和说明文档.zip
- 优质资源,让 .NET 开发更简单,更通用,更流行
- resnet模型-基于深度学习对苹果颜色识别-不含数据集图片-含逐行注释和说明文档.zip
- mobilenet模型-基于图像分类算法对食物美食识别-不含数据集图片-含逐行注释和说明文档.zip
- ImmunityDebugger
- mobilenet模型-python语言pytorch框架的图像分类食品口味分类识别-不含数据集图片-含逐行注释和说明文档
- MCU云快充协议C语言实现库软件源代码.zip
- oledump 0.56版本
- densenet模型-基于人工智能的卷积网络训练识别人肤色-不含数据集图片-含逐行注释和说明文档.zip
- 一套快速开发JavaWEB项目,优质毕设,少造轮子
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功