大家好,我們今日講解「VBA信息獲取與處理」教程中第十四個專題「Split函數提取數據信息的深入講解」的第一節「Split函數的基本講解」,這個專題是非常實用的知識點,希望大家能掌握利用。
大家好,我們今天開始第十四專題的講解,這個專題是對Split函數的深入發掘,深入分析這個函數在提取數據信息時候的作用。在VBA版本6(Office 2000)中,Microsoft引入了Split函數,該函數將文本字符串拆分為一個數組。在學習了網抓知識後,相信大家對這個函數有著非常深刻的認識,在處理網頁文檔數據的時候,這個函數應用非常頻繁,對於數據的截取,數據的獲取是隨處可見。在這個專題中,我們還將完善這個函數的一些功能。
第一節 Split函數的基本講解
在數組的應用中,我們講過,這個函數是十分重要的,它是指返回一個下標從零開始的一維數組,split函數包含指定數目的子字符串。我們這節就先回顧一下這個函數的基本用法。
1 什麼是Split函數
Split 函數:返回包含指定數目的子字符串的從零開始的一維數組。
語法:Split(expression, [ delimiter, [ limit, [ compare ]]])
各個參數的意義:
Expression必需。包含子字符串和分隔符的字符串表達式。如果 expression 是零長度字符串 (""),則 Split 返回空數組,即不包括任何元素和數據的數組。
Delimiter可選。用於標識子字符串限制的 String 字符。如果省略,則假定空格符 (" ") 為分隔符。如果 delimiter 是零長度字符串,則返回包含完整 expression 字符串的只含單一元素的數組。
limit 可選的。要返回的子字符串數,–1表示返回所有的子字符串。
Compare可選的。數字值,表示判別子字符串時使用的比較方式。其值如下:
vbUseCompareOption –1 用Option Compare語句中的設置值執行比較。
vbBinaryCompare 0 執行二進位比較。
vbTextCompare 1 執行文字比較。
vbDatabaseCompare 2 僅用於Microsoft Access。基於您的資料庫的信息執行比較。
2 Split應用的基本代碼
在我的第一套教程《VBA代碼解決方案》中,我講解過這個函數是將文本轉化為數組的函數,我們來看看這個函數的具體應用。
我給出一個字符串:
strFull = "VBA代碼解決方案 - VBA資料庫解決方案 - VBA數組與字典解決方案 - VBA代碼解決方案(視頻) - " & _
"VBA中類的解讀及應用 - VBA信息的獲取與處理"
在這個字符串中,我們看到每套教程中名稱的前後均有空格,當按照「-」和「 -」提取時返回的信息是不一樣的,如下面的測試代碼:
Sub mynz()
Sheets("SHEET1").Select
Cells.ClearContents
strFull = "VBA代碼解決方案 - VBA資料庫解決方案 - VBA數組與字典解決方案 - VBA代碼解決方案(視頻) - " & _
"VBA中類的解讀及應用 - VBA信息的獲取與處理"
'arrA將是從0到8的數組
'分隔符不包含空格,因此strFull中的空格將包含在返回的數組值中。
arrA = Split(strFull, "-")
sA = arrA(3) ' sA = " VBA代碼解決方案(視頻) ".
MsgBox "arrA的第四個字符是" &sA
'arrB將是從0到8的數組
'分隔符包含空格,空格不會包含在返回的數組值中。
arrB = Split(strFull, " - ")
sB = arrB(3) ' sB = "VBA代碼解決方案(視頻)".
MsgBox "arrB的第四個字符是" &sB
'下面的代碼會將數組放回到工作表中
For i = LBound(arrA, 1) To UBound(arrA, 1)
Cells(i + 1, 1) = arrA(i)
Next
For i = LBound(arrB, 1) To UBound(arrB, 1)
Cells(i + 1, 2) = arrB(i)
Next
MsgBox "ok!"
End Sub
代碼截圖:
代碼解讀:
1)strFull = "VBA代碼解決方案 - VBA資料庫解決方案 - VBA數組與字典解決方案 - VBA代碼解決方案(視頻) - " & _
"VBA中類的解讀及應用 - VBA信息的獲取與處理"
上述代碼給字符串賦值。
2)arrA = Split(strFull, "-")
上述語句返回一個數組,這個數組是以"-"分隔strFull而成的,這裡我們要注意由於測試字符串中是有空格的,所以返回的數組中各個元素中是含有空格的。
3)arrB = Split(strFull, " - ")
上述語句返回一個數組,這個數組是以"-"分隔strFull而成的,這裡我們要注意由於測試字符串中是有空格的,以含有空格的分隔符分隔後,返回的數組中各個元素中是不含有空格的。
4) '下面的代碼會將數組放回到工作表中
For i = LBound(arrA, 1) To UBound(arrA, 1)
Cells(i + 1, 1) = arrA(i)
Next
For i = LBound(arrB, 1) To UBound(arrB, 1)
Cells(i + 1, 2) = arrB(i)
Next
上述代碼我們可以看到返回的數組元素。
3 Split的應用返回結果分析
我們點擊運行按鈕,在工作表中可以看到返回的數組各個元素:
我們從截圖中看到,A列的數據中是含有空格的。
本節知識點回向:
① Split函數的意義是什麼?
② Split函數的分隔符不同會決定返回值的不同,注意空格的影響。
本講代碼參考文件:014工作表.xlsm
積木編程的思路內涵:
在我的系列書籍中一直在強調「搭積木」的編程思路,這也是學習利用VBA的主要方法,特別是職場人員,更是要採用這種方案。其主要的內涵:
1代碼不要自己全部的錄入。你要做的是把積木放在合適的位置然後去修正代碼,一定要拷貝,從你的積木庫中去拷貝,然後修正代碼,把時間利用到高效的思考上。
2 建立自己的「積木庫」。平時在學習過程中,把自己認為有用的代碼放在一起,多積累,在用到的時候,可以隨時拿來。你的積木庫資料越多,你做程序的思路就會越廣。
VBA的應用界定及學習教程:
VBA是利用Office實現個人小型辦公自動化的有效手段(工具)。這是我對VBA的應用界定。在取代OFFICE新的辦公軟體沒有到來之前,誰能在數據處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!
我記得20年前自己初學VBA時,那時的資料甚少,只能看源碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重複我之前的經歷,我根據自己多年VBA實際利用經驗,推出了六部VBA專門教程:
第一套:VBA代碼解決方案是VBA中各個知識點的講解,教程共147講,覆蓋絕大多數的VBA知識點,提供的程序文件更是一座不可多得的代碼寶庫,是初學及中級人員必備教程;目前這套教程提供的版本是修訂第二版,程序文件通過32位和64位兩種OFFICE系統測試。
第二套:VBA資料庫解決方案資料庫是數據處理的專業利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作,適合中級人員的學習。目前這套教程提供的是修訂第一版教程,程序文件通過32位和64位兩種OFFICE系統測試。
第三套:VBA數組與字典解決方案數組和字典是VBA的精華,字典是VBA代碼水平提高的有效手段,值得深入的學習,是初級及中級人員代碼精進的手段。目前這套教程提供的版本是修訂第一版,程序文件通過32位和64位兩種OFFICE系統測試。
第四套:VBA代碼解決方案之視頻是專門面向初學者的視頻講解,可以快速入門,更快的掌握這門技能。這套教程是第一套教程(修訂一版)的視頻講解,聽元音更易接受。這套教程還會額外提供通過32位和64位兩種OFFICE系統測試的程序文件。
第五套:VBA中類的解讀和利用這是一部高級教程,講解類的虛無與肉身的度化,類的利用雖然較少,但仔細的學習可以促進自己VBA理論的提高。這套教程的領會主要是讀者的領悟了,領悟一種佛學的哲理。
第六套教程:《VBA信息獲取與處理》,這是一部高級教程,涉及範圍更廣,實用性更強,面向中高級人員。教程共二十個專題,包括:跨應用程式信息獲得、隨機信息的利用、電子郵件的發送、VBA網際網路數據抓取、VBA延時操作,剪切板應用、Split函數擴展、工作表信息與其他應用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定製工作表信息函數等等內容。
上述教程的學習順序:1→3→2→6→5或者4→3→2→6→5。提供的程序文件更是一座巨大的代碼庫,供讀者使用,如需要可以WeChat: NZ9668
學習VBA是個過程,也需要經歷一種枯燥的感覺
「眾鳥高飛盡,孤雲獨去閒。相看兩不厭,只有敬亭山」。學習的過程也是修心的過程,修一個平靜的心。在代碼的世界中,心平靜了,心情好了,身體自然而然就好。心靜則正,內心裡沒有那麼多邪知邪見,也就沒有那麼多妄想。利人就是利己。我的教程助力給正在努力的朋友。
「水善利萬物而不爭」,綿綿密密,微則無聲,巨則洶湧。學習亦如此,知道什麼是自己所需要的,不要蜷縮在一小塊自認為天堂的世界裡,待到暮年時再去做自欺欺人的言論。要努力提高自己,用一顆充滿生機的心靈,把握現在,這才是進取。越是有意義的事情,困難會越多。願力決定始終,智慧決定成敗。不管遇到什麼,都是風景。看淡紛爭,看輕得失。學習時微而無聲,利用時則巨則洶湧。「路漫漫其修遠兮,吾將上下而求索」
每一分收穫都是成長的記錄,怎無憑,正是這種執著,成就了朝霞的燦爛。最後將一闕詞送給致力於VBA學習的朋友,讓大家感受一下學習過程的枯燥與執著:
浮雲掠過,暗語無聲,
唯有清風,驚了夢中啼鶯。
望星,疏移北鬥,
奈將往事雁同行。
阡陌人,昏燈明暗,
忍顧長亭。
多少VBA人,
暗夜中,悄聲尋夢,盼卻天明。
怎無憑!
分享我多年工作實際經驗的成果,隨喜這些有用的東西,給確實需要利用VBA的同路人。回向學習利用VBA的歷歷往事,不勝感慨,謹以這些文字以紀念,
分享成果,隨喜正能量