Excel VBA 程式設計教學:基本字串處理(String)

移除多餘的空白字元

如果在字串中除了主要的文字資料之外,前方還包含了多餘的空白字元,這時候就可以使用 Trim 系列的函數將多餘的空白移除。

移除開頭空白字元

LTrim 函數可將字串左邊的空白移除:

Dim mystr As String
mystr = "         Hello, world."
MsgBox "After LTrim : " & LTrim(mystr)

LTrim 會自動判斷字串開頭的空白字元長度,將左邊開頭所有的空白都刪除,執行結果為:

VBA 移除空白字元

移除結尾空白字元

如果空白位於字串結尾處,則可使用 RTrim,其用法與 LTrim 類似:

Dim mystr As String
mystr = "Hello, world.              "
MsgBox "After RTrim : " & RTrim(mystr)

結尾的空白移除之後,執行結果與上面相同。

移除開頭與結尾空白字元

如果要同時將前後兩端的所有空白字元都刪除,可以使用 Trim 函數:

Dim mystr As String
mystr = "       Hello, world.        "
MsgBox "After Trim : " & Trim(mystr)

開頭與結尾的空白移除之後,執行結果與上面相同。

產生空白字元

如果需要特定長度的空白字串時,可以用 Space 來產生,例如:

MsgBox ("Hello," & Space(10) & "world.")

VBA 產生空白字元

字串取代

Replace 函數可以將字串中的指定的文字替換成其他的文字,這個函數的完整參數用法如下:

Replace(字串, 搜尋文字, 替換文字[, 起始位置[, 替換次數[, 比對方式]]])

最簡單的用法就是單純將字串中指定的文字替換掉:

Dim mystr As String
mystr = "This is a message."
newstr = Replace(mystr, "message", "dog")
MsgBox "After Replace : " & newstr

這裡是將 mystr 中的 message 替換為 dog,結果如下:

VBA 字串取代

如果指定要替換的文字在整個字串中有出現好多次,Replace 預設會全部替換掉:

Dim mystr As String
mystr = "This is a message."
newstr = Replace(mystr, "is", "**")
MsgBox "After Replace : " & newstr

這裡就會將字串中的兩個 is 都替換為 **,結果如下:

VBA 字串取代

如果只想要替換特定位置的文字,或是限制替換次數,可以搭配起始位置替換次數兩個參數的方式來處理:

Dim mystr As String
mystr = "This is a message."
newstr = Replace(mystr, "is", "**", 1, 1)
MsgBox "After Replace : " & newstr

這樣 Replace 就會從字串的開頭開始搜尋,只替換第一個比對成功的文字。

VBA 字串取代

如果要替換比較後面的文字,可以調整起始位置參數,不過 Replace 會自動將起始位置之前的文字截斷:

Dim mystr As String
mystr = "This is a message."
newstr = Replace(mystr, "is", "**", 5, 1)
MsgBox "After Replace : " & newstr

執行結果如下:

VBA 字串取代

在預設的狀況下 Replace 會將英文字母的大小寫視為不同的字串:

Dim mystr As String
mystr = "This Is a Message."
newstr = Replace(mystr, "is", "**")
MsgBox "After Replace : " & newstr

VBA 字串取代

如果要讓 Replace 在比對時,不要區分英文字母的大小寫(大小寫視為相同),可以將比對方式參數指定為 vbTextCompare

Dim mystr As String
mystr = "This Is a Message."
newstr = Replace(mystr, "is", "**", 1, -1, vbTextCompare)
MsgBox "After Replace : " & newstr

由於比對方式的參數是最後一個,所以在使用時要把前面的起始位置替換次數兩個參數也都寫進去,這裡的替換次數設定為 -1 是代表不限制的意思,而比對方式預設值是 vbBinaryCompare(大小寫視為不同),這裡改為 vbTextCompare 之後,就可以同時比對字串中大寫與小寫的文字。

VBA 字串取代

字串比較

StrComp 可以比較不同字串之間的大小差異,在排序資料時常常會用到,其參數用法如下:

StrComp(字串一, 字串二[, 比對方式])

前兩個參數就是兩個要比較的字串,而第三個比對方式參數可用來指定是否區分大小寫,預設值是 vbBinaryCompare(大小寫視為不同),若設定為 vbTextCompare 則會將大小寫視為相同。

StrComp 在比較兩個字串之後,會傳回不同的數值來代表不同的結果:

狀況 StrComp 傳回數值
字串一 < 字串二 -1
字串一 = 字串二 0
字串一 > 字串二 1

以下是一些比較的範例:

MsgBox StrComp("Hello", "Hello") ' 結果為 0
MsgBox StrComp("Hello", "HELLO") ' 結果為 1
MsgBox StrComp("Hello", "hello") ' 結果為 -1
MsgBox StrComp("Hello", "hello", vbTextCompare) ' 結果為 0

字串反轉

StrReverse 可將字串反轉:

MsgBox StrReverse("Hello, world.")

VBA 字串反轉

大小寫轉換

UCaseLCase 可以將字串中的英文字母轉換為大寫或小寫:

MsgBox UCase("Hello, world.") ' HELLO, WORLD.
MsgBox LCase("Hello, world.") ' hello, world.
Windows, 程式設計

7 留言

  1. Chen

    這邊的文章很受用!
    期待版主大大接下來VBA的文章!

  2. play

    字串取代中說明Replac在不區分英文字母大小寫時要使用 vbTextCompare的說明中, 句子 “這裡的替換次數設定為 1 是代表不限制的意思” 中的1應是-1吧?

  3. sean1776

    大大的語法顏色真是漂亮
    不曉得能否學習如何設定?

  4. 線上小白

    怎樣 Left 使用變數???

    For i = 2 To 100
    If Left(U & i ,1) = “找” Then
    ‘動作
    End If
    Next

    我失敗了……
    請問我該怎修改???

  5. VBA初學者

    請問 cnt = cnt + 1 ‘ 計算建物總數
    為甚麼要cnt=0 cnt=cnt+1,cnt 代表甚麼含意
    s = s + Val(price) ‘ 計算建物單價總和
    為甚麼要 s=0 s = s + Val(price),其用意是甚麼?
    有點不明白,求解~~ 感謝

  6. william

    請問如何改variant/double to variant/string ?
    謝謝

Comments are Closed