標題:
資料依條件 分SHEET
[打印本頁]
作者:
hugh0620
時間:
2011-3-22 12:41
標題:
資料依條件 分SHEET
Dear 大大們~
附件是幫學弟妹完成的檔案
可以達到需求 但有一個缺點就是若再按一次"匯出"的按鈕~ 會有[標籤名稱]一樣~ 產生錯誤
整個撰寫上也不是很好~
其條件很簡單,主要是
by Item_ID 為分頁條件
另外兩個
by Point_OFFSET
by Data_Date
在同一天中,將Point_OFFSET (共三站)的資料直列放在一起
想請個位大大~ 是否有更好的寫法~ 供小弟參考學習
[attach]5090[/attach]
作者:
GBKEE
時間:
2011-3-22 15:12
本帖最後由 GBKEE 於 2011-3-22 15:17 編輯
回復
1#
hugh0620
方法一 刪掉工作表
Sub Ex()
Dim Sh As Worksheet
Application.DisplayAlerts = False
For Each Sh In Sheets
If Sh.Name <> "Data匯整" And Sh.Name <> "原始Data" Then Sh.Delete
Next
Application.DisplayAlerts = True
End Sub
複製代碼
方法二 除錯
Dim N As Integer
A = Application.CountA(Sheet2.[A3:A65536]) 'A統計出需要跑幾個Sheet
On Error GoTo Sheet_Add '有錯誤到 行號 Sheet_Add
For N = 1 To A
'Sheets.Add AFTER:=Worksheets(N + 1) '新增sheet
Sheets("" & N).Activate '''
Sheets("" & N).Cells.Clear '''
ActiveSheet.Range("A1") = Sheet2.Range("B2")
ActiveSheet.Range("B1") = Sheet2.Cells(2 + N, 1)
ActiveSheet.Range("B2") = Sheet2.Range("E2")
'
'
'
Do
Loop
H = 0
Z = 0
ActiveSheet.Rows("2:2").Select
Selection.NumberFormatLocal = "yyyy/m/d"
Next
Exit Sub
Sheet_Add: '行號
With Sheets.Add(AFTER:=Worksheets(N + 1)) '新增sheet
.Name = Sheet2.Cells(2 + N, 1) '標籤名稱
End With
Resume Next '返回錯誤處
End Sub
複製代碼
Macro5()的簡化
Sub Macro5() '複製貼上Data匯整
Sheet1.Range("A2").CurrentRegion.Copy Sheet2.Range("B2")
End Sub
複製代碼
作者:
hugh0620
時間:
2011-3-22 18:45
本帖最後由 hugh0620 於 2011-3-22 18:53 編輯
感謝大大GBKEE 的回復唷~ 加上一個刪除鈕~ 可以結省掉刪除sheet的動作~
複製的部份~ 也簡化~ 也能夠理解~
使整個更完整操作上更簡化也簡便許多~
但是大大~ 除錯的部份~ 有測試過~ 但產生錯誤唷~
造成Data匯整的sheet 資料被覆蓋
作者:
GBKEE
時間:
2011-3-22 19:46
回復
3#
hugh0620
請傳檔上來看看
作者:
hugh0620
時間:
2011-3-23 09:07
回復
4#
GBKEE
大大~ 執行的結果會卡在產生第21 Sheet 時~ 會有錯誤
錯誤產生時~ 值行到第26行指令
26. .Name = Sheet2.Cells(2 + N, 1) '標籤名稱
如附件
[attach]5101[/attach]
作者:
GBKEE
時間:
2011-3-23 10:09
本帖最後由 GBKEE 於 2011-3-23 11:17 編輯
回復
5#
hugh0620
Data匯整 的工作表序號不連續 18,19,21,22 缺 20
改為
Sheet2.Cells(2 + N, 1).Text
For N = 1 To A
'Sheets.Add AFTER:=Worksheets(N + 1) '新增sheet
Sheets(
Sheet2.Cells(2 + N, 1).Text
).Activate '''
Sheets(
Sheet2.Cells(2 + N, 1).Text
).Cells.Clear
修改你的程式如下
Private Sub CommandButton1_Click()
Dim N As Integer, E
CommandButton2_Click
With Sheets("Data匯整")
Sheets("原始Data").Range("A2").CurrentRegion.Copy .Range("B2")
'=====排序====
.Range("B3").End(xlToRight).End(xlDown).Sort Key1:=.Range("B3"), _
Order1:=xlAscending, Key2:=.Range("C3"), Order2:=xlAscending, Key3:=.Range("E3"), Order3:=xlAscending, Header:=xlYes
'=====排序====
'=====進階篩選====
' .Range("B2").Select
' Range(Selection, Selection.End(xlDown)).Select
.Range("B2:B256").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range( _
"A2"), Unique:=True
'=====進階篩選====
End With
On Error GoTo Sheet_Add '有錯誤到 行號 Sheet_Add
A = Application.CountA(Sheet2.[A3:A65536]) 'A統計出需要跑幾個Sheet
For N = 1 To A
Sheets(Sheet2.Cells(2 + N, 1).Text).Select
With ActiveSheet
.Cells.Clear '''
.Range("A1") = Sheets("Data匯整").Range("B2")
.Range("B1") = Sheets("Data匯整").Cells(2 + N, 1)
.Range("B2") = Sheets("Data匯整").Range("E2")
For Each E In Array(1, 97, 193)
With .Cells(Rows.Count, 1).End(xlUp).Offset(1)
.Cells(1) = "POINT_1"
.Cells(2) = "POINT_2"
.Cells.Resize(2).AutoFill .Cells.Resize(96)
.Cells(1, 2).Resize(96) = E
End With
Next
End With
Do Until Sheet2.Cells(3 + H, 2) = ""
If Sheet2.Cells(3 + H, 2) = Sheet2.Cells(2 + N, 1) Then
If ActiveSheet.Cells(2, 2 + Z) = Sheet2.Cells(3 + H, 3) Then
Select Case Sheet2.Cells(3 + H, 5)
Case 1
For X = 1 To 96
ActiveSheet.Cells(2 + X, 2 + Z) = Sheet2.Cells(3 + H, 5 + X)
Next
Case 97
For X = 1 To 96
ActiveSheet.Cells(98 + X, 2 + Z) = Sheet2.Cells(3 + H, 5 + X)
Next
Case 193
For X = 1 To 96
ActiveSheet.Cells(194 + X, 2 + Z) = Sheet2.Cells(3 + H, 5 + X)
Next
End Select
Else
Z = Z + 1
ActiveSheet.Cells(2, 2 + Z) = Sheet2.Cells(3 + H, 3)
Select Case Sheet2.Cells(3 + H, 5)
Case 1
For X = 1 To 96
ActiveSheet.Cells(2 + X, 2 + Z) = Sheet2.Cells(3 + H, 5 + X)
Next
Case 97
For X = 1 To 96
ActiveSheet.Cells(98 + X, 2 + Z) = Sheet2.Cells(3 + H, 5 + X)
Next
Case 193
For X = 1 To 96
ActiveSheet.Cells(194 + X, 2 + Z) = Sheet2.Cells(3 + H, 5 + X)
Next
End Select
End If
End If
H = H + 1
Loop
H = 0
Z = 0
'ActiveSheet.Rows ("2:2")
'Selection.NumberFormatLocal = "yyyy/m/d"
ActiveSheet.Rows("2:2").NumberFormatLocal = "yyyy/m/d"
Next
Exit Sub
Sheet_Add: '行號
If Err <> 9 Then
MsgBox "錯誤值 " & Err & " 請檢查錯誤 !!!"
Exit Sub
End If
With Sheets.Add(AFTER:=Worksheets(N + 1)) '新增sheet
.Name = Sheet2.Cells(2 + N, 1) '標籤名稱
End With
Resume Next '返回錯誤處
End Sub
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)