我有一個包含1000多行的電子表格。唯一標識符是位於列B中的供應商ID。數據涵蓋了從A列到N列。我想分析此主電子表格並創建新工作表或更好地創建每個供應商ID的新文件/工作簿。電子表格不包含標題。供應商ID可能只有一行,或者它可以有20行數據,3行數據等。最後,我想將新文件轉換爲.CSV格式。在創建新的工作表或文件時,我希望保持源電子表格中的所有格式。數據包含字符的數量,日期和常規輸入。從一個源工作表創建多個工作表或工作簿
我幾天前在網上找到了下面的代碼,並根據我的需要對其進行了修改。我能夠實現它的工作,但我不喜歡它如何帶來.value,並且我失去了日期的格式,並且爲最終結果創建了格式化問題。
我想建立一個足夠靈活的代碼,在那裏我可以修改它以在工作簿中創建多個工作表(帶或不帶標頭),或者讓它具有足夠的靈活性,在那裏我可以修改它以基於每個供應商ID創建工作簿標準(或用於其他目的的獨特標準)。我試圖阻止用戶必須根據合併工作表手動創建168個文件或工作表。
Sub AllocatedataCSV()
Dim ws As Worksheet
Set ws = Sheets("CSV Master")
Dim LastRow As Long
LastRow = Range("B" & ws.Rows.Count).End(xlUp).Row
' stop processing if we don't have any data
If LastRow < 2 Then Exit Sub
Application.ScreenUpdating = False
CopyDataToSheets LastRow, ws
ws.Select
Application.ScreenUpdating = True
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("B1:B" & LastRow)
SeriesStart = 2
Series = Range("B" & SeriesStart)
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 data from src to tgt
tgt.Range("A1:N" & Last).Value = _
src.Range("A" & Start & ":N" & 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
我在與整個宏麻煩。我認爲,因爲我使用了論壇中現有的宏,並將其修改爲我的鏈接,這是導致我遇到麻煩的原因。那麼我能找到什麼是不同的方法? – fonzy16
我認爲這種方法很有用。你需要具體說明你遇到了什麼麻煩。 – Joe
謝謝。我犯了一個錯誤,我讓它工作。我想我的問題更多的是關於理解代碼:理解以下內容的含義:如果LastRow <2 Then Exit Sub; SeriesStart = 2; – fonzy16