表格摺疊展開操作方法「excel摺疊行怎麼設置」

最近遇到一個小需求,如何將Excel單元格中的內容拆分到多行?

下圖中左邊是原始數據,每位員工需要上班的日期,合併在一個單元格內,日期之間間隔一個空白符;現在需要拆分成表右邊所示的樣子,即將員工需要上班的日期拆分成一行行數據;

Excel一列數據拆分為多行,VBA輕鬆搞定

傳統的方法可以直接對班期列進行分列操作,再將分列所得數據一行行複製轉置粘貼,步驟繁瑣麻煩,這裡用VBA處理,寫好代碼,一秒鐘搞定,一勞永逸~

話不多說,讓我們看下處理效果

Excel一列數據拆分為多行,VBA輕鬆搞定

思路

1、先看下數據,是否規律,有跡可循,可以發現班期列皆為日期之間加一個空白符,一個日期為8位數,長度為8;

2、計算每個單元格內日期的個數,這裡利用【Int(Len(Sheets(“Sheet1”).Cells(i, 2)) / 9) + 1】先利用長度函數Len函數計算出單元格的長度;

再將其長度除以9(雖然每個日期的長度是8,但是日期後面皆跟了一個空白字符,所以除以9);

再利用int函數取整,最後結果需要加上1,因為最後一個日期後面沒有空白符;

最終得出來的結果就是單元格內部包含的日期個數;如對B2單元格用此函數:INT(LEN(B2)/ 9) + 1=3,返回3;

3、依次循環從單元格內取出每一個日期,寫入到Excel工作表中去,這裡用MID函數;

4、在最外面嵌套一個大循環,依次對數據源班期列每一個單元格進行操作,依次取出所有的日期,寫入Excel表格中,完成拆分。

代碼

代碼展示如下:

Excel一列數據拆分為多行,VBA輕鬆搞定

代碼講解:

1、新建一個新的插頁,並重命名為【拆分】插頁,用於存放拆分的數據,並將表頭A1/B1單元格填入內容;

2、參數b主要是用來統計拆分插頁目前數據一共有多少行,方便數據寫入;

3、第一個for循環,循環插頁Sheet1中班期列每個單元格;

4、參數a上面說過,為每個單元格內日期的個數;

5、再次利用一個for循環,依次取出日期,並將之寫入到【拆分】插頁中去;

這裡的 Mid(Sheets(“Sheet1”).Cells(i, 2), (j – 1) * 9 + 1, 8)為取數函數,第一個參數:要取字符串的單元格,第二個參數:要取字符串開始的位置,第三個參數:要取字符串的長度;

6、通過兩次循環,完成數據拆分。

便於大家複製,詳細代碼如下:

Sub 拆分單元格()
Dim a%, b%, i%, j%
Sheets.Add After:=ActiveSheet
ActiveSheet.Name = "拆分"
Sheets("拆分").Cells(1, 1) = "員工ID"
Sheets("拆分").Cells(1, 2) = "班期"
b = Sheets("拆分").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To Sheets("Sheet1").Cells(Rows.Count, 2).End(xlUp).Row
a = Int(Len(Sheets("Sheet1").Cells(i, 2)) / 9) + 1
For j = 1 To a
b = b + 1
Sheets("拆分").Cells(b, 1) = Sheets("Sheet1").Cells(i, 1)
Sheets("拆分").Cells(b, 2) = Mid(Sheets("Sheet1").Cells(i, 2), (j - 1) * 9 + 1, 8)
Next
Next
MsgBox "已完成"
End Sub

小結

對於有規律的、經常需要操作的數據,最好利用VBA技術,一次編寫,受益終身,擺脫繁瑣的操作,本例中僅通過日期數據為大家做個展示,至於其它類型的數據拆分,只需要理清邏輯,對函數參數、代碼做相應的修改即可。

紙上得來終覺淺,絕知此事要躬行,小夥伴們記得動手操作下,有問題,歡迎留言交流!

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/269218.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-16 13:14
下一篇 2024-12-16 13:14

相關推薦

發表回復

登錄後才能評論