大家好,我們今日繼續講解VBA代碼解決方案的第63講内容:數組的合并與字符串拆分(Join & Split),及篩選filter函數的應用
一Join函數:返回一個字符串,該字符串是通過連接某個數組中的多個子字符串而創建的,語法如下:
Join(sourcearray[, delimiter])
參數sourcearray是必需的,包含被連接子字符串的一維數組。
參數delimiter是可選的,在返回字符串中用于分隔子字符串的字符,如果忽略則使用空格(" ")來分隔子字符串。則列表中的所有項目都連接在一起,中間沒有分隔符。
二:split函數:這個函數的講解在之前已經講過,不再多說了。
多個字符的合并和字符串按規律的拆分是經常遇到的,如:A-REW-E-RWC-2-RWC 按分隔符"-"拆分成6個字符放在一個數組中;有一組數array(23,45,7,1,76)想用分隔符-連接成一個字符串
上面兩種情況的實現即用到:split(字符串,"分隔符") 拆分字符串。join(數組,"分隔符") 用分隔連接數組的每個元成一個字符串
實例一:
Sub Myst()
Dim arr, myst As String
myst = "A-REW-E-RWC-2-RWC"
arr = Split(myst, "-")
MsgBox arr(0) '顯示數組的第一個數(分隔後的數組最小下标為0,不是1),顯示結果為A
MsgBox Join(arr, ",") '再用","把數組的每個值連接成一個字符串,結果為"A,REW,E,RWC,2,RWC"
End Sub
值得注意的是:split和join隻能對一維數組進行操作,
實例二:
Sub MyJoin()
Dim strJoin As String
strJoin = Join(Array("a", "b", "c"), ",")
MsgBox strJoin
End Sub
三:Filter函數:返回一個下标從零開始的數組,該數組包含基于指定篩選條件的一個字符串數組的子集。filter()是數組的一個常用操作,它用于把Array的某些元素過濾掉,然後返回剩下的元素。
語法:Filter(sourcesrray, match[, include[, compare]])
sourcesrray必須的。要執行搜索的一維字符串數組。
match必須的。要搜索的字符串。
include可選的。Boolean值,表示返回子串包含還是不包含match字符串。如果include是True,Filter返回的是包含match子字符串的數組子集。如果include是False,Filter返回的是不包含match子字符串的數組子集。
compare可選的。數字值,表示所使用的字符串比較類型。
Filter函數實現數組篩選:數組的篩選就是根據一定的條件,從數組中篩選符合條件的值,組成一個新的數組,實現數組篩選的Filter函數用法:Filter(數組, 篩選的字符, 是否包含)
實例三:
Sub MyFD() '實例三
arr = Array("ABC", "A", "D", "CA", "ER")
arr1 = VBA.Filter(arr, "A", True)
arr2 = VBA.Filter(arr, "A", False)
MsgBox Join(arr2, ",")
End Sub
遺憾的是函數隻能進行模糊篩選,不能精确匹配。
實例四:查找數組的差集
Sub Filter1()
Dim varArr1 As Variant
Dim varArr2 As Variant
Dim i As Integer
varArr2 = Array(1021, 1023, 1025)
varArr1 = Array(1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028)
For i = 0 To UBound(varArr2)
varArr1 = VBA.Filter(varArr1, varArr2(i), False)
Next i
MsgBox Join(varArr1)
End Sub
注意,filter函數在此是模糊查找,下面代碼将無法返回我們想要的值.
代碼截圖:
運行結果一:
運行結果二:
運行結果三:
運行結果四:
今日内容回向:
1 VBA數組的三個函數是什麼?
2 數組篩選時兩個方案是什麼?
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!