返回列表 上一主題 發帖

請問如何將多工作表的表格資料匯總在一張工作表

Sub TEST()
Dim Sht As Worksheet, UR As Range, xR As Range, i%, c&, r&, N&, ARR
ReDim ARR(1 To 30000, 1 To 6)
Sheets("工作表2").UsedRange.Offset(1, 0).EntireRow.Delete
For Each Sht In Sheets
    If Sht.Name Like "#-#" = False Then GoTo 101
    Set UR = Sht.UsedRange
    For r = 1 To UR.Rows.Count Step 5
    For c = 1 To UR.Columns.Count Step 3
        Set xR = UR(r + 1, c)
        If Application.Sum(xR(2, 3).Resize(3)) = 0 Then GoTo 99
        N = N + 1
        ARR(N, 1) = "'" & Sht.Name: ARR(N, 2) = xR(2): ARR(N, 3) = xR(0)
        For i = 1 To 3
            ARR(N, 3 + i) = xR(i + 1, 3)
        Next
99: Next c
    Next r
101: Next
[工作表2!A2:F2].Resize(N) = ARR
End Sub

Xl0000341.rar (13.95 KB)

====================

TOP

回復 3# gaishutsusuru

1) 每3欄+每5行 為一個區塊
2) "標題行"在每一區塊的第2行, 以 xR 定位[型號]這一儲存格
3) xR右第3欄下的3個儲存格, 為三個尺寸的[數量], 若數量加總為0, 表示無記錄, 略過
4) 取xR上一格為[?日], xR下一格為[型號內容], 填入Arr相應位置
5) 最後以N為行數, 填入總表

=========================

TOP

回復 6# gaishutsusuru


If (Sht.Name Like "#-#") + (Sht.Name Like "#-#-#") = 0 Then GoTo 101

"#-#"  表示1位數的串接, 如:5-6,  若為5-16即為不符合,
亦即一個"#"為一個數字. "####" 就是指"0000"~"9999"的範圍,

"*#-#*" , 只要中間是1位數串接的都符合, "*"可以是任意長度的字元(數字或中英文或符號)
"??-??" , 則是"-"的前後限定只能有2個長度的任意字元

TOP

        靜思自在 : 待人退一步,愛人寬一寸,就會活得很快樂。
返回列表 上一主題