天天看點

VBA中的字元串處理

1 VBA中的字元串

2 VBA中處理字元串的函數

    2.1 比較字元串

    2.2 轉換字元串

    2.3 建立字元串

    2.4 擷取字元串的長度

    2.5 格式化字元串

    2.6 查找字元串

    2.7 提取字元/字元串

    2.8 删除空格

    2.9 傳回字元代碼

    2.10 傳回數值代表的相應字元

    2.11 使用位元組的函數

    2.12 傳回數組的函數

    2.13 連接配接字元串

    2.14 替換字元串

    2.15 反向字元串

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1 VBA中的字元串

VBA不僅可以處理數字,也可以處理文本(字元串)。VBA提供了兩類字元串:

一類為固定長度的字元串,聲明時包含指字的字元數。例如,下面的語句

Dim strFixedLong As String*100

聲明字元串變量後,無論賦予該變量多少個字元,總是隻包含100個字元,但字元串最長不超過65526個字元,且需要使用Trim函數去掉字元串中多餘的空格。定長字元串隻有在必要時才使用。

另一類為動态字元串。例如,聲明字元串變量Dim strDynamic As String後,可以給該變量任意指派,最多可包含20億個字元。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

2 VBA中處理字元串的函數

2.1 比較字元串

通常,在VBA中進行字元串比較時,會用到比較運算符(如=、>等)、Like運算符和StrComp函數。此外,在子產品的開頭用Option Compare語句指定比較方式。

2.1.1 比較運算符

可以采用簡單的邏輯運算符進行兩個字元串的比較,即<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、=(等于)、<>(不等于)。此外,還可以使用Like運算符進行比較。

2.1.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%,且更容易閱讀和了解。

2.2 轉換字元串

2.2.1 StrConv函數

使用StrConv函數來按指定類型轉換字元串。其文法為:

    StrConv(string,conversion,LCID)

其中,參數string為要轉換的字元串,參數conversion為指定轉換的類型,參數LCID為可選參數。

如果将參數conversion設定為vbUpperCase或1,則将字元串轉換成大寫;設定為vbLowerCase或2,則将字元串轉換成小寫;設定為vbProperCase或3,則将字元串中每個字的開頭字母轉換成大寫;設定為vbUnicode或64,則根據系統的預設碼頁将字元串轉換成Unicode;設定為vbFromUnicode或128,則将字元串由Unicode轉換成系統的預設碼頁。

在将ANSI格式的Byte數組轉換成字元串時,應使用StrConv函數;轉換Unicode格式的數組時,使用指派語句。下面的例子使用StrConv函數将Unicode字元串轉換成ANSI字元串:

Sub testConverseString()

  Dim i As Long

  Dim x() As Byte

  x = StrConv("ABCDEFG", vbFromUnicode)    ' 轉換字元串。

  For i = 0 To UBound(x)

    Debug.Print x(i)

  Next

End Sub

下面的例子将句子中每個詞語的首字母轉換為大寫:

Sub testConverseString2()

  Debug.Print StrConv("my book is this book.", vbProperCase)

End Sub

程式運作後,在VBE視窗中的立即視窗中将會看到上述結果。

下面的示例示範了如何把一個字元串轉換為位元組數組,以便使用在API函數調用中:

Sub Test()

  Dim byArray() As Byte

  Dim sString As String

  sString = "Some stuff"

  byArray = StrConv(sString, vbFromUnicode)

End Sub

StrConv函數将下面的字元看成是字的分隔符:

Null:Chr$(0)

水準制表符:Chr$(9)

換行符:Chr$(10)

垂直制表符:Chr$(11)

換頁符:Chr$(12)

回車符:Chr$(13)

空格:Chr$(32)

 在使用API時該函數很重要,很多程式調用都要求傳遞給它們Unicode字元,或者賦給傳回變量Unicode字元。

2.2.2 Str函數

将數值轉換成字元串,即傳回代表一個數值的字元串。其文法為:

    Str(number)

當一個數字轉成字元串時,總會在前面保留一個空位來表示正負,即字元串的第一位一定是空格或正負号。如果參數number為正,傳回的字元串前面包含一空格。Str函數将句點(.)作為有效的小數點。示例如下:

  MyString = Str(459)    ' 傳回 " 459"

  MyString = Str(-459.65)   ' 傳回 "-459.65"

  MyString = Str(459.001)    ' 傳回 " 459.001"

   使用LTrim函數可删除Str函數在傳回的字元串開頭添加的前導空格。此外,CStr函數和Format函數已經取代了Str函數,CStr函數不用為正數的符号而添加前導空格,Format函數能夠用來識别小數點。

2.2.3 CStr函數

CStr将數值表達式轉換成String資料類型。示例如下:

MyDouble = 437.324   ' MyDouble 為 Double 類型

MyString = CStr(MyDouble)    ' MyString 的内容為"437.324"

[程式設計方法和技巧]

傳遞給CStr的未初始化的數字資料類型傳回“0”,傳遞給CStr的未初始化的日期變量傳回“0:00:00”。

2.3 建立字元串

2.3.1 Space函數

該函數傳回指定數的空格的字元串。文法為:

    Space(number)

其中,參數number必須,為字元串中指定的空格數。

如下例所示:

Sub CreateString1()

  Dim MyString

 ' 傳回 10 個空格的字元串。

  MyString = Space(10)

  ' 将 10 個空格插入兩個字元串中間。

  MyString = "Hello" & Space(10) & "World"

End Sub

該函數可用于在調用外部DLL時建立字元串緩沖區,特别是在調用Window API時。此外,使用該函數還可以使字元串在特定長度的緩沖區左對齊或右對齊。

注意,如果參數number是負數,則會産生運作時錯誤5:“無效的過程調用或參數”。

[程式設計方法和技巧] 可以使用Space函數添加和清除存儲在定長字元串中的資料,例如,下面的代碼用空格填充一個定長字元串:

Dim strFixed As String * 32

……

strFixed = Space(Len(strFixed))

2.3.2 String函數

該函數傳回重複的字元或字元串。其文法為:

    String(number,character)

其中,參數number必須,指定所傳回的字元串的長度;參數character必須,指定字元的字元代碼或字元串表達式。

例如,下面使用String函數生成指定長度且隻含單一字元的字元串。

Sub CreateString2()

  Dim MyString

  MyString = String(5, "*")    ' 傳回 "*****"

  MyString = String(5, 42)    ' 傳回 "*****"

  MyString = String(10, "ABC")    ' 傳回 "AAAAAAAAAA"

End Sub

如果參數number包含Null,則傳回Null;如果參數character包含Null,則傳回Null;參數character可以指定為字元串或者是ANSI字元代碼,如:

strString1=String(128,”=”) ‘用”=”填充

strString2=String(128,0) ‘用Chr$(0)填充

[程式設計方法和技巧]

(1) String函數在用于建立較長的“_”,“-”,或者“=”構成的水準線以便給報表分段時十分有用。

(2) 當調用API函數向緩沖區寫入字元串值時,首先要用String函數建立一個長度合适的字元串變量,并且用諸如Chr$(0)之類的單個字元來填充。

2.4 擷取字元串的長度

可以使用Len函數來确定任何字元串或字元串表達式的長度,其文法為:

    Len(string|varname)

其中,參數string為任何有效的字元串表達式;參數varname為任何有效的變量名稱。兩個參數必須取一。

利用LenB函數可以确定存儲某變量所需的實際位元組數。

下面的示例使用Len函數來擷取某字元串的長度(字元數)或某變量的大小(位數)。

Type CustomerRecord    ' 定義使用者自定義的資料類型

    ID As Integer   ' 将此定義放在正常子產品中

    Name As String * 10

    Address As String * 30

End Type

Sub GetStrLen()

  Dim Customer As CustomerRecord    ' 聲明變量

  Dim MyInt As Integer, MyCur As Currency

  Dim MyString, MyLen

  MyString = "Hello World"    ' 設定變量初值

  MyLen = Len(MyInt)    ' 傳回 2

  MyLen = Len(Customer)    ' 傳回 42

  MyLen = Len(MyString)    ' 傳回 11

  MyLen = Len(MyCur)    ' 傳回 8

End Sub

此外,在需要大量判斷是否為空字元串的代碼中,使用Len函數也可以加快代碼執行的速度。例如:

If strTemp = "" Then

  '要執行的代碼

End If

上面的代碼可以用以下代碼代替:

If Len(strTemp) = 0 Then

  '要執行的代碼

End If

注意:

(1) 參數string和參數varname互不相容,即隻能指定這兩個參數中的某一個,不能同時指定這兩個參數。

(2) 如果參數string或參數varname中包含Null,則Len函數會傳回Null。

(3) 在向檔案寫入某種使用者自定義類型資料時,Len函數會傳回資料的大小(字元數)。

(4) LenB函數傳回使用者自定義類型資料實際占用的記憶體大小。

(5) 在對位元組資料或Unicode字元串使用LenB函數時,LenB函數傳回表示資料或字元串的位元組數。

(6) 不能對對象變量使用Len函數。

(7) 如果參數varname是一個數組,則必須指定一個有效的下标,即Len函數不能确定數組中元素的總數或數組占用記憶體的大小。

(8) Len函數對Variant類型變量的處理和字元串變量一樣,Len函數傳回變量所存儲的實際字元數,如下面的代碼:

Dim vVar

vVar=100

MsgBox Len(vVar)

結果為3。

(9) 由于VB本質上使用的是Unicode字元串(用兩個位元組的空間來存儲一個字元),是以當相同的字元串變量傳遞給Len函數和LenB函數時會出現不同的傳回值。例如,對于一個包含4個字元的字元串,使用Len函數時傳回值為4,使用LenB函數則為8。

(10) 使用強類型變量(即強制聲明該變量的類型)時,Len函數會傳回存儲該變量所需的位元組數。例如,長整型變量的長度為4。

下面的示例說明了為什麼要顯式聲明資料類型:

Sub test()

  Dim lVar As Long

  Dim vVar

  lVar = 10000000

  vVar = 10000000

  MsgBox LenB(lVar) '傳回4

  MsgBox LenB(vVar)'傳回16

End Sub

很顯然,Variant類型變量比強制聲明的類型變量要占用更多的記憶體。

 2.5 格式化字元串

可以使用Format函數規定輸出的字元串的格式,其文法為:

    Format(expression[,format[,firstdayofweek[,firstweekofyear]]])

其中,參數expression必須,為任何有效的表達式;其餘參數均可選。參數format表示所要采用的格式,參數firstdayofweek使用常數,表示一星期的第一天,參數firstweekofyear使用常數,表示一年的第一周。

在參數format中,使用字元“@”,表示空格或字元占位符,如果在輸入的字元串相應位置有字元,則顯示該字元,否則顯示空格;使用字元“&”,表示空或字元占位符,如果在輸入的字元串的相應位置有字元,則顯示該字元,否則不顯示;使用字元“<”,則将所有字元顯示為小寫格式;使用字元“>”,則将所有字元顯示為大寫格式;使用字元“!”,強制占位符從左向右填滿, 滿足預設為從右向左。

例如下面的代碼:

Dim strOut

  strOut = Format("8888888", "(@@@)&&&-&&&&") '傳回(   )888-8888

  strOut = Format("8888888", "(&&&)&&&-&&&&") '傳回()888-8888

在Format函數中,還可以同時格式化普通字元串和空字元串,隻須在指定的格式中用分号隔開兩個部分,第一部分用于非空字元串,第二部分用于空字元串。例如:

strOut = Format("6666666", "(@@@)&&&-&&&&;No Phone") '傳回(   )666-6666

strOut = Format("", "(@@@)&&&-&&&&;No Phone") '傳回No Phone

又如,下面的代碼将字母全部轉換為大寫:

Dim strOut

strOut = Format("Hello", ">@@@@@") ‘傳回HELLO

同理,可以使用“<”将字母全部轉換為小寫。

Format函數的簡要使用規則:

(1) 允許用預先定義或使用者定義的格式來建立多種用于輸出字元串、數字和日期/時間資料的方法。

(2) 建立使用者定義的數值格式最多可以有四個部分,每個部分代表一種不同類型的數值,且用分号分隔。第一部分在單獨命名使用時可用于所有值,與其它多個部分一起使用時隻用于正數;第二部分用于負數;第三部分用于零值;第四部分用于Null值。

在參數format中不必包括所有四部分,但所用部分的數目決定了每一個部分所定義的數值類型:隻有一個部分,則應用于所有數值;有兩個部分,則第一部分應用于正數和零值,第二部分應用于負數;有三個部分,則第一部分用于正數,第二部分應用于負數,第三部分應用于零值;有四個部分,則每部分的使用如前所述。

如果忽略了一個部分,則該部分使用與定義正數的部分一樣的格式,例如:

“#.00;;#,##”

表示負數值與正數值使用同一種格式顯示。

如果參數含有命名格式,則隻能有一個部分。

(3) 字元串值的使用者定義格式有兩個部分,第一部分可應用于所有值,第二部分隻應用于Null值或零長字元串。

(4) 預定義的日期和時間格式如下:

General Date

範例: Format("28/02/2007","General Date")

傳回: 2007-2-28

Long Date

範例: Format("28/02/2007","Long Date")

傳回: 2007年2月28日

Medium Date

範例: Format("28/02/2007","Medium Date")

傳回: 07-02-28

Short Date

範例: Format("28/02/2007","Short Date")

傳回: 2007-2-28

Long Time

範例: Format("17:30:03","Long Time")

傳回: 17:30:03

Medium Time

範例: Format("17:30:03","Medium Time")

傳回: 下午 05:30

Short Time

範例: Format("17:30:03","Short Time")

傳回: 17:30

(5) 預定義的數值格式如下:

General Number

範例: Format(123456.0789,"General Number")

傳回: 123456.0789

Currency

範例: Format(123456.0789,"Currency")

傳回: ¥123,456.08

Fixed

範例: Format(0.2,"Fixed")

傳回: 0.20

Standard

範例: Format(123456.0789,"Standard")

傳回: 123,456.08

Percent

範例: Format(.7321,"Percent")

傳回: 73.21%

Scientific

範例: Format(123456.0789,"Scientific")

傳回: 1.23E+05

Yes/No

範例1: Format(0,"Yes/No")

傳回:  No

範例2: Format(23,"Yes/No")

傳回:  Yes

True/False

範例1: Format(0,"True/False")

傳回:  False

範例2: Format(23,"True/False")

傳回:  True

On/Off

範例1: Format(0,"On/Off")

傳回:  Off

範例2: Format(23,"On/Off")

傳回: On

(6) 建立使用者自定義的日期和時間格式的字元:

C

元素:日期

顯示:基于目前Windows系統的短日期和短時間國際設定格式的日期或時間。

範例:Format("28/02/2007 17:30:03","c")

傳回:2007-2-28 17:30:03

dddddd

元素:日期

顯示:基于目前Windows系統的長日期國際設定格式的完整日期。

範例:Format("28/02/2007","dddddd")

傳回:2007年2月28日

/

元素:日期分隔符

範例:Format("28/02/2007","mm-dd-yyyy")

傳回:02-28-2007

d

元素:日

顯示:1~31範圍内的一個數字,無前導0。

範例:Format("02/02/2007","d")

傳回:2

dd

元素:日

顯示:01~31範圍内的一個數字,有前導0。

範例:Format("02/02/2007","dd")

傳回:02

ddd

元素:日

顯示:英文簡寫(Sun~Sat)

範例:Format("02/02/2007","ddd")

傳回:Fri

dddd

元素:日

顯示:英文全稱(Sunday~Saturday)

範例:Format("02/02/2007","dddd")

傳回:Friday

ddddd

元素:日期

顯示:基于計算機Windows國際設定短日期格式的日期。

範例:Format("02/02/2007","ddddd")

傳回:2007-2-2

h

元素:小時

顯示:0~23範圍内的一個數字,無前導0。

範例:Format("05:08:06","h")

傳回:5

hh

元素:小時

顯示:00~23範圍内的一個數字,有前導0。

範例:Format("05:08:06","hh")

傳回:05

n

元素:分

顯示:0~59範圍内的一個數字,無前導0。

範例:Format("05:08:06","n")

傳回:8

nn

元素:分

顯示:00~59範圍内的一個數字,有前導0。

範例:Format("05:08:06","nn")

傳回:08

s

元素:秒

顯示:0~59範圍内的一個數字,無前導0。

範例:Format("05:08:06","s")

傳回:6

ss

元素:秒

顯示:00~59範圍内的一個數字,有前導0。

範例:Format("05:08:06","ss")

傳回:06

ttttt

元素:時間

顯示:基于12小時制的時間,包含Windows區域設定中指定的時間分隔符和前導0。

範例:Format("05:08:06","ttttt")

傳回:5:08:06

AM/PM

元素:時間

顯示:用大寫的AM和PM表示的12小時制的時鐘格式。

範例:Format("17:08:06","hh:mm:ss AM/PM")

傳回:05:08:06 PM

am/pm

元素:時間

顯示:用小寫的am和pm表示的12小時制時鐘格式。

範例:Format("17:08:06","hh:mm:ss am/pm")

傳回:05:08:06 pm

A/P

元素:時間

顯示:12小時制時鐘格式,用大寫“A”表示AM,大寫“P”表示PM。

範例:Format("17:08:06","hh:mm:ss A/P")

傳回:05:08:06 P

a/p

元素:時間

顯示:12小時制時鐘格式,用小寫“a”表示am,小寫“p”表示pm。

範例:Format("17:08:06","hh:mm:ss a/p")

傳回:05:08:06 p

元素:時間分隔符

顯示:時間格式

範例:Format("17:08:06","hh:mm:ss")

傳回:17:08:06

w

元素:星期幾

顯示:1~7範圍内的一個數字(1~7分别表示星期天到星期六)。

範例:Format("02/02/2007","w")

傳回:6

ww

元素:周

顯示:1~54範圍内的一個數字。

範例:Format("02/02/2007","ww")

傳回:5

m

元素:月

顯示:1~12範圍内的一個數字,無前導0。

範例:Format("02/02/2007","m")

傳回:2

mm

元素:月

顯示:01~12範圍内的一個數字,有前導0。

範例:Format("02/02/2007","mm")

傳回:02

mmm

元素:月

顯示:英文月份簡寫(Jan~Dec)

範例:Format("02/02/2007","mmm")

傳回:Feb

mmmm

元素:月

顯示:英文月份全稱(January~December)

範例:Format("02/02/2007","mmmm")

傳回:February

q

元素:季度

顯示:1~4範圍内的一個數字

範例:Format("02/02/2007","q")

傳回:1

y

元素:一年中的某天

顯示:1~366範圍内的一個數字。

範例:Format("02/02/2007","y")

傳回:33

yy

元素:年

顯示:00~99範圍内的一個兩位數字。

範例:Format("02/02/2007","yy")

傳回:07

yyyy

元素:年

顯示:100~9999範圍内的一個四位數字。

範例:Format("02/02/2007","yyyy")

傳回:2007

(7)用于建立使用者自定義數字格式的字元

說明:數字占位符。如果參數expression所代表的數值在相應的0位置上有一個數字,則顯示這個數字,否則顯示0。所指定的小數點後的位數,使數值舍入為給定的小數位數,但不影響小數點左邊的數字位數。

範例1:Format(23.675,"00.0000")  傳回:23.6750

範例2:Format(23.675,"00.00")  傳回:23.68

範例3:Format(2345,"00000")  傳回:02345

範例4:Format(2345,"00.00")  傳回:2345.00

#

說明:數字占位符。如果參數expression所代表的數值在相應的#位置上有一個數字,則顯示這個數字,否則什麼也不顯示。

範例1:Format(23.675,"##.##")  傳回:23.68

範例2:Format(23.675,"##.####")  傳回:23.675

範例3:Format(12345.25,"#,###.##")  傳回:12,345.25

.

說明:小數點占位符。小數點占位符實際顯示的字元由本機Windows系統國際設定格式決定。

%

說明:百分數占位符。首先将參數expression所代表的數值乘以100,然後把它作為百分數顯示。

範例:Format(0.25,"##.00%") 傳回:25.00%

說明:千位分隔符。實際顯示的字元由本機Windows系統國際設定格式決定。在格式定義中隻需要給出一個千位分隔符。

範例:Format(1000000,"#,###")  傳回:1,000,000

E-E+ e-e+

說明:科學計數法格式。如果格式表達式在E-、E+或e-、e+的右邊至少有一個數字占位符(0或#),數字就以科學計數法格式顯示數字,參數Format中所用的字母E或e在該數字和它的指數之間顯示。右邊的數字占位符數目決定了要在指數中顯示的位數。使用E-或e-可以在負指數前插入一個減号,使用E+或e+可以在正指數前插入一個正号。

範例:Format(1.09837555,"######E-###")  傳回:109838E-5

-+$

說明:顯示一個直接量字元。

範例:Format(2345.25,"$#,###.##")  傳回:$2,345.25

\

說明:反斜杠後的字元以直接量字元顯示。可以用反斜杠将某個特定格式的字元以直接量字元顯示。

範例:Format(0.25,"##.##\%")  傳回:.25%

(8) 用于建立使用者自定義字元串格式的字元

@

說明:字元占位符。如果expression在相應的@位置上有一個字元,就顯示這個字元,否則顯示一個空格。

範例:Format("VBA","\*@\*@@@@@")  傳回:* *  VBA

&

說明:字元占位符。如果expression在相應的&位置上有一個字元,就顯示這個字元,否則什麼也不顯示。

範例:Format("VBA","\*&&\*&&&&")  傳回:**VBA

<

說明:用小寫形式顯示所有字元。

範例:Format("VBA","<")  傳回:vba

>

說明:用大寫形式顯示所有字元。

範例:Format("vba",">")  傳回:VBA

說明:從左向右處理占位符(預設情況為從右向左處理占位符)。

[程式設計方法和技巧]

(1) 使用沒有格式定義的Format函數格式化數字比使用Str函數格式化數字更好。Format函數與Str函數不同,它會把正數中一般保留用于表示符号的前導空格清除掉。

(2) 可以使用Format函數以1000為機關對數字進行标度,做法是在語句中小數點的左邊用一個千位分隔符(,)表示标度數字的一個千位;可以使用多個千位分隔符。例如:

Format(1000000,"##0,.") 傳回:1000.

Format(1000000,"##0,,.")  傳回:1.

2.6 查找字元串

2.6.1 InStr函數

可使用InStr函數傳回一字元串在另一字元串中的位置,是以,也可以使用該函數确定一個字元串中是否包含有另一個字元串。其文法為:

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

其中,參數Start為可選參數,設定查找的起點,如果省略,則從第一個字元的位置開始查找,當指定了參數Compare時,則要指定此參數。參數string1為被查找的字元串,參數string2為要查找的字元串,這兩個參數都是必需的。

如果在String1中沒有找到String2,傳回0;如果找到String2,則傳回String2第一個出現的首字元位置(即1到String1的長度);如果String2的長度為零,傳回Start。

可看看下面的示例:

Sub test()

  Dim SearchString, SearchChar, MyPos

  SearchString = "XXpXXpXXPXXP"   '被搜尋的字元串

  SearchChar = "P"   '要查找字元串 "P"

 '從第四個字元開始,以文本比較的方式找起,傳回值為 6(小寫 p)

  '小寫 p 和大寫 P 在文本比較下是一樣的

  MyPos = InStr(4, SearchString, SearchChar, 1)

  Debug.Print MyPos

  '從第一個字元開使,以二進制比較的方式找起,傳回值為 9(大寫 P)

  '小寫 p 和大寫 P 在二進制比較下是不一樣的

  MyPos = InStr(1, SearchString, SearchChar, 0)

  Debug.Print MyPos

  '預設的比對方式為二進制比較(最後一個參數可省略)

  MyPos = InStr(SearchString, SearchChar)    '傳回 9

  Debug.Print MyPos

  MyPos = InStr(1, SearchString, "W")   '傳回 0

  Debug.Print MyPos

End Sub

2.6.2 InStrRev函數

也可以使用InStrRev函數傳回一個字元串在另一個字元串中出現的位置,與InStr函數不同的是,從字元串的末尾算起。其文法為:

    InStrRev(String1,String2[,[Start[,compare])

參數String1為被查找的字元串,參數String2為要查找的字元串,這兩個參數都是必需的。參數Start為可選參數,設定每次查找開始的位置,若忽略則使用-1,表示從上一個字元位置開始查找。參數Compare為可選參數,表示所使用的比較方法,如果忽略則執行二進制比較。

下面的示例使用了InStr函數和InStrRev函數,相應的結果不同:

Sub test()

  Dim myString As String

  Dim sSearch As String

  myString = "I like the functionality that InsStrRev gives"

  sSearch = "th"

  Debug.Print InStr(myString, sSearch) '傳回8

  Debug.Print InStrRev(myString, sSearch) '傳回26

End Sub

- - - - - - - - - - - - - - - - - - - - - - -

2.7 提取字元/字元串

2.7.1 Left函數

Left函數可以從字元串的左邊開始提取字元或指定長度的字元串,即傳回包含字元串中從左邊算起指定數量的字元。其文法為:

    Left(String,CharNum)

其中,如果參數String包含Null,則傳回Null;如果參數CharNum的值大于或等于String的字元數,則傳回整個字元串。

例如,下面的代碼傳回指定字元串的前兩個字元:

strLeft=Left(“This is a pig.”,2)

Left函數與InStr函數結合,傳回指定字元串的第一個詞,例如下面的代碼:

str = "This is a pig."

FirstWord = Left(str, InStr(str, " ") - 1)

2.7.2 Right函數

與Left函數不同的是,Right函數從字元串的右邊開始提取字元或指定長度的字元串,即傳回包含字元串中從右邊起指定數量的字元。其文法為:

    Right(String,CharNum)

例如:

AnyString = "Hello World"    ' 定義字元串

MyStr = Right(AnyString, 1)   ' 傳回 "d"

MyStr = Right(AnyString, 6)    ' 傳回 " World"

MyStr = Right(AnyString, 20)   ' 傳回 "Hello World"

如果存放檔案名的字元串中沒有反斜杠(\),下面的代碼将反斜杠(\)添加到該字元串中:

If Right(strFileName,1) <> “” Then

  strFileName=strFileName & “\”

End If

下面的函數假設傳遞給它的參數或者是檔案名,或者是包含完整路徑的檔案名,從字元串的末尾開始傳回檔案名。

Private Function ParseFileName(strFullPath As String)

  Dim lngPos As Long, lngStart As Long

  Dim strFilename As String

  lngStart = 1

  Do

    lngPos = InStr(lngStart, strFullPath, "\")

    If lngPos = 0 Then

      strFilename = Right(strFullPath, Len(strFullPath) - lngStart + 1)

    Else

      lngStart = lngPos + 1

    End If

  Loop While lngPos > 0

  ParseFileName = strFilename

End Function

2.7.3 Mid函數

Mid函數可以從字元串中提取任何指定的子字元串,傳回包含字元串中指定數量的字元的字元串。其文法為:

    Mid(String,Start[,Len])

其中,如果參數String包含Null,則傳回Null;如果參數Start超過了String的字元數,則傳回零長度字元串(“”);如果參數Len省略或超過了文本的字元數,則傳回字元串從Start到最後的所有字元。

例如,下面的代碼:

Str=Mid(“This is a pig.”,6,2)

将傳回文本“is”。

下面的代碼:

MyString = "Mid Function Demo"   '建立一個字元串

FirstWord = Mid(MyString, 1, 3)   '傳回 "Mid"

LastWord = Mid(MyString, 14, 4)    '傳回 "Demo"

MidWords = Mid(MyString, 5)   '傳回 "Funcion Demo"

Mid函數常用于在字元串中循環,例如,下面的代碼将逐個輸出字元:

Dim str As String

Dim i As Integer

Str=”Print Out each Character”

For i=1 to Len(str)

  Debug.Print Mid(str,i,1)

Next i

2.7.4 Mid語句

Mid語句可以用另一個字元串中的字元替換某字元串中指定數量的字元。其文法為:

    Mid(Stringvar,Start[,Len])=string

其中,參數Stringvar代表為要被更改的字元串;參數Start表示被替換的字元開頭位置;參數Len表示被替換的字元數,若省略則全部使用string;參數string表示進行替換的字元串。

被替換的字元數量總小于或等于Stringvar的字元數;如果string的數量大于Len所指定的數量,則隻取string的部分字元。示例如下:

MyString = "The dog jumps"   ' 設定字元串初值

Mid(MyString, 5, 3) = "fox"    ' MyString = "The fox jumps"

Mid(MyString, 5) = "cow"   ' MyString = "The cow jumps"

Mid(MyString, 5) = "cow jumped over"    ' MyString = "The cow jumpe"

Mid(MyString, 5, 3) = "duck"    ' MyString = "The duc jumpe"

- - - - - - - - - - - - - - - - - - - - - - -

2.8 删除空格

LTrim函數删除字元串前面的空格;

RTrim函數删除字元串後面的空格;

Trim函數删除兩頭的空格。

示例如下:

MyString = "  <-Trim->  "    ' 設定字元串初值

TrimString = LTrim(MyString)    ' TrimString = "<-Trim->  "

TrimString = RTrim(MyString)   ' TrimString = "  <-Trim->"

TrimString = LTrim(RTrim(MyString))    ' TrimString = "<-Trim->"

' 隻使用 Trim 函數也同樣将兩頭空格去除

TrimString = Trim(MyString)   ' TrimString = "<-Trim->"

- - - - - - - - - - - - - - - - - - - - - - -

2.9 傳回字元代碼

Asc函數傳回指定字元串表達式中第一個字元的字元代碼。示例如下:

MyNumber = Asc("A")   ' 傳回 65

MyNumber = Asc("a")    ' 傳回 97

MyNumber = Asc("Apple")   ' 傳回 65

[程式設計方法和技巧]

(1) 在資料驗證中用Asc來決定一些條件,如第一個字元是大寫還是小寫、是字母還是數字。

Private Sub CommandButton1_Click()

  Dim sTest As String

  Dim iChar As Integer

  sTest = TextBox1.Text

  If Len(sTest) > 0 Then

    iChar = Asc(sTest)

    If iChar >= 65 And iChar <= 90 Then

      MsgBox "第一個字元是大寫"

    ElseIf iChar >= 97 And iChar <= 122 Then

      MsgBox "第一個字元是小寫"

    Else

      MsgBox "第一個字元不是字母"

    End If

  Else

    MsgBox "請在文本框中輸入"

  End If

End Sub

(2) 用Asc函數和Chr函數來建立基本加密的方法。

Private Sub CommandButton2_Click()

  Dim MyName As String, MyEncryptedString As String

  Dim MyDecryptedString As String

  Dim i As Integer

  MyName = "fanjy"

  For i = 1 To Len(MyName)

    MyEncryptedString = MyEncryptedString & Chr(Asc(Mid(MyName, i, 1)) + 25)

  Next i

  MsgBox "您好!我的名字是" & MyEncryptedString

  For i = 1 To Len(MyName)

    MyDecryptedString = MyDecryptedString & Chr(Asc(Mid(MyEncryptedString, i, 1)) - 25)

  Next i

  MsgBox "您好!我的名字是" & MyDecryptedString

End Sub

- - - - - - - - - - - - - - - - - - - - - - -

2.10 傳回數值代表的相應字元

Chr函數傳回指定字元碼所代表的字元,其文法為:

    Chr(charcode)

其中參數charcode代表字元碼,一般為0~255。例如:

MyChar = Chr(65)  ' 傳回 A

MyChar = Chr(97)   ' 傳回 a

MyChar = Chr(62)  ' 傳回 >

MyChar = Chr(37)  ' 傳回 %

[程式設計方法和技巧]

(1) 使用Chr(34)将引号嵌入字元串,如

Chr(34) & sString & Chr(34)

(2) 下面列出了在調用Chr函數時比較常用的字元代碼:

代碼  值    描述

0   Null   相當于vbNullChar常數

8   BS   相當于vbBack常數

9   TAB   相當于vbTab常數

10   CR   相當于vbCr和vbCrLf常數

13   LF   相當于vbLf和vbCrLf常數

34   “”   引号

- - - - - - - - - - - - - - - - - - - - - - -

2.11 使用位元組的函數

VBA中傳回字元串的函數有兩種格式,一種以$結尾,傳回字元串,不需要進行類型轉換,是以速度較快,但如果輸入值是包含Null的Viarant,則會發生運作錯誤;一種沒有$,傳回Viarant資料類型,如果輸入值是包含Null的Viarant,則傳回Null。因而,如果要使得程式運作速度快,則使用帶有$的函數且要避免向這些函數傳遞空值。

- - - - - - - - - - - - - - - - - - - - - - -

2.12 傳回數組的函數

2.12.1 Filter函數

Filter函數傳回一個下标從零開始的數組,該數組包含基于指定篩選條件的一個字元串數組的子集。其文法為:

    Filter(sourcearray,match[,include[,compare]])

其中,參數sourcearray必需,是要執行搜尋的一維字元串數組;參數match必需,是要搜尋的字元串;參數include可選,Boolean值,表示傳回子串包含還是不包含match字元串,如果include為True,傳回包含match子字元串的數組子集,如果include為False,傳回不包含match子字元串的數組子集;參數compare可選,表示所使用的字元串比較類型,其設定值為:-1(常數為vbUseCompareOption)表示使用Option Compare語句的設定值來執行比較;0(常數為vbBinaryCompare)表示執行二進制比較;

1(常數為vbTextCompare)表示執行文字比較;

2(常數為vbDatabaseCompare)隻用于Microsoft Access,表示基于資料庫資訊來執行比較。

如果在sourcearray中沒有發現與match相比對的值,Filter函數傳回一個空數組;如果sourcearray是Null或不是一個一維數組,則産生錯誤。

Filter函數所傳回的數組,其元素數是所找到的比對項目數。

[程式設計方法和技巧]

(1) Filter函數也可以過濾數字值。此時,應指定Variant類型的字元串sourcearray,并用數字值給數組指派。

同時,也可以将字元串、Variant、Long或Integer資料傳遞給match。但應注意,傳回的字元串表現為被過濾數字的字元串的形式。例如:

Sub test()

  Dim varSource As Variant, varResult As Variant

  Dim strMatch As String, i

  strMatch = CStr(2)

  varSource = Array(10, 20, 30, 21, 22, 32)

  varResult = Filter(varSource, strMatch, True, vbBinaryCompare)

  For Each i In varResult

    Debug.Print i

  Next

End Sub

将傳回20,21,22,32

(2) Filter函數可以和Dictionary對象很好地配合使用。可以把Dictionary對象産生的Key值作為一種過濾Dictionary對象成員的快速方法傳遞給Filter函數,如:

Sub test()

  Dim i As Integer

  Dim sKeys() As Variant

  Dim sFiltered() As String

  Dim sMatch As String

  Dim blnSwitch As Boolean

  Dim oDict As Dictionary

  Set oDict = New Dictionary

  oDict.Add "Microsoft", "One Microsoft Way"

  oDict.Add "AnyMicro Inc", "31 Harbour Drive"

  oDict.Add "Landbor Data", "The Plaza"

  oDict.Add "Micron Co.", "999 Pleasant View"

  sKeys = oDict.Keys

  sMatch = "micro"

  blnSwitch = True

  '尋找包含字元串macro(不區分大小寫)的所有鍵

  sFiltered() = Filter(sKeys, sMatch, blnSwitch, vbTextCompare)

  For i = 1 To UBound(sFiltered)

      Debug.Print sFiltered(i) & "," & oDict.Item(sFiltered(i))

  Next i

End Sub

2.12.2 Split函數

Split函數傳回一個下标從零開始的一維數組,包含指定數目的子字元串。其文法為:

    Split(expression[,delimiter[,limit[,compare]]])

其中,參數expression必需,表示包含子字元串和分隔符的字元串,若expression是一個長度為零的字元串(“”),該函數則傳回一個沒有元素和資料的空數組;參數delimiter用于辨別子字元串邊界的字元串字元,若忽略則使用空格(“ “)作為分隔符,若是一個長度為零的字元串則傳回僅包含一個元素的數組,該元素是expression所表示的字元串;參數limit表示要傳回的子字元串數,-1表示傳回所有的子字元串;參數compare表示判别子字元串時使用的比較方式,其值與Filter函數的設定值相同。

- - - - - - - - - - - - - - - - - - - - - - -

2.13 連接配接字元串

Join函數傳回連接配接某數組中的多個子字元串而組成的字元串,即将數組中的字元串連接配接起來。其文法為:

    Join(sourcearray[,delimiter])

其中,參數sourcearray必需,是包含被連接配接子字元串的一維數組;參數delimiter可選,代表在所傳回的字元串中用于分隔子字元串的字元,若忽略則使用空(“ ”)來分隔,若為零長字元串(“”),則所有項目都連接配接在一起,中間沒有分隔符。

- - - - - - - - - - - - - - - - - - - - - - -

2.14 替換字元串

Replace函數傳回一個被替換了的字元串,該字元串中指定的子字元串已被替換成另一個子字元串,并且替換指定次數。其文法為:

    Replace(expression,find,replace[,start[,count[,compare]]])

其中,參數expression必需,表示所要替換的子字元串;參數find必需,表示要搜尋到的子字元串;參數replace必需,表示用來替換的子字元串;參數start表示開始搜尋的位置,若忽略,則從1開始;參數count表示進行替換的次數,預設值是-1,表示進行所有可能的替換;參數compare表示判别子字元串時所用的比較方式,與Filter函數的設定值相同。

如果expression的長度為零,Replace傳回零長度字元串(“”);如果expression為Null,則傳回錯誤;如果find的長度為零,則傳回expression的副本;如果replace的長度為零,則傳回删除了所有出現find的字元串的副本;如果start的值大于expression的長度,則傳回長度為零的字元串;如果count為0,則傳回expression的副本。

Replace函數傳回的字元串是從參數start所指定的位置開始到expression結尾已經進行過替換的字元串。

注意:

(1) 如果沒有使用參數count,那麼當替換較短字元串時就要注意,防止形成一個不相關的字元。

(2) 如果start值大于1,傳回的字元串将從start開始,而不是從原有字元串的第一個字元開始。

- - - - - - - - - - - - - - - - - - - - - - -

2.15 反向字元串

StrReverse函數傳回與指定字元串順序相反的字元串,其文法為:

    StrReverse(expression)

其中,參數expression是一個字元串,應用StrReverse函數後将傳回與該字元串順序相反的字元串。如果expression是一個長度為零的字元串(“”),則傳回一個長度為零的字元串;如果expression為Null,則産生一個錯誤。

使用字元串函數

不同的類中都定義有字元串函數。這些類包括 Microsoft.VisualBasic.Strings 類和 System.String 類。

使用 Microsoft.VisualBasic.Strings 類中的字元串函數

下列函數是 Microsoft.VisualBasic.Strings 類中定義的字元串函數。

注意:要使用字元串函數,請通過在源代碼開始處添加以下代碼将命名空間 Microsoft.VisualBasic.Strings 導入到項目中:

Imports Microsoft.VisualBasic.Strings

Asc 和 AscW

Asc 函數和 AscW 函數傳回一個整數值,表示與指定的字元相對應的字元代碼。這兩個函數接受任何有效的字元表達式或字元串表達式作為參數。當字元串是輸入參數時,則僅輸入字元串的第一個字元。當字元串不包含任何字元時,将出現 ArgumentException 錯誤。Asc 傳回輸入字元的代碼資料點或字元代碼。對于單位元組字元集 (SBCS) 值,傳回值可以是 0 到 255 之間的數字。對于雙位元組字元集 (DBCS) 值,傳回值可以是 -32768 到 32767 之間的數字。AscW 為輸入字元傳回 0 到 65535 之間的 Unicode 代碼資料點。

示例:

Dim MyInt As Integer

MyInt = Asc("A")   ' MyInt is set to 65.

MyInt = Asc("a")   ' MyInt is set to 97.

MyInt = Asc("Apple")   ' MyInt is set to 65.

 Chr 和 ChrW

Chr 函數和 ChrW 函數傳回與指定的字元代碼相關聯的字元。當 CharCode 超出 -32768 到 65535 的範圍時,将出現 ArgumentException 錯誤。

示例:

本示例使用 Chr 函數傳回與指定的字元代碼相關聯的字元。

Dim MyChar As Char

MyChar = Chr(65)   ' Returns "A".

MyChar = Chr(97)   ' Returns "a".

MyChar = Chr(62)   ' Returns ">".

MyChar = Chr(37)   ' Returns "%".

GetChar

GetChar 函數傳回一個 Char 值,表示指定字元串的指定索引中的字元。當索引小于 1 或大于指定輸入參數中最後一個字元的索引時,将出現 ArgumentException 錯誤。

示例:

本示例顯示了如何使用 GetChar 函數從字元串的指定索引中傳回字元。

Dim myString As String = "ABCDE"

Dim myChar As Char

myChar = GetChar(myString, 4)   ' myChar = "D"

InStr

InStr 函數傳回一個整數,指定一個字元串在另一個字元串中首次出現的起始位置。

示例:

以下示例使用 InStr 函數傳回一個字元串在另一個字元串中首次出現的位置:

Dim SearchString, SearchChar As String

Dim MyPos As Integer

SearchString ="XXpXXpXXPXXP"   ' String to search in.

SearchChar = "P"   ' Search for "P".

' A textual comparison starting at position 4. Returns 6.

MyPos = InStr(4, SearchString, SearchChar, CompareMethod.Text)  

Join

Join 函數傳回一個字元串,該字元串是通過連接配接數組中包含的子字元串建立的。包含必須連接配接的子字元串的一維數組将作為參數傳遞給 Join 函數。該函數使用 Delimiter、String 作為可選參數來分隔傳回的字元串中的子字元串。當省略 Delimiter 時,将使用空格(“ ”)作為子字元串之間的分隔符。當 Delimiter 是零長度字元串 ("") 時,數組中的子字元串将不使用分隔符,而是直接相連。

示例:

以下示例顯示了如何使用 Join 函數:

Dim myItem(2) As String

Dim myShoppingList As String

myItem(0) = "Pickle"

myItem(1) = "Pineapple"

myItem(2) = "Papaya"

' Returns "Pickle, Pineapple, Papaya"

myShoppingList = Join(myItem, ", ")

LCase

LCase 函數傳回已經轉換為小寫的字元串或字元。隻有大寫字母被轉換為小寫。所有小寫字母和非字母字元均保持不變。

示例:

以下示例使用 LCase 函數傳回字元串的小寫形式:

Dim UpperCase, LowerCase As String

Uppercase = "Hello WORLD 1234"   ' String to convert.

Lowercase = LCase(UpperCase)   ' Returns "hello world 1234".

LTrim、RTrim 和 Trim

這些函數會傳回一個包含指定字元串的副本的字元串。在使用 LTrim 時,沒有起始空格。在使用 RTrim 時,沒有尾随空格。在使用 Trim 時,既沒有起始空格也沒有尾随空格。

示例:

以下示例使用 LTrim 函數删除字元串變量中的起始空格,使用 RTrim 函數删除字元串變量中的尾随空格,以及使用 Trim 函數删除字元串變量中的起始空格和尾随空格:

Dim MyString, TrimString As String

MyString = "  <-Trim->  "   ' Initializes string.

TrimString = LTrim(MyString)   ' TrimString = "<-Trim->  ".

TrimString = RTrim(MyString)   ' TrimString = "  <-Trim->".

TrimString = LTrim(RTrim(MyString))   ' TrimString = "<-Trim->".

' Using the Trim function alone achieves the same result.

TrimString = Trim(MyString)   ' TrimString = "<-Trim->".

Replace

Replace 函數傳回一個字元串,其中指定的子字元串按指定的次數替換為另一個子字元串。Replace 函數的傳回值是一個字元串,該字元串在 Start 參數指定的位置開始,然後在指定字元串的末尾以 Find 參數和 Replace 參數中的值所指定的替換内容結束。

示例:

本示例示範了 Replace 函數:

Dim myString As String = "Shopping List"

Dim aString As String

' Returns "Shipping List".

aString = Replace(myString, "o", "i")

StrComp

StrComp 函數傳回 –1、0 或 1。這将基于字元串比較的結果。字元串将從第一個字元開始按字母數字順序排列的值進行比較。

示例:

以下示例使用 StrComp 函數傳回字元串比較的結果。如果省略第三個參數,則使用選項比較語句或項目預設設定中定義的比較類型。

Dim MyStr1, MyStr2 As String

Dim MyComp As Integer

MyStr1 = "ABCD"

MyStr2 = "abcd"   ' Defines variables.

' The two strings sort equally. Returns 0.

MyComp = StrComp(MyStr1, MyStr2, CompareMethod.Text)

' MyStr1 sorts after MyStr2. Returns -1.

MyComp = StrComp(MyStr1, MyStr2, CompareMethod.Binary)

' MyStr2 sorts before MyStr1. Returns 1.

MyComp = StrComp(MyStr2, MyStr1)

StrConv

StrConv 函數傳回一個字元串,該字元串轉換為輸入參數中指定的值。StrConv 函數将轉換字元串。這種轉換基于 Conversion 參數中的值。Conversion 參數中的值是 VbStrConv 枚舉的成員。

Conversion 參數的設定為:

枚舉成員 說明

VbStrConv.None 不執行轉換

VbStrConv.LinguisticCasing - 使用語言規則而不是檔案系統(預設值)來區分大小寫

- 僅對大寫和小寫字母有效

VbStrConv.UpperCase 将字元串轉換為大寫字元

VbStrConv.LowerCase 将字元串轉換為小寫字元

VbStrConv.ProperCase 将字元串中每個單詞的第一個字母轉換為大寫

示例:

以下示例将文本轉換為小寫字母:

Dim sText, sNewText As String

sText = "Hello World"

sNewText = StrConv(sText, VbStrConv.LowerCase)

Debug.WriteLine (sNewText)   ' Outputs "hello world".

StrDup

StrDup 函數傳回一個由指定的字元重複指定的次數而形成的字元串或對象。StrDup 函數具有兩個參數:Number 參數和 Character 參數。Number 參數指定函數必須傳回的字元串的長度。StrDup 函數僅使用 Character 參數中的第一個字元。Character 參數可以是 Char 資料類型、String 資料類型或 Object 資料類型。

示例:

以下示例使用 StrDup 函數傳回由重複字元組成的字元串:

Dim aString As String = "Wow! What a string!"

Dim aObject As New Object()

Dim myString As String

aObject = "This is a String that is contained in an Object"

myString = StrDup(5, "P")   ' Returns "PPPPP"

myString = StrDup(10, aString)   ' Returns "WWWWWWWWWW"

myString = StrDup(6, aObject)   ' Returns "TTTTTT"

StrReverse

StrReverse 函數傳回一個字元串,該字元串将指定字元串的字元順序颠倒過來。

示例:

Dim myString As String = "ABCDEFG"

Dim revString As String

' Returns "GFEDCBA".

revString = StrReverse(myString)

UCase

UCase 函數傳回一個字元串或字元,包含已轉換為大寫的指定字元串。隻有小寫字母被轉換為大寫字母。所有大寫字母和非字母字元均保持不變。

示例:

以下示例使用 UCase 函數傳回字元串的大寫形式:

Dim LowerCase, UpperCase As String

LowerCase = "Hello World 1234"   ' String to convert.

UpperCase = UCase(LowerCase)   ' Returns "HELLO WORLD 1234".

使用 System.String 類中的字元串函數

以下是 System 命名空間的 String 類中的字元串函數。

注意:要使用字元串函數,請通過在源代碼開始處添加以下代碼将 System.String 命名空間導入到項目中:

Imports System.String

Compare

Compare 函數比較輸入參數中的兩個字元串。通過使用單詞排序規則來執行比較。發現不相等情況或比較完兩個字元串後,比較将終止。

Compare 示例:

' Code is not compiled unless it is put in a Sub or in a Function.

Dim s1, s2 As String

s1 = "testexample"

s2 = "testex"

MsgBox(Compare(s2, s1)) 'Returns -1.

MsgBox(Compare(s1, s2)) 'Returns 1.Concat

Concat 函數将一個或多個字元串相連接配接,然後傳回連接配接後的字元串。

Concat 示例:

以下示例顯示了如何使用 Concat 的重載版本:

' Code is not compiled unless it is put in a Sub or in a Function.

Dim s1, s2, sa(3) As String

sa(0) = "A"

sa(1) = "B"

sa(2) = "C"

s1 = "test"

s2 = "example"

s1 = Concat(s1, s2)  'Returns testexample.

MsgBox(s1)

MsgBox(Concat(sa)) 'Returns ABC.Copy

Copy 函數将指定字元串中的值複制到另一個字元串中。

Copy 示例:

' Code is not compiled unless it is put in a Sub or in a Function.

Dim s1, s2 As String      

s1 = "Hello World"

'Copy the string s1 to s2.

s2 = Copy(s1)

MsgBox(s2) 'Displays Hello World.Remove

Remove 函數從指定字元串的指定位置開始删除指定數目的字元。Remove 函數有兩個參數。分别是 StartIndex 參數和 Count 參數。Startindex 參數指定開始删除字元的字元串位置。Count 參數指定要删除的字元數。

Remove 示例:

' Code is not compiled unless it is put in a Sub or in a Function.

Dim s1, s2 As String      

s1 = "Hello World"

'Removes 3 characters starting from character e.

s2 = s1.Remove(1, 3)

MsgBox(s2) 'Displays Hello World.

Substring

Substring 函數從指定字元串的指定位置開始檢索字元串。

Substring 示例:

以下示例将從指定的字元位置開始并按指定的長度來檢索子字元串:

' Code is not compiled unless it is put in a Sub or in a Function.

Dim s1, s2 As String

s1 = "Hello World"

s2 = s1.Substring(6, 5) 'Returns World.

MsgBox(s2)ToCharArray

ToCharArray 函數将字元串中的字元複制到 Unicode 字元數組中。

ToCharArray 示例:

以下示例将指定位置中的字元複制到 Character 數組中:

 ' Code is not compiled unless it is put in a Sub or in a Function.

Dim s1 As String

Dim ch(10) As Char

s1 = "Hello World"

'Copies the characters starting from W to d to a Character array.

ch = s1.ToCharArray(6, 5)

MsgBox(ch(3)) 'Displays l.ToLower

ToLower 函數采用一個字元串作為參數,然後以小寫形式傳回該字元串的副本。

ToLower 示例:

' Code is not compiled unless it is put in a Sub or in a Function.

Dim s1, s2 As String

s1 = "Hello World"

s2 = s1.ToLower() 'Converts any uppercase characters to lowercase.

MsgBox(s2) 'Displays hello world.ToUpper

ToUpper 函數采用一個字元串作為參數,然後以大寫形式傳回該字元串的副本。

ToUpper 示例:

' Code is not compiled unless it is put in a Sub or in a Function.

Dim s1, s2 As String

s1 = "Hello World"

s2 = s1.ToUpper() 'Converts any lowercase characters to uppercase.

MsgBox(s2) 'Displays HELLO WORLD.Trim、TrimStart 和 TrimEnd

這些函數會傳回一個包含指定字元串的副本的字元串。使用 Trim 函數時,既沒有起始空格也沒有尾随空格。使用 TrimStart 函數時,沒有起始空格。使用 TrimEnd 函數時,沒有尾随空格。

示例:

以下示例使用 TrimStart 函數删除字元串變量開始處的空格,使用 TrimEnd 函數删除字元串變量末尾的空格,以及使用 Trim 函數删除字元串變量中的起始空格和尾随空格:

' Code is not compiled unless it is put in a Sub or in a Function.

Dim s1, s2 As String

s1 = "   Hello World   "

s2 = s1.Trim()      'Returns Hello World without any white spaces.

s2 = s1.TrimStart   'Removes the spaces at the start.  

s2 = s1.TrimEnd     'Removes the white spaces at the end.