Excel VBA中判斷變數包含特定字串,一般用vba like函式進行判斷。
Like運算子是字串比較時經常使用的運算子,也是VBA較難掌握的運算子。
語法:
結果 = 字串 Like 模式
如果字串與模式匹配,結果為True,否則為False。但是如果Like兩端的字串和模式有一個為Null,則結果為Null。
VBA內建的模式匹配功能提供了豐富的字串比較方式,在模式表示式中可以使用萬用字元、字元列表(或字元區間)的任何組合來匹配字串。
模式中的字元 與模式匹配的字串中的字元
? 任何單一字元
* 零個或多個字元
# 任何一個數字(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
唯一的例外是[]被看作長度為零的字串。
(2)字元列表中的單個字元,沒有順序要求,上面[ABCDEGHIJ2345]和[ACDEGHIJ2345B]
[3ABCDEGHIJ245]...等等是一樣的表達。
(3)字元列表中一段連續的字元(稱為區間,一個字元列表可以有多個區間,廣義上,單個字元也可被看作一個區間),可以使用連字元(-,減號)簡化表示式,如上面的表示式[ABCDEGHIJ2345]可以簡化為[A-EG-J2-5],連字元要遵循從小到大的順序(升序),即連字元(-)右端的字元應大於左端的字元,如其中的A-E不能寫成E-A,後者系統會報錯。但多個區間之間沒有順序要求,這意味著[G-J2-5A-E]、[2-5G-JA-E]...等是同一表達。
Excel VBA中判斷變數包含特定字串,一般用vba like函式進行判斷。
Like運算子是字串比較時經常使用的運算子,也是VBA較難掌握的運算子。
語法:
結果 = 字串 Like 模式
如果字串與模式匹配,結果為True,否則為False。但是如果Like兩端的字串和模式有一個為Null,則結果為Null。
VBA內建的模式匹配功能提供了豐富的字串比較方式,在模式表示式中可以使用萬用字元、字元列表(或字元區間)的任何組合來匹配字串。
模式中的字元 與模式匹配的字串中的字元
? 任何單一字元
* 零個或多個字元
# 任何一個數字(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
唯一的例外是[]被看作長度為零的字串。
(2)字元列表中的單個字元,沒有順序要求,上面[ABCDEGHIJ2345]和[ACDEGHIJ2345B]
[3ABCDEGHIJ245]...等等是一樣的表達。
(3)字元列表中一段連續的字元(稱為區間,一個字元列表可以有多個區間,廣義上,單個字元也可被看作一個區間),可以使用連字元(-,減號)簡化表示式,如上面的表示式[ABCDEGHIJ2345]可以簡化為[A-EG-J2-5],連字元要遵循從小到大的順序(升序),即連字元(-)右端的字元應大於左端的字元,如其中的A-E不能寫成E-A,後者系統會報錯。但多個區間之間沒有順序要求,這意味著[G-J2-5A-E]、[2-5G-JA-E]...等是同一表達。