如果要錄製宏,看看會發生什麼,請按照下列步驟操作:
- 打開宏錄製
- 您的數據排序按名稱
- 複製從名字
數據
- 將其粘貼到另一個工作表(如果你需要另加片)
- 名稱片
- 重複下一個名稱
我也寫了一些代碼,你可以用它來開始。爲了使其工作,您需要命名數據選項卡「MasterList」。該代碼按名稱對MasterList上的行進行排序,然後爲列表中的每個唯一名稱創建一個新工作表並將相應數據複製到新工作表,重複該過程直到所有名稱都被複制到新工作表。
將此代碼添加到模塊並運行DispatchTimeSeriesToSheets
過程。
Sub DispatchTimeSeriesToSheets()
Dim ws As Worksheet
Set ws = Sheets("MasterList")
Dim LastRow As Long
LastRow = Range("A" & ws.Rows.Count).End(xlUp).Row
' stop processing if we don't have any data
If LastRow < 2 Then Exit Sub
Application.ScreenUpdating = False
SortMasterList LastRow, ws
CopyDataToSheets LastRow, ws
ws.Select
Application.ScreenUpdating = True
End Sub
Sub SortMasterList(LastRow As Long, ws As Worksheet)
ws.Range("A2:C" & LastRow).Sort Key1:=ws.Range("A1"), Key2:=ws.Range("B1")
End Sub
Sub CopyDataToSheets(LastRow As Long, src As Worksheet)
Dim rng As Range
Dim cell As Range
Dim Series As String
Dim SeriesStart As Long
Dim SeriesLast As Long
Set rng = Range("A2:A" & LastRow)
SeriesStart = 2
Series = Range("A" & SeriesStart).Value
For Each cell In rng
If cell.Value <> Series Then
SeriesLast = cell.Row - 1
CopySeriesToNewSheet src, SeriesStart, SeriesLast, Series
Series = cell.Value
SeriesStart = cell.Row
End If
Next
' copy the last series
SeriesLast = LastRow
CopySeriesToNewSheet src, SeriesStart, SeriesLast, Series
End Sub
Sub CopySeriesToNewSheet(src As Worksheet, Start As Long, Last As Long, _
name As String)
Dim tgt As Worksheet
If (SheetExists(name)) Then
MsgBox "Sheet " & name & " already exists. " _
& "Please delete or move existing sheets before" _
& " copying data from the Master List.", vbCritical, _
"Time Series Parser"
End
End If
Worksheets.Add(After:=Worksheets(Worksheets.Count)).name = name
Set tgt = Sheets(name)
' copy header row from src to tgt
tgt.Range("A1:C1").Value = src.Range("A1:C1").Value
' copy data from src to tgt
tgt.Range("A2:C" & Last - Start + 2).Value = _
src.Range("A" & Start & ":C" & Last).Value
End Sub
Function SheetExists(name As String) As Boolean
Dim ws As Worksheet
SheetExists = True
On Error Resume Next
Set ws = Sheets(name)
If ws Is Nothing Then
SheetExists = False
End If
End Function
VBA相當簡單。你應該做的第一件事是記錄一個宏,並手動將數據移動到你想要的位置。您可以修改錄製的宏以滿足您的需求。 – 2012-08-11 13:58:50
要清楚,您希望將這些數據放在一張表中,並根據名稱將其放在單獨的工作表中。正確? – 2012-08-11 13:58:52
也許只是下載ASAP公用程序?我有我自己的代碼來做到這一點,但這個工具看起來非常有用:http://www.asap-utilities.com/blog/index.php/2010/02/11/how-to-split-data-表格到多個工作表/ – 2012-08-11 15:23:12