標題:
[發問]
增加同名稱工作表並將資料複製到新工作表
[打印本頁]
作者:
b9208
時間:
2012-3-3 23:48
標題:
增加同名稱工作表並將資料複製到新工作表
各位前輩
請教增加同名稱工作表並將資料複製到新工作表
依照儲存格內容增加同名稱工作表並將資料複製到新工作表
如附檔:
依據總表內姓名欄位,增加同姓名名稱之工作表,並將各姓名資料值複製到各工作表中。
例如:甲、乙工作表
請注意在總表裡有運Excel 函數
懇切請求先進們指導
[attach]9827[/attach]
作者:
Hsieh
時間:
2012-3-4 21:53
Sub Ex()
Dim Sht(), Rng As Range, Ar(), A As Range
Set d = CreateObject("Scripting.Dictionary")
Set d1 = CreateObject("Scripting.Dictionary")
For Each sh In Sheets
ReDim Preserve Sht(s)
Sht(s) = sh.Name
s = s + 1
Next
With 工作表1
Set Rng = .[B2:O3]
For Each A In .Range(.[D5], .[D5].End(xlDown))
d1(A.Value) = d1(A.Value) + 1
If IsEmpty(d(A.Value)) Then
ReDim Preserve Ar(0)
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)
d(A.Value) = Ar
Else
Ar = d(A.Value)
k = UBound(Ar)
ReDim Preserve Ar(k + 1)
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)
d(A.Value) = Ar
End If
Next
End With
For Each ky In d.keys
If IsError(Application.Match(ky, Sht, 0)) Then
With Worksheets.Add(after:=Sheets(Sheets.Count))
.Name = ky
End With
End If
With Sheets(ky)
.Cells.Clear
.[F:G].NumberFormat = "h:m"
Rng.Copy .[B2]
Ar = d(ky)
With .[B4].Resize(UBound(d(ky)) + 1, 14)
.Value = Application.Transpose(Application.Transpose(Ar))
.Borders.LineStyle = 1
End With
End With
Next
End Sub
複製代碼
回復
1#
b9208
作者:
register313
時間:
2012-3-4 23:01
本帖最後由 register313 於 2012-3-4 23:57 編輯
Sub Filter()
Sheets("總表").Select
C = Sheets("總表").[B65536].End(xlUp).Row
D = Sheets("資料庫").[E65536].End(xlUp).Row
Rng2 = Sheets("資料庫").Range("E4:E" & D)
With Sheets("總表")
For Each R In Rng2
For Each sh In ThisWorkbook.Sheets
Application.DisplayAlerts = False
If sh.Name = R Then
sh.Delete
End If
Application.DisplayAlerts = True
Next
Set sh = Sheets.Add(after:=Sheets(Sheets.Count))
sh.Name = R
.Range("B4:O" & C).AutoFilter Field:=3, Criteria1:=R
If .FilterMode Then
.AutoFilter.Range.SpecialCells(12).Copy Sheets(R).Cells(3, 2)
.Rows("2:3").Copy Sheets(R).Cells(2, 1)
End If
Sheets(R).Select
For Each A In Range("D4:D" & [D65536].End(xlUp).Row)
If A <> "" Then
A.Offset(0, -2) = A.Row - 3
End If
Next
Next
.Range("B4:O" & C).AutoFilter
End With
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
略作修改
Sub Filter()
Sheets("總表").Select
C = Sheets("總表").[B65536].End(xlUp).Row
D = Sheets("資料庫").[E65536].End(xlUp).Row
Rng2 = Sheets("資料庫").Range("E4:E" & D)
With Sheets("總表")
For Each R In Rng2
For Each sh In ThisWorkbook.Sheets
Application.DisplayAlerts = False
If sh.Name = R Then
sh.Delete
End If
Application.DisplayAlerts = True
Next
Set sh = Sheets.Add(after:=Sheets(Sheets.Count))
sh.Name = R
.Range("B4:O" & C).AutoFilter Field:=3, Criteria1:=R
If .FilterMode Then
.AutoFilter.Range.SpecialCells(12).Copy Sheets(R).Cells(3, 2)
.Rows("2:3").Copy Sheets(R).Cells(2, 1)
End If
Sheets(R).Select
For Each A In Range("D4:D" & [D65536].End(xlUp).Row)
If A <> "" Then
A.Offset(0, -2) = A.Row - 3
End If
Next
Next
.Range("B4:O" & C).AutoFilter
End With
End Sub
複製代碼
[attach]9847[/attach]
作者:
b9208
時間:
2012-3-5 05:33
回復
7#
register313
謝謝前輩
可以使用了
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)