- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
15#
發表於 2023-5-25 14:37
| 只看該作者
本帖最後由 Andy2483 於 2023-5-25 14:57 編輯
謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習將上一帖3個陣列減為2個陣列,學習方案如下,請各位前輩指教
Option Explicit
Sub TEST_3()
Dim Arr, Brr, Y, R&, i&, j&, ST
'↑宣告變數
ST = Timer
'↑令ST變數是 當下時間
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y變數是 字典
Brr = Range([工作表2!A1], [工作表2!A65536].End(3))
'↑令Brr變數是 二維陣列,以表2的A欄儲存格值帶入陣列中
For i = 1 To UBound(Brr): Y(Brr(i, 1) & "") = i: Next
'↑設順迴圈!令以股票代號當key,item是i迴圈數(列號),納入Y字典中
Arr = Range([工作表1!H1], [工作表1!A65536].End(3))
'↑令Arr變數是 二維陣列,以表1的A~H欄儲存格值帶入陣列中
For i = 1 To UBound(Arr)
'↑設順迴圈!
If Y(Arr(i, 2) & "") = "" Then GoTo i01
'↑如果以股票代號查Y字典得item值是空的!就跳到i01標示位置繼續執行
R = R + 1
'↑令R變數累加1 (結果值放置的列號)
For j = 1 To 8: Arr(R, j) = Arr(i, j): Next
'↑設順迴圈!將Arr陣列值往上謄,覆蓋掉原陣列值
Y(Arr(i, 2) & "") = ""
'↑令以股票代號的key對應的item改為空的
i01: Next
With Sheets("工作表1")
.UsedRange.Clear
'↑令清除舊資料
.[A1].Resize(R, 8) = Arr
'↑令Arr陣列值寫入儲存格裡,超過這儲存格範圍的陣列值忽略
End With
Set Y = Nothing: Erase Arr, Brr
'↑令釋放變數
MsgBox Format(Timer - ST, "0.0秒")
'↑令跳出提示窗,顯示此當下時間-ST變數後轉化為有1位小數的"?.?秒"字串
End Sub
==============================================================
以下是學習將上一Code 將2個陣列減為1個陣列,學習方案如下
Option Explicit
Sub TEST_4()
Dim Brr, Y, R&, i&, j&, ST
'↑宣告變數
ST = Timer
'↑令ST變數是 當下時間
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y變數是 字典
Brr = Range([工作表2!A1], [工作表2!A65536].End(3))
'↑令Brr變數是 二維陣列,以表2的A欄儲存格值帶入陣列中
For i = 1 To UBound(Brr): Y(Brr(i, 1) & "") = i: Next
'↑設順迴圈!令以股票代號當key,item是i迴圈數(列號),納入Y字典中
Brr = Range([工作表1!H1], [工作表1!A65536].End(3))
'↑令Brr陣列換裝表1的A~H欄儲存格值
For i = 1 To UBound(Brr)
'↑設順迴圈!
If Y(Brr(i, 2) & "") = "" Then GoTo i01
'↑如果以股票代號查Y字典得item值是空的!就跳到i01標示位置繼續執行
R = R + 1
'↑令R變數累加1 (結果值放置的列號)
For j = 1 To 8: Brr(R, j) = Brr(i, j): Next
'↑設順迴圈!將Brr陣列值往上謄,覆蓋掉原陣列值
Y(Brr(i, 2) & "") = ""
'↑令以股票代號的key對應的item改為空的
i01: Next
With Sheets("工作表1")
.UsedRange.Clear
'↑令清除舊資料
.[A1].Resize(R, 8) = Brr
'↑令Brr陣列值寫入儲存格裡,超過這儲存格範圍的陣列值忽略
End With
Set Y = Nothing: Erase Brr
'↑令釋放變數
MsgBox Format(Timer - ST, "0.0秒")
'↑令跳出提示窗,顯示此當下時間-ST變數後轉化為有1位小數的"?.?秒"字串
End Sub |
|