- 帖子
- 254
- 主題
- 6
- 精華
- 0
- 積分
- 310
- 點名
- 0
- 作業系統
- W10
- 軟體版本
- Excel 2016
- 閱讀權限
- 20
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2019-6-16
- 最後登錄
- 2025-6-21
|
7#
發表於 2021-4-10 00:39
| 只看該作者
回復 6# PJChen
有空再幫我試試看是不是你要的結果謝謝- Public Sub 跨工作簿比對並移動練習0409()
- Application.ScreenUpdating = False
- '新增一個工作表排列後 存到陣列在刪除工作表
- Sheets.Copy After:=Sheets(Sheets.Count)
- Range([A65535].End(3), [A4]).Sort [A4], 1, Header:=2
- Set xD = CreateObject("Scripting.Dictionary")
- Arr = Range([A65535].End(3), [A1])
-
- Application.DisplayAlerts = False
- Sheets(Sheets.Count).Delete
- Application.DisplayAlerts = True
- '--------------------------------------------------------
- '把排列後的資料存到字典裡
- For X = 1 To UBound(Arr, 1)
- xD(Arr(X, 1)) = Trim(xD(Arr(X, 1)) & " " & X)
- Next X
- Erase Arr
- '--------------------------------------------------------
- '尋找檔案的位置然後開啟
- A = Dir(ThisWorkbook.Path & "\" & "*.xlsx")
- Workbooks.Open ThisWorkbook.Path & "\" & A
- '--------------------------------------------------------
- '切換到指定工作表 把含有"料號"的那一欄位置記下來
- Sheets("整月統計").Activate '這裡可以指定要排列的工作表的位置 "整月統計" 或 "3"
- Arr = ActiveSheet.UsedRange
- For X = 1 To UBound(Arr, 1)
- For Y = 1 To UBound(Arr, 2)
- If Arr(X, Y) = "料號" Then
- Y = Y
- X = X + 1
- GoTo A01
- End If
- Next Y
- Next X
- A01: Erase Arr
- '--------------------------------------------------------
- '尋找比對後並重新排列
- For Each D In xD
- SR = Split(xD(D), " ")
- For Each S In SR
- If D = Empty Then Exit For
- With Range(Cells(1, Y), Cells(Rows.Count, Y).End(3))
- On Error Resume Next
- Set C = .Find(D)
- G = .FindNext(C).Address
- If C = D Then
- If Not C Is Nothing Then
- Rows(C.Row).Cut
- Set C = .FindNext(G)
- K = K + 1
- Rows(X + K).Insert , 1
- End If
- End If
- Application.CutCopyMode = False
- On Error GoTo 0
- End With
- Next S
- Next D
- Set C = Nothing
-
- Application.ScreenUpdating = True
- End Sub
複製代碼
0409.rar (287.7 KB)
|
|