Board logo

標題: 三個欄位對比資料及讀取資料 [打印本頁]

作者: 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/)