標題:
三個欄位對比資料及讀取資料
[打印本頁]
作者:
198188
時間:
2024-2-27 11:34
標題:
三個欄位對比資料及讀取資料
KH 表 核對 Data 表
從KH 表第3行開始到最後一行,在Data 表内找尋下面三個對比都相同的
KH 表欄B 對比 Data 表欄A
KH 表欄C 對比 Data 表欄B
KH 表欄D 對比 Data 表欄C
上面三樣都相同的話,將KH 表的欄E 導入DATA 表的該行相同數據的欄D
如果3樣有任何1樣不同的,將KH 表的欄B - D 導入DATA 表最後一行的欄A-D
最後DATA 欄E 就計算,欄D 減去 欄F - 最後一欄有數據的
作者:
198188
時間:
2024-2-28 10:45
[attach]37519[/attach]
回復
1#
198188
紅色字這樣的範例。K00351 & K00371 數量需要KH表的加總數量
94099 - 95090 因爲Data 表本身沒有的,就在最後一行加上。
95088 數量需要KH表的加總數量
另外忘了有個條件,就是原本Data 表有,KH表沒有的那行,需要黃色HIGHLIGHT.
作者:
Andy2483
時間:
2024-3-1 08:06
謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習心得如下,請各位前輩指教
執行前:
[attach]37522[/attach]
執行結果:
[attach]37523[/attach]
Option Explicit
Sub TEST()
Dim Brr, Z, i&, T$
'↑宣告變數:&是長整數,$是字串變數,沒有指定的是通用型變數
Set Z = CreateObject("Scripting.Dictionary")
'↑令Z變數是 字典
Brr = Range([KH!E3], [KH!A65536].End(xlUp))
'↑令Brr變數是二維陣列,以儲存格值帶入
For i = 1 To UBound(Brr)
'↑設順迴圈!令i從1 到Brr陣列縱向最大索引列號
T = Trim(Brr(i, 2)) & "/" & Val(Brr(i, 3)) & "/" & Val(Brr(i, 4))
'↑令T變數是3個欄位Brr陣列值以"/"符號串接成的新字串
Z(T) = Z(T) + Val(Brr(i, 5))
'↑令T變數為key,item累加第5欄Brr陣列值
Next
Brr = Range([Data!G1], [Data!A65536].End(xlUp))
'↑令Brr變數是二維陣列,以另表儲存格值帶入
For i = 2 To UBound(Brr)
'↑設順迴圈!令i從1 到Brr陣列縱向最大索引列號
T = Trim(Brr(i, 1)) & "/" & Val(Brr(i, 2)) & "/" & Val(Brr(i, 3))
'↑令T變數是3個欄位Brr陣列值以"/"符號串接成的新字串
Brr(i - 1, 1) = Z(T)
'↑令Brr陣列第1欄寫入查Z字典的item值
Next
With [Data!D2].Resize(UBound(Brr) - 1)
'↑以下是關於結果儲存格的程序
.Value = Brr
'↑令儲存格值以Brr陣列值寫入
.Offset(, 1) = "=D2-SUM(F2:" & [Data!IV1].End(xlToLeft)(2).Address(0, 0) & ")"
'↑令結餘欄寫入公式 讓自動運算
End With
End Sub
作者:
mdr0465
時間:
2024-3-1 12:55
本帖最後由 mdr0465 於 2024-3-1 12:56 編輯
回復
3#
Andy2483
Andy 學兄,你好
大後輩正在努力重溫所有學兄給各位論壇後學的詳細注解,
但有一點大後輩不明白的,請學兄不厭其煩指導後輩
請看以下的紅色是我不明白的地方
Option Explicit
Sub TEST()
Dim Brr, Z, i&, T$
'↑宣告變數:&是長整數,$是字串變數,沒有指定的是通用型變數
Set Z = CreateObject("Scripting.Dictionary")
'↑令Z變數是 字典
Brr = Range([KH!E3], [KH!A65536].End(xlUp))
'↑令Brr變數是二維陣列,以儲存格值帶入
For i = 1 To UBound(Brr)
'↑設順迴圈!令i從1 到Brr陣列縱向最大索引列號
T = Trim(Brr(i, 2)) & "/" & Val(Brr(i, 3)) & "/" & Val(Brr(i, 4))
'↑令T變數是3個欄位Brr陣列值以"/"符號串接成的新字串
Z(T) = Z(T) + Val(Brr(i, 5))
'↑令T變數為key,item累加第5欄Brr陣列值
這是Z(T) (是寫入key值) = Z(T) + Val(Brr(i, 5)) (是寫入item值)
Next
Brr = Range([Data!G1], [Data!A65536].End(xlUp))
'↑令Brr變數是二維陣列,以另表儲存格值帶入
For i = 2 To UBound(Brr)
'↑設順迴圈!令i從1 到Brr陣列縱向最大索引列號
T = Trim(Brr(i, 1)) & "/" & Val(Brr(i, 2)) & "/" & Val(Brr(i, 3))
'↑令T變數是3個欄位Brr陣列值以"/"符號串接成的新字串
Brr(i - 1, 1) = Z(T)
'↑令Brr陣列第1欄寫入查Z字典的item值
這一句, 為何這樣的編寫是寫入item值而不是寫入key值呢?
Next
With [Data!D2].Resize(UBound(Brr) - 1)
'↑以下是關於結果儲存格的程序
.Value = Brr
'↑令儲存格值以Brr陣列值寫入
.Offset(, 1) = "=D2-SUM(F2:" & [Data!IV1].End(xlToLeft)(2).Address(0, 0) & ")"
'↑令結餘欄寫入公式 讓自動運算
End With
End Sub
作者:
Andy2483
時間:
2024-3-1 13:49
回復
4#
mdr0465
謝謝前輩一起學習,以下代碼請執行看看
Option Explicit
Sub TEST()
Application.DisplayAlerts = False
Dim Z, T$, V&
Set Z = CreateObject("Scripting.Dictionary")
MsgBox Z.Count
'↑跳出提示窗,顯示Z字典裡key數量0
T = "關鍵字"
V = Z(T)
'↑還沒接觸字典之前後學認為 Z(T)= ??? 這樣的語法才能添加key到字典裡,
'但是此行已經將T這key放入Z字典中,item是空的 這是比較特別的地方
MsgBox Z.Count
'↑跳出提示窗,顯示Z字典裡key數量1
MsgBox Z(T)
'↑跳出提示窗,顯示以T變數為key查Z字典得到的item值 空字元
V = V + 10
Z(T) = Z(T) + V
'↑令Z字典裡 key是 T變數的item值 + V變數
MsgBox Z("關鍵字")
'↑跳出提示窗,顯示以"關鍵字"字串為key查Z字典得到的item值 10
End Sub
作者:
198188
時間:
2024-3-1 14:03
回復
5#
Andy2483
字典的原理及運用有沒有哪�堨i以有比較詳細的講解及示範?
作者:
shuo1125
時間:
2024-3-1 14:09
回復
5#
Andy2483
T = "關鍵字"
V = Z(T)
'↑還沒接觸字典之前後學認為 Z(T)= ??? 這樣的語法才能添加key到字典裡,
'但是此行已經將T這key放入Z字典中,item是空的 這是比較特別的地方
MsgBox Z.Count
-------------------------------------------------------------------------------------------------------
執行完變1是因為字典的特性嗎?
如果在改變一個 key 時沒有發現該 key,那麼將創建一個新的 key 並且其相關聯的 item 被設置為空。
感謝Andy大不吝指導分享!!
作者:
hcm19522
時間:
2024-3-1 14:31
參考(搜尋編號12459) google網址:
https://hcm19522.blogspot.com/
作者:
Andy2483
時間:
2024-3-1 14:36
本帖最後由 Andy2483 於 2024-3-1 14:49 編輯
回復
7#
shuo1125
謝謝前輩一起學習
是的! 字典很特別
Option Explicit
Sub TEST()
Dim Z, V&
Set Z = CreateObject("Scripting.Dictionary")
V = Z("關鍵字1") + Z("關鍵字2") + Z("關鍵字3") + Z("關鍵字4") + 100
MsgBox Z.Count
'此時Z字典裡已經有4個key
MsgBox Z("關鍵字1") + Z("關鍵字2") + Z("關鍵字3") + Z("關鍵字4")
End Sub
要常應用字典才能與字典成為好友
作者:
Andy2483
時間:
2024-3-1 14:44
回復
6#
198188
謝謝前輩一起學習
其實如果字典key不會重複特性 與5# 的字典特性懂了,常運用就會進步
作者:
198188
時間:
2024-3-1 14:50
回復
8#
hcm19522
謝謝
作者:
198188
時間:
2024-3-1 14:52
回復
10#
Andy2483
看了這些範例,跟著範例去修改,還有點懂,自己去創建,還需要更加深入了解知識才行。
作者:
mdr0465
時間:
2024-3-1 22:10
回復
5#
Andy2483
Andy 學兄,
謝謝你詳細和耐心的解釋,
大後輩獲益良多, 謝謝指導
作者:
准提部林
時間:
2024-3-2 12:37
類似問題發了好幾帖, 就在這給檔案//
程式碼須自己一行一行去解讀, 後續維護還是要靠自己
[attach]37535[/attach]
作者:
198188
時間:
2024-3-2 13:03
回復
14#
准提部林
謝謝准大指點
作者:
mdr0465
時間:
2024-3-3 22:44
回復
14#
准提部林
謝謝准大提供有用資料, 謝謝
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)