- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-3-24
|
4#
發表於 2023-12-19 12:49
| 只看該作者
謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,用字典記錄欄號與列號的學習方案如下,請各位前輩指教
執行前:
執行結果:
Option Explicit
Sub TEST_A()
Dim 資料陣列, 空陣列, 字典, i&, j%, 字串分割一維陣列, 參賽得獎者, 名次%
Dim 空陣列欄號%, 空陣列列號&, 參賽得獎人數%, 名次數&, 參賽得獎人次&
Set 字典 = CreateObject("Scripting.Dictionary")
資料陣列 = Range([B2], [A65536].End(xlUp))
ReDim 空陣列(1000, 1000)
For i = 1 To UBound(資料陣列)
名次 = Val(資料陣列(i, 2))
空陣列列號 = 字典(名次)
If 空陣列列號 = 0 Then
名次數 = 名次數 + 1
空陣列列號 = 名次數
字典(名次) = 空陣列列號
空陣列(空陣列列號, 0) = 名次
End If
字串分割一維陣列 = Split(資料陣列(i, 1) & " ", " ")
For Each 參賽得獎者 In 字串分割一維陣列
If 參賽得獎者 = "" Then GoTo i01
空陣列欄號 = 字典(參賽得獎者)
If 空陣列欄號 = 0 Then
參賽得獎人數 = 參賽得獎人數 + 1
空陣列欄號 = 參賽得獎人數
字典(參賽得獎者) = 空陣列欄號
空陣列(0, 空陣列欄號) = 參賽得獎者
End If
空陣列(空陣列列號, 空陣列欄號) = 空陣列(空陣列列號, 空陣列欄號) + 1
參賽得獎人次 = 參賽得獎人次 + 1
i01: Next
Next
With [E4].Resize(名次數 + 1, 參賽得獎人數 + 1)
.Value = 空陣列
.Item(1) = "名次\參賽得獎者"
.Borders.LineStyle = xlContinuous
.EntireColumn.AutoFit
End With
MsgBox "參賽得獎人數 " & 參賽得獎人數 & " 人 , 參賽得獎人次 " & 參賽得獎人次 & " 人次"
End Sub |
|