Board logo

標題: [發問] 增加同名稱工作表並將資料複製到新工作表 [打印本頁]

作者: b9208    時間: 2012-3-3 23:48     標題: 增加同名稱工作表並將資料複製到新工作表

各位前輩
請教增加同名稱工作表並將資料複製到新工作表
依照儲存格內容增加同名稱工作表並將資料複製到新工作表
如附檔:
依據總表內姓名欄位,增加同姓名名稱之工作表,並將各姓名資料值複製到各工作表中。
例如:甲、乙工作表
請注意在總表裡有運Excel 函數
懇切請求先進們指導

[attach]9827[/attach]
作者: Hsieh    時間: 2012-3-4 21:53

  1. Sub Ex()
  2. Dim Sht(), Rng As Range, Ar(), A As Range
  3. Set d = CreateObject("Scripting.Dictionary")
  4. Set d1 = CreateObject("Scripting.Dictionary")
  5. For Each sh In Sheets
  6. ReDim Preserve Sht(s)
  7. Sht(s) = sh.Name
  8. s = s + 1
  9. Next
  10. With 工作表1
  11. Set Rng = .[B2:O3]
  12. For Each A In .Range(.[D5], .[D5].End(xlDown))
  13.    d1(A.Value) = d1(A.Value) + 1
  14.    If IsEmpty(d(A.Value)) Then
  15.    ReDim Preserve Ar(0)
  16.    Ar(0) = Array(d1(A.Value), A.Offset(, -1).Value, A.Value, A.Offset(, 1).Value, A.Offset(, 2).Value, A.Offset(, 3).Value, A.Offset(, 4).Value, A.Offset(, 5).Value, A.Offset(, 6).Value, A.Offset(, 7).Value, A.Offset(, 8).Value, A.Offset(, 9).Value, A.Offset(, 10).Value, A.Offset(, 11).Value)
  17.    d(A.Value) = Ar
  18.    Else
  19.    Ar = d(A.Value)
  20.    k = UBound(Ar)
  21.    ReDim Preserve Ar(k + 1)
  22.    Ar(k + 1) = Array(d1(A.Value), A.Offset(, -1).Value, A.Value, A.Offset(, 1).Value, A.Offset(, 2).Value, A.Offset(, 3).Value, A.Offset(, 4).Value, A.Offset(, 5).Value, A.Offset(, 6).Value, A.Offset(, 7).Value, A.Offset(, 8).Value, A.Offset(, 9).Value, A.Offset(, 10).Value, A.Offset(, 11).Value)
  23.    d(A.Value) = Ar
  24.    End If
  25. Next
  26. End With
  27. For Each ky In d.keys
  28.   If IsError(Application.Match(ky, Sht, 0)) Then
  29.   With Worksheets.Add(after:=Sheets(Sheets.Count))
  30.   .Name = ky
  31.   End With
  32.   End If
  33.   With Sheets(ky)
  34.   .Cells.Clear
  35.   .[F:G].NumberFormat = "h:m"
  36.   Rng.Copy .[B2]
  37.   Ar = d(ky)
  38.   With .[B4].Resize(UBound(d(ky)) + 1, 14)
  39.   .Value = Application.Transpose(Application.Transpose(Ar))
  40.   .Borders.LineStyle = 1
  41.   End With
  42.   End With
  43. Next
  44. End Sub
複製代碼
回復 1# b9208
作者: register313    時間: 2012-3-4 23:01

本帖最後由 register313 於 2012-3-4 23:57 編輯
  1. Sub Filter()
  2. Sheets("總表").Select
  3. C = Sheets("總表").[B65536].End(xlUp).Row
  4. D = Sheets("資料庫").[E65536].End(xlUp).Row
  5. Rng2 = Sheets("資料庫").Range("E4:E" & D)
  6. With Sheets("總表")
  7.   For Each R In Rng2
  8.      For Each sh In ThisWorkbook.Sheets
  9.        Application.DisplayAlerts = False
  10.        If sh.Name = R Then
  11.           sh.Delete
  12.        End If
  13.        Application.DisplayAlerts = True
  14.      Next
  15.      Set sh = Sheets.Add(after:=Sheets(Sheets.Count))
  16.      sh.Name = R
  17.      .Range("B4:O" & C).AutoFilter Field:=3, Criteria1:=R
  18.      If .FilterMode Then
  19.         .AutoFilter.Range.SpecialCells(12).Copy Sheets(R).Cells(3, 2)
  20.         .Rows("2:3").Copy Sheets(R).Cells(2, 1)
  21.      End If
  22.      Sheets(R).Select
  23.      For Each A In Range("D4:D" & [D65536].End(xlUp).Row)
  24.          If A <> "" Then
  25.             A.Offset(0, -2) = A.Row - 3
  26.          End If
  27.      Next
  28.   Next
  29.   .Range("B4:O" & C).AutoFilter
  30. End With
  31. End Sub
複製代碼

作者: b9208    時間: 2012-3-4 23:35

回復 2# Hsieh
非常感謝 Hsieh 版主
將程式碼置於工作表〞總表〞內,執行結果顯示〞陣列索引超出範圍〞。
查看多次,還是無法解決。
懇請版主再次指導
謝謝
作者: b9208    時間: 2012-3-4 23:47

回復 2# Hsieh
謝謝 Hsieh 版主
己找到問題並解決了
With Sheets("總表")
非常感謝
再一次感謝
作者: b9208    時間: 2012-3-4 23:50

回復 3# register313
非常謝謝前輩指導
但執行後,只有表頭複製,其下資料並未複製。
謝謝
作者: register313    時間: 2012-3-4 23:56

回復 6# b9208
略作修改
  1. Sub Filter()
  2. Sheets("總表").Select
  3. C = Sheets("總表").[B65536].End(xlUp).Row
  4. D = Sheets("資料庫").[E65536].End(xlUp).Row
  5. Rng2 = Sheets("資料庫").Range("E4:E" & D)
  6. With Sheets("總表")
  7.   For Each R In Rng2
  8.      For Each sh In ThisWorkbook.Sheets
  9.        Application.DisplayAlerts = False
  10.        If sh.Name = R Then
  11.           sh.Delete
  12.        End If
  13.        Application.DisplayAlerts = True
  14.      Next
  15.      Set sh = Sheets.Add(after:=Sheets(Sheets.Count))
  16.      sh.Name = R
  17.      .Range("B4:O" & C).AutoFilter Field:=3, Criteria1:=R
  18.      If .FilterMode Then
  19.         .AutoFilter.Range.SpecialCells(12).Copy Sheets(R).Cells(3, 2)
  20.         .Rows("2:3").Copy Sheets(R).Cells(2, 1)
  21.      End If
  22.      Sheets(R).Select
  23.      For Each A In Range("D4:D" & [D65536].End(xlUp).Row)
  24.          If A <> "" Then
  25.             A.Offset(0, -2) = A.Row - 3
  26.          End If
  27.      Next
  28.   Next
  29.   .Range("B4:O" & C).AutoFilter
  30. End With
  31. End Sub
複製代碼
[attach]9847[/attach]
作者: b9208    時間: 2012-3-5 05:33

回復 7# register313
謝謝前輩
可以使用了




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)