- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
6#
發表於 2023-12-25 15:03
| 只看該作者
本帖最後由 Andy2483 於 2023-12-26 08:36 編輯
謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習方案如下,請各位前輩指教
執行前:
執行結果:
Option Explicit
Sub TEST()
Dim 資料陣列, 空陣列, 字典, 代號$, i&, j%, 結果列號&, 結果欄號%, 結果欄數%, 最大列數%, 工程別$, 關鍵字$
Set 字典 = CreateObject("Scripting.Dictionary")
關鍵字 = Left([B2], 4)
資料陣列 = Range([F3], [B65536].End(3)(2, 0))
ReDim 空陣列(1 To 1000, 1 To 100)
For i = 1 To UBound(資料陣列) - 1
If InStr(資料陣列(i, 1), 關鍵字) = 0 Then GoTo i01
結果欄號 = IIf(工程別 <> 資料陣列(i, 1), 結果欄號 + 1, 結果欄號)
字典(i) = 結果欄號
工程別 = 資料陣列(i, 1)
字典(結果欄號 & "/r") = 1
空陣列(1, 結果欄號) = Split(資料陣列(i, 1), " ")(0)
資料陣列(i + 1, 1) = IIf(資料陣列(i + 1, 1) = "", 資料陣列(i, 1), 資料陣列(i + 1, 1))
i01: Next
結果欄數 = 結果欄號
For j = 2 To UBound(資料陣列, 2)
For i = 1 To UBound(資料陣列)
代號 = Split(資料陣列(i, j) & " ", " ")(1)
If Not 代號 Like "[A-Z][A-Z]####*" Or 字典(i) = 0 Then GoTo i02
結果欄號 = 字典(i)
結果列號 = 字典(結果欄號 & "/r")
結果列號 = 結果列號 + 1: 字典(結果欄號 & "/r") = 結果列號
空陣列(結果列號, 字典(i)) = Left(代號, 6)
If 最大列數 < 結果列號 Then 最大列數 = 結果列號
i02: Next
Next
With [H2]
.CurrentRegion.ClearContents
.Resize(最大列數, 結果欄數) = 空陣列
End With
End Sub |
|