- 帖子
- 4901
- 主題
- 44
- 精華
- 24
- 積分
- 4916
- 點名
- 148
- 作業系統
- Windows 7
- 軟體版本
- Office 20xx
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台北
- 註冊時間
- 2010-4-30
- 最後登錄
- 2025-6-19
               
|
38#
發表於 2014-2-7 14:14
| 只看該作者
回復 34# iceandy6150
湊個熱鬧- Sub CreateTable()
- Dim i%, Ar(), Rng As Range, A As Range, sht As Object, ky As Variant, k&, s&
- Set sht = CreateObject("Scripting.Dictionary")
- Application.DisplayAlerts = False
- With Sheets("Sheet1")
- i = .Index + 1
- Do Until Sheets.Count < i '刪除Sheet1之後的工作表
- Sheets(i).Delete
- i = .Index + 1
- Loop
- For Each A In .Range(.[G2], .[G2].End(xlDown)) '分類儲存
- Set Rng = Sheets("參照表").[A:A].Find(A, lookat:=xlWhole) '找到參照
- If IsEmpty(sht(Rng.Offset(, 1).Value)) Then '分類第一個
- ReDim Preserve Ar(0)
- Ar(0) = Array(A.Offset(, -3).Value, "", "", "", A.Offset(, -1).Value, "", A.Offset(, -2).Value)
- sht(Rng.Offset(, 1).Value) = Ar
- Else '分類繼續找到
- Ar = sht(Rng.Offset(, 1).Value)
- s = UBound(Ar)
- ReDim Preserve Ar(s + 1)
- Ar(s + 1) = Array(A.Offset(, -3).Value, "", "", "", A.Offset(, -1).Value, "", A.Offset(, -2).Value)
- sht(Rng.Offset(, 1).Value) = Ar
- Erase Ar
- End If
- Next
- For Each ky In sht.keys '用分類當成索引值
- Ar = sht(ky)
- s = UBound(Ar) + 1
- With Sheets.Add(after:=Sheets(Sheets.Count)) '新增工作表
- .Name = ky '以分類為表名稱
- Set Rng = Sheets("表格範本").[A1:K22] '表格範本範圍
- Rng.Copy .[A1]: k = 0: .Cells(k + 2, 3) = ky
- For i = 0 To UBound(Ar) '寫入資料
- .Cells(i + 7 + Int(i / 13) * 13, 4).Resize(, 7) = Application.Index(Ar, i)
- If (i + 1) Mod 13 = 0 Then k = k + 26: Rng.Copy .[A1].Offset(k, 0): .Cells(k + 2, 3) = ky '13筆為一個表格
- Next
- End With
- Next
- '轉至總表
- If MsgBox("是否存入總表", vbYesNo) = 6 Then .Range("A1").CurrentRegion.Offset(1).Copy Sheets("總表").Cells(.Rows.Count, 1).End(xlUp).Offset(3)
- MsgBox "分類完成"
- End With
- End Sub
複製代碼 |
|