返回列表 上一主題 發帖

[發問] 將資料自動分類功能

回復 34# iceandy6150
湊個熱鬧
  1. Sub CreateTable()
  2. Dim i%, Ar(), Rng As Range, A As Range, sht As Object, ky As Variant, k&, s&
  3. Set sht = CreateObject("Scripting.Dictionary")
  4. Application.DisplayAlerts = False
  5. With Sheets("Sheet1")
  6. i = .Index + 1
  7. Do Until Sheets.Count < i '刪除Sheet1之後的工作表
  8.    Sheets(i).Delete
  9.    i = .Index + 1
  10. Loop
  11. For Each A In .Range(.[G2], .[G2].End(xlDown)) '分類儲存
  12.   Set Rng = Sheets("參照表").[A:A].Find(A, lookat:=xlWhole) '找到參照
  13.   If IsEmpty(sht(Rng.Offset(, 1).Value)) Then '分類第一個
  14.   ReDim Preserve Ar(0)
  15.      Ar(0) = Array(A.Offset(, -3).Value, "", "", "", A.Offset(, -1).Value, "", A.Offset(, -2).Value)
  16.      sht(Rng.Offset(, 1).Value) = Ar
  17.      Else '分類繼續找到
  18.      Ar = sht(Rng.Offset(, 1).Value)
  19.      s = UBound(Ar)
  20.      ReDim Preserve Ar(s + 1)
  21.      Ar(s + 1) = Array(A.Offset(, -3).Value, "", "", "", A.Offset(, -1).Value, "", A.Offset(, -2).Value)
  22.      sht(Rng.Offset(, 1).Value) = Ar
  23.      Erase Ar
  24.    End If
  25. Next
  26. For Each ky In sht.keys '用分類當成索引值
  27. Ar = sht(ky)
  28. s = UBound(Ar) + 1
  29. With Sheets.Add(after:=Sheets(Sheets.Count)) '新增工作表
  30. .Name = ky '以分類為表名稱
  31.   Set Rng = Sheets("表格範本").[A1:K22] '表格範本範圍
  32.   Rng.Copy .[A1]: k = 0: .Cells(k + 2, 3) = ky
  33.   For i = 0 To UBound(Ar) '寫入資料
  34.      .Cells(i + 7 + Int(i / 13) * 13, 4).Resize(, 7) = Application.Index(Ar, i)
  35.     If (i + 1) Mod 13 = 0 Then k = k + 26: Rng.Copy .[A1].Offset(k, 0): .Cells(k + 2, 3) = ky '13筆為一個表格
  36.   Next
  37. End With
  38. Next
  39. '轉至總表
  40. If MsgBox("是否存入總表", vbYesNo) = 6 Then .Range("A1").CurrentRegion.Offset(1).Copy Sheets("總表").Cells(.Rows.Count, 1).End(xlUp).Offset(3)
  41. MsgBox "分類完成"
  42. End With
  43. End Sub
複製代碼
學海無涯_不恥下問

TOP

        靜思自在 : 人要知福、惜福、再造福。
返回列表 上一主題