- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
3#
發表於 2014-1-30 14:09
| 只看該作者
回復 2# iceandy6150 - Option Explicit
- Sub Ex()
- Dim i As Integer, Sh As Worksheet
- Application.DisplayAlerts = False
- For Each Sh In Sheets
- If Sh.Name <> "工作表1" And Sh.Name <> "工作表2" Then Sh.Delete
- '活頁簿只留 工作表1:是輸入區,工作表2:是歷史記錄
- Next
- With Sheets("工作表2")
- If .UsedRange.Rows.Count = 1 Then '沒有歷史紀錄
- Sheets("工作表1").UsedRange.Copy '複製(含標頭)
- .Range("a1").PasteSpecial xlPasteValues
- Else
- Sheets("工作表1").UsedRange.Offset(1).Copy '複製(不含標頭)
- .Range("A" & .UsedRange.Rows.Count).Offset(3).PasteSpecial xlPasteValues
- 'Offset(3) :空2列->第3列貼上
- End If
- .UsedRange.Range("E:E").AdvancedFilter xlFilterCopy, , .Cells(1, .Columns.Count), True
- '進階篩選 E欄 不重複資料到工作表最右欄 ***取得類別的分類***
- i = 2
- .Cells(1, .Columns.Count - 1) = .UsedRange.Range("E1") '進階篩選的欄位名稱是E欄的標頭
- Do While .Cells(i, .Columns.Count) <> "" '工作表最右欄的儲存格 <>""
- Set Sh = Sheets.Add(, Sheets(Sheets.Count)) '新增的類別工作表
- Sh.Name = .Cells(i, .Columns.Count)
- .Cells(2, .Columns.Count - 1) = Sh.Name
- .UsedRange.AdvancedFilter xlFilterCopy, .Cells(1, .Columns.Count - 1).Resize(2), Sh.[a1], True
- '工作表2 進階篩選 準則[分類]="工作表1"最右欄的儲存格, 複製到新增的類別工作表[A1]
- Do While Sh.UsedRange.Rows.Count > 11 '資料列>11列
- Sh.Copy , Sheets(Sh.Index) '1 原工作表複製
- Sh.Rows("11:" & Sh.Rows.Count).Delete '2 原工作表刪除11列以下的資料(保持10列)
- Set Sh = ActiveSheet '3 複製的工作表 指定給變數
- Sh.Rows("2:11").Delete '4 複製的工作表刪除2:11列的資料
- Loop
- i = i + 1
- Loop
- .Cells(1, .Columns.Count).CurrentRegion = ""
- End With
- End Sub
複製代碼 |
|