返回列表 上一主題 發帖

陣列與字典

陣列與字典

謝謝論壇,謝謝各位前輩
後學藉此帖將這陣子學到的陣列與字典心得用國語字典比喻,請各位前輩指教,請各位後學一起學習

Option Explicit
Sub 國語字典()
Dim xD, Arr, Brr
Set xD = CreateObject("Scripting.Dictionary")
xD("吃") = "咀嚼食物後吞下"
'↑字串"吃"是key ,字串"咀嚼食物後吞下"是Item
xD("喝") = "吸飲"
'↑字串"喝"是key ,字串"吸飲"是Item
xD("玩") = "遊戲"
'↑字串"玩"是key ,字串"遊戲"是Item
xD("樂") = "喜悅"
'↑字串"樂"是key ,字串"喜悅"是Item
Arr = xD.keys
'↑(字典Keys本身就是陣列) ,同義 Arr = Array("吃", "喝", "玩", "樂")
Brr = xD.Items
'↑(字典Items本身也是陣列),
'同義 Brr = Array("咀嚼食物後吞下", "吸飲", "遊戲", "喜悅")


'這字典裡有4個國字(keys) 及這4個國字的解釋(items)
MsgBox xD("吃")
MsgBox xD("喝")
MsgBox xD("玩")
MsgBox xD("樂")
MsgBox Arr(0)
MsgBox Arr(1)
MsgBox Arr(2)
MsgBox Arr(3)
MsgBox Brr(0)
MsgBox Brr(1)
MsgBox Brr(2)
MsgBox Brr(3)
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

本帖最後由 Andy2483 於 2023-4-13 09:58 編輯

'當後方的程序不需要用到item值時,就隨意給個字元(""空字元是最常用的)
'就像利用字典的key來濾掉重複的值最常用來取代簡易的 進階篩選
Option Explicit
Sub 國語字典_空字元的item()
Dim xD, Arr, Brr
Set xD = CreateObject("Scripting.Dictionary")
xD("吃") = ""
'↑字串"吃"是key ,字串""是Item
xD("喝") = ""
'↑字串"喝"是key ,字串""是Item
xD("玩") = ""
'↑字串"玩"是key ,字串""是Item
xD("樂") = ""
'↑字串"樂"是key ,字串""是Item
Arr = xD.keys
'↑(字典Keys本身就是陣列) ,同義 Arr = Array("吃", "喝", "玩", "樂")
Brr = xD.Items
'↑(字典Items本身也是陣列),
'同義 Brr = Array("", "", "", "")


'這字典裡有4個國字(keys) 及這4個國字的解釋(items(空字元))
MsgBox xD("吃")
MsgBox xD("喝")
MsgBox xD("玩")
MsgBox xD("樂")
MsgBox Arr(0)
MsgBox Arr(1)
MsgBox Arr(2)
MsgBox Arr(3)
MsgBox Brr(0)
MsgBox Brr(1)
MsgBox Brr(2)
MsgBox Brr(3)
xD("吃") = "咀嚼食物後吞下"
'這時字典裡一樣有4個國字(keys) 及這4個國字的解釋(items)
'不一樣的是 keys裡的"吃"對應的item由("")變成了 "咀嚼食物後吞下"

MsgBox xD("吃")
Arr = xD.keys
'keys裡的"吃"一樣排在首位
Brr = xD.Items
MsgBox Arr(0)
MsgBox Brr(0)
'這程序裡納入過5次字元到xD字典的keys裡,但是key不會重複
'納入過5次字元 : "吃", "喝", "玩", "樂", "吃"
'最終只有這4個 "吃", "喝", "玩", "樂"

'既然後方的程序不需要用到item,就隨意給個""(空字元)吧!
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

本帖最後由 Andy2483 於 2023-4-13 10:23 編輯

Option Explicit
Sub 不要隨意假設()
Dim xD, Arr, Brr
Set xD = CreateObject("Scripting.Dictionary")
If xD("吃") = "咀嚼食物後吞下" Then MsgBox "不可能"
If xD("喝") = "吸飲" Then MsgBox "不可能"
If xD("玩") = "遊戲" Then MsgBox "不可能"
If xD("樂") = "喜悅" Then MsgBox "不可能"
Arr = xD.keys
Brr = xD.Items
MsgBox Arr(0)
MsgBox Arr(1)
MsgBox Arr(2)
MsgBox Arr(3)
MsgBox Brr(0)
MsgBox Brr(1)
MsgBox Brr(2)
MsgBox Brr(3)
MsgBox xD.Count
'這個範例裡依以往認知字典裡應該還沒有key
MsgBox xD("勤")
MsgBox xD.Count
End Sub
'=====================================
Option Explicit
Sub 簡易迴圈建立字典()
Dim xD, Arr, Brr, i&
Set xD = CreateObject("Scripting.Dictionary")
Arr = Array("吃", "喝", "玩", "樂")
Brr = Array("咀嚼食物後吞下", "吸飲", "遊戲", "喜悅")
For i = 0 To UBound(Arr)
   xD(Arr(i)) = Brr(i)
Next
MsgBox xD("吃")
MsgBox xD("喝")
MsgBox xD("玩")
MsgBox xD("樂")
MsgBox xD.Count
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

本帖最後由 mdr0465 於 2023-4-13 12:47 編輯

回復 3# Andy2483


我已經留意了很久,Andy和各位前輩的經常在論壇幫助各位學員的求助,

因後學愚昧,學了多時都未能掌握當中的應用,現在Andy 前輩樂意無私分享陣列與字典的應用和教學, 後學萬分感激

懇請Andy 前輩不定時上載多一點實例和教學,令後學更加理解陣列與字典的運用, 後學無以為報, 萬分感激和支持:handshake

TOP

回復 4# mdr0465


    謝謝前輩回復,謝謝論壇
後學分享剛整理的以下心得,請前輩們指教,請後學們常上論壇發表觀點與心得

Option Explicit
Sub Item中的陣列()
Dim xD, Arr, Brr, i&
'↑宣告變數:(xD,Arr,Brr)是通用型變數,i是長整數
Set xD = CreateObject("Scripting.Dictionary")
'↑令xD這通用型變數是 字典
Arr = Array("吃", "喝", "玩", "樂")
'↑令Arr這通用型變數是 一維陣列,4個字串元素,索引號0~3
Brr = Array("咀嚼食物後吞下", "吸飲", "遊戲", "喜悅")
'↑令Brr這通用型變數是 一維陣列,4個字串元素,索引號0~3
xD("國字") = Arr
'↑令"國字"字串當key,item是Arr一維陣列
xD("國字解釋") = Brr
'↑令"國字解釋"字串當key,item是Brr一維陣列
For i = 0 To UBound(xD("國字"))
'↑設迴圈!i從0到 xD("國字")這一維陣列的最後索引號
   MsgBox xD("國字")(i) & " = " & xD("國字解釋")(i)
   '↑令跳出提示窗
Next
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 5# Andy2483
Andy前輩的用心程度讓人讚嘆,今日看到該範例才對字典這塊有了初步的理解..
萬分感謝!!

TOP

回復 6# shuo1125


    謝謝前輩回復
常上論壇一起學習
後學早上整理了一下心得,請前輩參考,請各位前輩指教

Option Explicit
Sub 字典寫入儲存格裡()
Dim xD, Arr, Brr
Set xD = CreateObject("Scripting.Dictionary")
xD("吃") = "咀嚼食物後吞下"
xD("喝") = "吸飲"
xD("玩") = "遊戲"
xD("樂") = "喜悅"
'字典keys本身就是陣列,是一維陣列,由左至右擺放
Workbooks.Add
'↑令新增一個活頁簿
[A1].Resize(1, xD.Count) = xD.keys
'↑令新增活頁簿第1個工作表[A1]儲存格,擴展向右(xD字典key數量)欄數,
'此範圍儲存格值以xD字典的所有key帶入

[A2].Resize(1, xD.Count) = xD.items
'↑令[A2]儲存格,擴展向右(xD字典key數量)欄數,
'此範圍儲存格值以xD字典的所有item帶入

End Sub

執行結果:
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

偉大的ANDY大大
幫助論壇很多人

TOP

回復 8# coafort


    謝謝前輩回復,一起學習
後學藉此帖整理心得,請前輩們指教

執行結果:


Option Explicit
Sub 字典_縱向寫入儲存格裡()
Dim xD, Arr, Brr
Set xD = CreateObject("Scripting.Dictionary")
xD("吃") = "咀嚼食物後吞下"
xD("喝") = "吸飲"
xD("玩") = "遊戲"
xD("樂") = "喜悅"
'字典keys本身就是陣列,是一維陣列,由左至右擺放
Workbooks.Add
'↑令新增一個活頁簿
[A1].Resize(xD.Count, 1) = Application.Transpose(xD.keys)
'↑令新增活頁簿第1個工作表[A1]儲存格,擴展向下(xD字典key數量)列數,
'此範圍儲存格值以xD字典的所有key轉置帶入

[B1].Resize(xD.Count, 1) = Application.Transpose(xD.items)
'↑令[B1]儲存格,擴展向右(xD字典key數量)列數,
'此範圍儲存格值以xD字典的所有item轉置帶入

End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

謝謝ANDY大的文字說明, 幫助論壇人更容易理解與學習, 感謝 !

TOP

        靜思自在 : 不怕事多,只怕多事。
返回列表 上一主題