tft每日頭條

 > 職場

 > vba拆分單元格内容

vba拆分單元格内容

職場 更新时间:2024-06-18 21:43:51

前面我們發布過将多個Excel工作簿中的工作表合并到一個工作表簿中,就有網友提了一個問題,如何講一個Excel工作簿中的工作表拆分成多個工作表,其實實現的方法很多,如果數據少的話,我們直接采用Excel的篩選,然後複制粘貼就可以了,如果數據比較多,或者是日常工作的話,每天這樣複制粘貼,就很麻煩~,或者我們使用透視表也可以。我們這講就來使用VBA的方法來實現,這個方法很簡單,隻需要複制代碼(代碼也是小編從網上找的,然後修改了下,這樣通用性就更強了,更多精彩請關注公衆号:word_excel_ppt),運行就可以了。

1、素材文件

vba拆分單元格内容(Excel小技巧使用VBA10秒鐘搞定拆分工作表)1

素材文件

我們的素材文件是以某公司為例,數據記錄了公司旗下有7家店鋪,從2016年1月1日到2018年12月31日,每天銷售的流水數據。

存放數據的工作表名稱已修改為“數據源”,工作表的第一行為标題行,一共有2195行數據。

現在我們想按照店鋪名稱,将整個工作表拆分開。

2、操作步驟

打開我們的工作表文件以後,将需要拆分的工作表名字修改成“數據源”。然後按鍵盤上面的Alt F11,彈出VBA編輯的窗口,将代碼粘貼進代碼編輯器中(代碼見最後附件);

vba拆分單元格内容(Excel小技巧使用VBA10秒鐘搞定拆分工作表)2

代碼窗口

重要的事情重複一次,因為我們代碼裡面,要拆分的工作表名稱叫"數據源",所以你直接把你要拆分的工作表名稱修改成“數據源”才能正常運行。

3、運行程序

在VBA編輯器中,點擊示例中的綠色三角(見上圖),或者是按鍵盤上面的F5都可以。

vba拆分單元格内容(Excel小技巧使用VBA10秒鐘搞定拆分工作表)3

選擇标題行

此時會讓我們選擇标題行,我們通過鼠标點擊标記标題行(第1行)就可以了;

vba拆分單元格内容(Excel小技巧使用VBA10秒鐘搞定拆分工作表)4

選擇拆分字段

接下來會讓我們選擇,需要按照哪個字段拆分,我們就選擇門店名稱(B1)單元格,然後直接點确定。

vba拆分單元格内容(Excel小技巧使用VBA10秒鐘搞定拆分工作表)5

搞定

這個時候程序就會自動運行,鼠标會閃動,我們需要等一下,運行的時間就和你電腦的配置以及要拆分文件的大小有關,以我們的素材為例,大概需要10秒鐘,就可以搞定,然後會彈出一個提示完成的消息框,我們點确定就可以。

vba拆分單元格内容(Excel小技巧使用VBA10秒鐘搞定拆分工作表)6

運行結果

回到我們的文件裡面,可以看到程序已經給我們拆分好了,是不是覺得很方便呢?

附程序代碼(程序在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

更多精彩請關注公衆号:word_excel_ppt

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关職場资讯推荐

热门職場资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved