您現在的位置是:首頁 > 垂釣

以多個給定符號作為間隔拆分字串

  • 由 VBA語言專家 發表于 垂釣
  • 2022-05-31
簡介大家好,我們今日講解“VBA資訊獲取與處理”教程中第十四個專題“Split函式提取資料資訊的深入講解”的第三節“以多個給定符號作為間隔拆分字串”,這個專題是非常實用的知識點,希望大家能掌握利用

instr函式什麼意思

大家好,我們今日講解“VBA資訊獲取與處理”教程中第十四個專題“Split函式提取資料資訊的深入講解”的第三節“以多個給定符號作為間隔拆分字串”,這個專題是非常實用的知識點,希望大家能掌握利用。教程會提供配套的程式檔案。

第三節 以多個給定符號作為間隔拆分字串

大家好,我們繼續講解用Split的引申函式拆分字串。在上一講中我們講解了按照任意多個字元來拆分字串的方案,但細心的朋友會提出自己的疑問,如果要根據多個字元如何拆分字串呢?確實,如果拆分的標準改為多個字串,按照上將的內容是無法得到正確的結果的,我們這講就來解決這個問題。

實現的場景,如下圖:

以多個給定符號作為間隔拆分字串

我們在給出的源字串中,要求按照B列的符號來拆分,B列的特點是含有多個字串,這個時候我們考慮到各種情況。

1 實現按多個符號作為間隔進行拆分字串的思路分析

為了實現按照多個符號來拆分,我們可以同樣設計一個函式,這個函式中要給出拆分間隔的標準,這個時候的拆分標準我們用陣列來裝載。

為了按照拆分的標準來拆分字串,我們需要在含有拆分標準的陣列元素中建立一個迴圈,如果發現源字串中包含其中之一的元素,那麼就把源字串中發現的這個符號替換成其他的特定符號,所有的源字串中的符號替換完成後,我們只需要用Split這個函式進行分隔就可以了。

同樣,我們還可以指定如果給出的分隔字串有重複的處理方案。

2 實現按多個符號作為間隔進行拆分字串的程式碼實現

我還是先給出我的程式碼,然後進行講解:

Function SplitB(ByValInString As String, IgnoreDoubleDelmiters As Boolean, _

Delims() As String) As String()

‘IgnoreDoubleDelmiters表示指示當兩個delims之間沒有文字時要做什麼。

’ 如果該值為True,則將連續分隔符壓縮為單個分隔符。

‘ 如果此值為False,則連續分隔符將導致結果陣列中的元素為空。

Dim Arr() As String

If Len(InString) = 0 Then

SplitB = Arr

Exit Function

End If

If IgnoreDoubleDelmiters = True Then

For Ndx = LBound(Delims) To UBound(Delims)

N = InStr(1, InString, Delims(Ndx) &Delims(Ndx), vbTextCompare)

Do Until N = 0

InString = Replace(InString, Delims(Ndx) &Delims(Ndx), Delims(Ndx))

N = InStr(1, InString, Delims(Ndx) &Delims(Ndx), vbTextCompare)

Loop

Next

End If

ReDimArr(1 To Len(InString))

For Ndx = LBound(Delims) To UBound(Delims)

InString = Replace(InString, Delims(Ndx), Chr(1))

Next

Arr = Split(InString, Chr(1))

SplitB = Arr

End Function

Sub mynzB()

Dim TT() As String

Sheets(“SHEET3”)。Select

[c:aa]。ClearContents

Range(“c1”) = “拆分結果”

I = 2

Do While Cells(I, 1) <> “”

TT() = Split(Cells(I, 2)。Value)

UU = SplitB(Cells(I, 1)。Value, True, TT)

For N = LBound(UU) To UBound(UU)

Cells(I, N + 3) = UU(N)

Next

I = I + 1

Loop

End Sub

程式碼截圖:

以多個給定符號作為間隔拆分字串

程式碼講解:

1)If IgnoreDoubleDelmiters = True Then

For Ndx = LBound(Delims) To UBound(Delims)

N = InStr(1, InString, Delims(Ndx) &Delims(Ndx), vbTextCompare)

Do Until N = 0

InString = Replace(InString, Delims(Ndx) &Delims(Ndx), Delims(Ndx))

N = InStr(1, InString, Delims(Ndx) &Delims(Ndx), vbTextCompare)

Loop

Next

End If

這段程式碼是IgnoreDoubleDelmiters引數的處理,表示指示當兩個delims之間沒有文字時要做什麼。如果該值為True,則將連續分隔符壓縮為單個分隔符。如果此值為False,則連續分隔符將導致結果陣列中的元素為空。這個引數的測試讀者可以自己進行,程式碼我已經給出。

程式碼中的InStr函式是一個字串查詢函式:其功能是查詢一個字串在另一個字串中首次出現的位置。

語法:InStr([start,]string1,string2[,compare])

返回值:從 Start 位置開始,在 String1 中尋找 String2 ,如果沒有找到,則返回0。如果 String1 或 String2 為Null,則返回Null,其他情況返回 String2 在 String1 中的起始位置。上述程式碼中用的是Do Until N = 0 指的就是直到沒有發現為止。

2)ReDimArr(1 To Len(InString))

For Ndx = LBound(Delims) To UBound(Delims)

InString = Replace(InString, Delims(Ndx), Chr(1))

Next

Arr = Split(InString, Chr(1))

SplitB = Arr

以上程式碼是用Chr(1)符號代替了InString中的拆分標準符號,最後Arr = Split(InString, Chr(1))

用Chr(1)來分隔源字串。

3)

Do While Cells(I, 1) <> “”

TT() = Split(Cells(I, 2)。Value)

UU = SplitB(Cells(I, 1)。Value, True, TT)

For N = LBound(UU) To UBound(UU)

Cells(I, N + 3) = UU(N)

Next

I = I + 1

Loop

在標準模組中就是利用了SplitB來實現我們的目的。大家要注意,在實現之前我利用了 TT() = Split(Cells(I, 2)。Value) 來獲取拆分間隔符號的引數。

3 實現按多個符號作為間隔進行拆分字串的實現結果

我們點選執行按鈕,看返回的結果:

以多個給定符號作為間隔拆分字串

上面截圖完全實現了我們的目的,對於重複字元的測試讀者可以自己進行。

本節知識點回向

Sp

litB函式的意義是什麼

Sp

litB函式的

和Sp

litA有什麼不同

本講程式碼參考檔案

:01

4

工作表

.xlsm

以多個給定符號作為間隔拆分字串

積木程式設計的思路內涵:

在我的系列書籍中一直在強調“搭積木”的程式設計思路,這也是學習利用VBA的主要方法,特別是職場人員,更是要採用這種方案。其主要的內涵:

1

程式碼不要自己全部的錄入

。你要做的是把積木放在合適的位置然後去

修正程式碼

,一定要複製,從你的積木庫中去複製,然後修正程式碼,把時間利用到高效的思考上。

2

建立自己的“積木庫”

。平時在學習過程中,把自己認為有用的程式碼放在一起,多積累,在用到的時候,可以隨時拿來。你的積木庫資料越多,你做程式的思路就會越廣。

以多個給定符號作為間隔拆分字串

VBA的應用界定及學習教程:

VBA

是利用

Office

實現個人小型辦公自動化的有效手段(工具)。

這是我對VBA的應用界定。在取代OFFICE新的辦公軟體沒有到來之前,誰能在資料處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!

我記得20年前自己初學VBA時,那時的資料甚少,只能看原始碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重複我之前的經歷,我根據自己多年VBA實際利用經驗,推出了六部VBA專門教程:

第一套:

VBA

程式碼解決方案

是VBA中各個知識點的講解,教程共147講,覆蓋絕大多數的VBA知識點,提供的程式檔案更是一座不可多得的程式碼寶庫,是初學及中級人員必備教程;目前這套教程提供的版本是修訂第二版,

程式檔案透過

3

2

位和

6

4

位兩種

O

FFICE

系統測試。

第二套:

VBA

資料庫解決方案

資料庫是資料處理的專業利器,教程中詳細介紹了利用ADO連線ACCDB和EXCEL的方法和例項操作,適合中級人員的學習。目前這套教程提供的是修訂第一版教程,

程式檔案透過

3

2

位和

6

4

位兩種

O

FFICE

系統測試。

第三套:

VBA

陣列與字典解決方案

陣列和字典是VBA的精華,字典是VBA程式碼水平提高的有效手段,值得深入的學習,是初級及中級人員程式碼精進的手段。目前這套教程提供的版本是修訂第一版,

程式檔案透過

3

2

位和

6

4

位兩種

O

FFICE

系統測試。

第四套:

VBA

程式碼解決方案之影片

是專門面向初學者的影片講解,可以快速入門,更快的掌握這門技能。這套教程是第一套教程(修訂一版)的影片講解,聽母音更易接受。

這套教程

會額外提供透過

3

2

位和

6

4

位兩種

O

FFICE

系統測試的程式檔案。

第五套:

VBA

中類的解讀和利用

是一部高階教程,講解類的虛無與肉身的度化,類的利用雖然較少,但仔細的學習可以促進自己VBA理論的提高。這套教程的領會主要是讀者的領悟了,領悟一種佛學的哲理。目前這套教程提供的版本是修訂第一版,

程式檔案透過

3

2

位和

6

4

位兩種

O

FFICE

系統測試。

第六套教程:《

VBA

資訊獲取與處理》

是一部高階教程,涉及範圍更廣,實用性更強,面向中高階人員。教程共二十個專題,包括:跨應用程式資訊獲得、隨機資訊的利用、電子郵件的傳送、VBA網際網路資料抓取、VBA延時操作,剪下板應用、Split函式擴充套件、工作表資訊與其他應用互動,FSO物件的利用、工作表及資料夾資訊的獲取、圖形資訊的獲取以及定製工作表資訊函式等等內容。

上述教程的學習順序:

1

3

2

6

5

或者

4

3

2

6

5

。提供的程式檔案更是一座巨大的程式碼庫,供讀者使用,如需要可以WeChat: NZ9668

以多個給定符號作為間隔拆分字串

學習VBA是個過程,也需要經歷一種枯燥的感覺

“眾鳥高飛盡,孤雲獨去閒。相看兩不厭,只有敬亭山”。學習的過程也是修心的過程,修一個平靜的心。在程式碼的世界中,心平靜了,心情好了,身體自然而然就好。心靜則正,內心裡沒有那麼多邪知邪見,也就沒有那麼多妄想。利人就是利己。我的教程助力給正在努力的朋友。

“水善利萬物而不爭”,綿綿密密,微則無聲,巨則洶湧。學習亦如此,知道什麼是自己所需要的,不要蜷縮在一小塊自認為天堂的世界裡,待到暮年時再去做自欺欺人的言論。要努力提高自己,用一顆充滿生機的心靈,把握現在,這才是進取。越是有意義的事情,困難會越多。願力決定始終,智慧決定成敗。不管遇到什麼,都是風景。看淡紛爭,看輕得失。學習時微而無聲,利用時則巨則洶湧。“路漫漫其修遠兮,吾將上下而求索”

每一分收穫都是成長的記錄,怎無憑,正是這種執著,成就了朝霞的燦爛。最後將一闕詞送給致力於VBA學習的朋友,讓大家感受一下學習過程的枯燥與執著:

浮雲掠過,暗語無聲,

唯有清風,驚了夢中啼鶯。

望星,疏移北斗,

奈將往事雁同行。

阡陌人,昏燈明暗,

忍顧長亭。

多少

VBA

人,

暗夜中,悄聲尋夢,盼卻天明。

怎無憑!

分享我多年工作實際經驗的成果,隨喜這些有用的東西,給確實需要利用VBA的同路人。迴向學習利用VBA的歷歷往事,不勝感慨,謹以這些文字以紀念,

分享成果,隨喜正能量

Top