大家好,我們今日繼續講解VBA代碼解決方案的第60講內容:如何將文本內容轉化為數組。這個問題的提出是因為我們在處理一些文字時往往在WORD中,要拷貝到EXCEL中來填充一些資料,多是人名,設備名等,這些往往要求以獨佔一個 單元格的信息,這時該如何把這些人名,設備名放到EXCEL中呢?這就是講文本轉化為數組再填充的問題。
一:在處理字符串時可以使用Split 函數將字符串按指定的分隔符分開並以數組返回,
Split 函數返回一個下標從零開始的一維數組,包含指定數目的子字符串,語法如下:
Split(expression[, delimiter[, limit[, compare]]])
參數expression是必需的,包含子字符串和分隔符的字符串表達式。
參數delimiter是必需的,用來標識子字符串邊界的字符串字符。如果忽略,則使用空格字符(" ")作為分隔符。
二:我們在完成數組的轉換之後,往往要求橫向或者縱向的填充,這時工作表Transpose函數返迴轉置單元格區域,即將一行單元格區域轉置成一列單元格區域,反之亦然,語法如下:
TRANSPOSE(array)
參數array為需要進行轉置的數組或工作表中的單元格區域。
有了上面兩個知識點我們看我們今日的學習內容,我們有一個單元格的文本內容,要把這些內容首先轉化為數組,然後再填充到縱向的單元格中。
代碼如下:
Sub MySplitarr()
Dim Arr As Variant
Arr = Split(Sheets("kk").Cells(1, 1), " ")
Sheets("kk").Cells(3, 1).Resize(UBound(Arr) + 1, 1) = Application.Transpose(Arr)
End Sub
代碼解析:
MySplitarr過程使用Split 函數將工作表Sheets("kk")中A1單元格的姓名分別寫入到工作表Sheets("kk")中的A列單元格。
第4行代碼,首先使用UBound函數取得返回數組的最大下標後調整單元格區域,因為數組下標的預設下界默認為0,所以在使用Resize屬性調整單元格區域時參數RowSize需要在返回數組的最大下標上加一。
然後使用工作表Transpose函數將返回數組轉置後寫入到工作表調整後的單元格區域中。
代碼截圖:
運行前的窗口:在A1單元格有一組文本:
運行後:
運行後在A3單元格向下處理了上述的文本。
今日內容回向:
1 Split 函數的作用是什麼?他是VBA函數嗎?
2 TRANSPOSE(array) 函數的作用是什麼?