- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
16#
發表於 2023-6-15 15:11
| 只看該作者
謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習方案如下,請各位前輩指教
執行前:
執行結果:
Option Explicit
Sub TEST()
Dim Brr, Va&, Vb&, Z, Q, i&, Ra&, Rb&, M&, Ta$, Tb$
[E7:F65536,I2:J65536].ClearContents
Set Z = CreateObject("Scripting.Dictionary")
Brr = Intersect([A1].CurrentRegion, [A:B])
For i = 1 To UBound(Brr)
Ta = Brr(i, 1): Tb = Brr(i, 2): Brr(i, 1) = "": Brr(i, 2) = ""
If Ta = "" Then GoTo i01 Else Va = Z(Ta)
If Va = 1 Then
Ra = Ra + 1
Brr(Ra, 1) = Ta
M = IIf(M < Ra, Ra, M)
Else:
Z(Ta) = 1
End If
i01: If Tb = "" Then GoTo i02 Else Vb = Z("|" & Tb)
If Vb = 1 Then
Rb = Rb + 1
Brr(Rb, 2) = Tb
M = IIf(M < Rb, Rb, M)
Else
Z("|" & Tb) = 1
End If
i02: Next
If M > 0 Then [E7].Resize(M, 2) = Brr
ReDim Brr(1 To UBound(Brr), 1 To 2)
Ra = 0: Rb = 0: M = 0
For Each Q In Z.KEYS
If InStr(Q, "|") = 0 Then
If Z.Exists("|" & Q) = Empty Then
Rb = Rb + 1
Brr(Rb, 2) = Q
End If
ElseIf Z.Exists(Mid(Q, 2)) = Empty Then
Ra = Ra + 1
Brr(Ra, 1) = Mid(Q, 2)
End If
If M < Ra Then M = Ra
If M < Rb Then M = Rb
Next
If M > 0 Then [I2].Resize(M, 2) = Brr
Set Z = Nothing: Erase Brr
End Sub |
|