前面我們發布過將多個工作簿中的工作表合併到一個工作表簿中,就有網友提了一個問題,如何講一個工作表拆分成多個工作表,其實實現的方法很多,如果數據少的話,我們直接採用篩選後複製粘貼就可以了,如果數據比較多,或者是日常工作的話,每天這樣複製粘貼,就很麻煩~,或者我們使用透視表也可以。。
1
素材文件
我們的素材文件是以某公司為例,數據記錄了公司旗下有7家店鋪,從2016年1月1日到2018年12月31日,每天銷售的流水數據。
存放數據的工作表名稱已修改為「數據源」,工作表的第一行為標題行,一共有2195行數據。
現在我們想按照店鋪名稱,將整個工作表拆分開。
2
操作步驟
打開我們的工作表文件以後,將需要拆分的工作表名字修改成「數據源」。然後按鍵盤上面的Alt+F11,彈出VBA編輯的窗口,將代碼粘貼進代碼編輯器中(代碼見最後附件);
重要的事情重複一次,因為我們代碼裡面,要拆分的工作表名稱叫"數據源",所以你直接把你要拆分的工作表名稱修改成「數據源」才能正常運行。
3
運行程序
在VBA編輯器中,點擊示例中的綠色三角(見上圖),或者是按鍵盤上面的F5都可以。
此時會讓我們選擇標題行,我們通過滑鼠點擊標記標題行(第1行)就可以了;
接下來會讓我們選擇,需要按照哪個欄位拆分,我們就選擇門店名稱(B1)單元格,然後直接點確定。
這個時候程序就會自動運行,滑鼠會閃動,我們需要等一下,運行的時間就和你電腦的配置以及要拆分文件的大小有關,以我們的素材為例,大概需要10秒鐘,就可以搞定,然後會彈出一個提示完成的消息框,我們點確定就可以。
回到我們的文件裡面,可以看到程序已經給我們拆分好了,是不是覺得很方便呢?
附程序代碼(程序在Win7+Excel 2016 運行可行):
視頻演示,稍後發布在網易雲課堂中
Sub 按照指定欄位拆分工作表()
'本程序來源於網絡,原作者不詳,特留此句對原作者表示感謝;
'本程序中,雲淡風輕微課堂(公眾號:word_excel_ppt)進行了部分修改,適用性更廣
Dim myRange As Variant
Dim myArray
Dim titleRange As Range
Dim title As String
Dim columnNum As Integer
myRange = Application.InputBox(prompt:="請用滑鼠點擊標題行:", Type:=8)
myArray = WorksheetFunction.Transpose(myRange)
Set titleRange = Application.InputBox(prompt:="請用滑鼠點擊要拆分的欄位,必須是第一行,且為1個單元格", Type:=8)
title = titleRange.Value
columnNum = titleRange.Column
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim i&, Myr&, Arr, num&
Dim d, k
For i = Sheets.Count To 1 Step -1
If Sheets(i).Name <> "數據源" Then
Sheets(i).Delete
End If
Next i
Set d = CreateObject("Scripting.Dictionary")
Myr = Worksheets("數據源").UsedRange.Rows.Count
Arr = Worksheets("數據源").Range(Cells(2, columnNum), Cells(Myr, columnNum))
For i = 1 To UBound(Arr)
d(Arr(i, 1)) = ""
Next
k = d.keys
For i = 0 To UBound(k)
Set conn = CreateObject("adodb.connection")
Select Case Application.Version * 1 '設置連接字符串,根據版本創建連接
Case Is <= 11
conn.Open "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel 8.0;Data source=" & ThisWorkbook.FullName
Case Is >= 12
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES"";"""
End Select
Sql = "select * from [數據源$] where " & title & " = '" & k(i) & "'"
Worksheets.Add after:=Sheets(Sheets.Count)
With ActiveSheet
.Name = k(i)
For num = 1 To UBound(myArray)
.Cells(1, num) = myArray(num, 1)
Next num
.Range("A2").CopyFromRecordset conn.Execute(Sql)
End With
Sheets(1).Select
Sheets(1).Cells.Select
Selection.Copy
Worksheets(Sheets.Count).Activate
ActiveSheet.Cells.Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Next i
conn.Close
Set conn = Nothing
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox " 已經拆分完成" & vbCrLf & vbCrLf & "公眾號:word_excel_ppt", vbInformation, "雲淡風輕微課堂"
End Sub
▼
▼