按分隔符拆分單元格終結篇,利用VBA一勞永逸解決所有這類問題

上一篇文章《用了SUBSTITUTE函數,再也不用逐個數人數了,半天工作幾秒就搞定》及之前的文章《利用LEFT RIGHT COLUMUNS函數組合,巧妙地將數值拆分成單個數字》兩篇文章中,我分別介紹了用不同的函數組合來實現對某一單元格的拆分的問題。第一個雖然是數人數的,但是其性質和後者是一樣的,都要實現對單元格的拆分。只不過後者是按固定的序列進行,每次拆一個;而前者是按照分隔的符號來進行。那麼問題來了,拆分有著各式各樣的形式,有沒有一個以不變應萬變的方法呢?

比如,如果是空格為表示符號的怎麼去拆分呢?如果是以每兩個字符為單位又如何拆分呢?本文將就前者的問題,即按固定分隔符拆分字符串展開講解。後一個問題,即按固定字符數拆分的問題,將在後續的文章中再解決。

如下圖在A列中用很多人名,要求要人數填在B列,不人名分成不同的單元格,填在C列及之後的單元格中。

按分隔符拆分單元格終結篇,利用VBA一勞永逸解決所有這類問題

這個問題就要用VBA來實現了,我們先看代碼吧。

Sub FJ()

2 I = 3

3 Sheets("sheet1").Select

4 If Cells(1, 3) <> "" And Cells(1, 5) = "" Then QF = Trim(Cells(1, 3))

5 If Cells(1, 3) = "" And Cells(1, 5) <> "" Then QFS = Trim(Cells(1, 5))

6 If Cells(1, 3) <> "" And Cells(1, 5) <> "" Then MsgBox ("請重新確認標準!"): End

7 If QF <> "" And QFS = "" Then

8 Do While Cells(I, 1) <> ""

9 T = 3

10 Cells(I, 1).Select

11For m = 1 To Len(Cells(I, 1))

12 kk = Mid(Cells(I, 1), m, 1)

13 If kk = QF Then

14 T = T + 1

15 Else

16 Cells(I, T).Select

17 Cells(I, T) = Cells(I, T) & kk

18 End If

19 Next

20 Cells(I, 2) = T - 3 + 1

21 I = I + 1

22 kk = ""

23 Loop

24 End If

25 MsgBox ("ok!")

26 End Sub

代碼的截圖:

按分隔符拆分單元格終結篇,利用VBA一勞永逸解決所有這類問題

把上述代碼直接拷貝,放到模塊中,拷貝的時候可以帶行號,但第一行不要帶行號。

上述代碼的簡單講解:首先我們要判斷一下分隔的符號是什麼,這個信息要從C1的單元格得出,把這個值放到變量QF中,當QF不為空值時,就開始對A3的單元格進行處理了,用MID函數一個字符一個字符的查找,當發現字符是QF時就知道要換下一個單元格填充了,如果不是就在原來的單元格的基礎上累加。直到整個A3中的單元格循環完畢。

這裡再給大家講解一下MID函數的用法:

Mid是Visual Basic和Microsoft Excel中的一個字符串函數,作用是從一個字符串中截取出指定數量的字符。語法:Mid(String As Variant, Start As Long, [Length As Variant])

這個函數的3個參數各在VB和Excel中互相等價,但VB中的Length參數可以省略,而Excel中num_chars參數不可省略。String As Variant為源字符串;Start是開始位置,Length為要截取的長度。當Start(start_num)參數小於1時,函數返回一個錯誤;當Start參數值大於String(text)參數長度時,返回一空字符串;若從Start參數起截取長度超出字符串末尾,或Length參數被省略,則返回Start參數位置到字符串結尾的所有字符。

上述的程序中就是利用了Start參數的開始位置組織的循環語句,始終截取的是一個長度的字符。

上述代碼完成後,我們在工作表(注意必須是sheet1的工作表),中建立一個按鈕和宏命令連接上,這個不再這裡細說了,不清楚的可以查我之前的文章。如果不想查可以留言,我再講解。

看下面的截圖:按鈕和sheet1我用紅色圈了起來,大家注意。

按分隔符拆分單元格終結篇,利用VBA一勞永逸解決所有這類問題

這時就可以運行程序了。我講了這麼多,在之前的文章中也講了很多,都是為VBA來做鋪墊的,好,看看代碼的運行結果:

按分隔符拆分單元格終結篇,利用VBA一勞永逸解決所有這類問題

非常完美的實現了我們的目的,而且一勞永逸,以後所有的問題都可以用此程序來解決了,不知大家是否明白了。

有的朋友說沒有用過VBA,覺得使用起來有難度。實際上VBA都是以函數為基礎的,只是用代碼串起來了。有了之前我們學習的基礎,使用VBA是可以逐步做到熟能生巧的。而且你可以試一試,一開始用可能會比較陌生,用的多了就能體會出VBA的強大、靈活和高效率。所以,朋友們試一試使用VBA,遇到問題可以聯繫我,咱們一起面對解決。

今日技巧提示:

第一:MID函數在EXCEL和VBA中都可以用。第二,當字符串的分隔符號改變時,可以直接在C1單元格中改正。第三 可以解決工作中大量實際的問題,比如字符是以空格分隔的,那麼直接就可以把分隔符號改成" ",拆分成不同的字符串使用。


分享到:


相關文章: