- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
6#
發表於 2023-6-13 16:22
| 只看該作者
本帖最後由 Andy2483 於 2023-6-13 16:34 編輯
謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習方案為 比序1明細,請各位前輩指教
執行結果:
Option Explicit
Sub TEST_2()
Application.DisplayAlerts = False
Dim Brr, Crr, A%, Z, i&, C%, T$, T2$, T3$, T5$, xR As Range, M&
Set Z = CreateObject("Scripting.Dictionary")
Set xR = Range([總表!F1], [總表!A65536].End(3)): Brr = xR
ReDim Crr(1 To UBound(Brr), 1 To 200)
For i = 2 To UBound(Brr)
If i = 2 Then C = C + 1: Crr(1, 1) = "N0\比序1": Crr(2, 1) = 1
T2 = Brr(i, 2): T3 = Brr(i, 3): T5 = Brr(i, 5): T = T3 & "|" & T5
If Z(T) <> "" Then: GoTo i01
If Z(T5) = "" Then
C = C + 1: Z(T5) = C: Crr(1, C) = T5: Crr(2, C) = Brr(i, 4) & "/" & T3
Z(T) = 1: Z(T5 & "|r") = 2: GoTo i01
End If
A = Z(T5 & "|r"): A = A + 1: Crr(A, Z(T5)) = Brr(i, 4) & "/" & T3
Z(T5 & "|r") = A: Z(T) = 1
If M < A Then M = A: Crr(M, 1) = M - 1
i01: Next
If C <= 1 Then MsgBox "無資料!": Exit Sub
On Error Resume Next
Sheets("比序1明細").Delete
On Error GoTo 0
With Worksheets.Add(after:=Worksheets(Sheets.Count))
.Name = "比序1明細"
With .[A1].Resize(M, C)
.Value = Crr: .EntireColumn.AutoFit
End With
End With
Set Z = Nothing: Set xR = Nothing: Erase Brr, Crr
End Sub
'=====================================
補充:
以下是比序2明細
執行結果:
Sub TEST_3()
Application.DisplayAlerts = False
Dim Brr, Crr, A%, Z, i&, C%, T$, T2$, T3$, T6$, xR As Range, M&
Set Z = CreateObject("Scripting.Dictionary")
Set xR = Range([總表!F1], [總表!A65536].End(3)): Brr = xR
ReDim Crr(1 To UBound(Brr), 1 To 200)
For i = 2 To UBound(Brr)
If i = 2 Then C = C + 1: Crr(1, 1) = "N0\比序1": Crr(2, 1) = 1
T2 = Brr(i, 2): T3 = Brr(i, 3): T6 = Brr(i, 6): T = T3 & "|" & T6
If Z(T) <> "" Then: GoTo i01
If Z(T6) = "" Then
C = C + 1: Z(T6) = C: Crr(1, C) = T6: Crr(2, C) = Brr(i, 4) & "/" & T3
Z(T) = 1: Z(T6 & "|r") = 2: GoTo i01
End If
A = Z(T6 & "|r"): A = A + 1: Crr(A, Z(T6)) = Brr(i, 4) & "/" & T3
Z(T6 & "|r") = A: Z(T) = 1
If M < A Then M = A: Crr(M, 1) = M - 1
i01: Next
If C <= 1 Then MsgBox "無資料!": Exit Sub
On Error Resume Next
Sheets("比序2明細").Delete
On Error GoTo 0
With Worksheets.Add(after:=Worksheets(Sheets.Count))
.Name = "比序2明細"
With .[A1].Resize(M, C)
.Value = Crr: .EntireColumn.AutoFit
End With
End With
Set Z = Nothing: Set xR = Nothing: Erase Brr, Crr
End Sub |
|