返回列表 上一主題 發帖

三個欄位對比資料及讀取資料

三個欄位對比資料及讀取資料

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 - 最後一欄有數據的

範例a.rar (19.2 KB)

回復 1# 198188


紅色字這樣的範例。K00351 & K00371 數量需要KH表的加總數量
94099 - 95090 因爲Data 表本身沒有的,就在最後一行加上。
95088  數量需要KH表的加總數量

另外忘了有個條件,就是原本Data 表有,KH表沒有的那行,需要黃色HIGHLIGHT.

TOP

謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習心得如下,請各位前輩指教
執行前:


執行結果:


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
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

本帖最後由 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

TOP

回復 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
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 5# Andy2483


    字典的原理及運用有沒有哪裏可以有比較詳細的講解及示範?

TOP

回復 5# Andy2483
T = "關鍵字"
V = Z(T)
'↑還沒接觸字典之前後學認為 Z(T)= ??? 這樣的語法才能添加key到字典裡,
'但是此行已經將T這key放入Z字典中,item是空的   這是比較特別的地方
MsgBox Z.Count
-------------------------------------------------------------------------------------------------------
執行完變1是因為字典的特性嗎?
如果在改變一個 key 時沒有發現該 key,那麼將創建一個新的 key 並且其相關聯的 item 被設置為空。
感謝Andy大不吝指導分享!!

TOP

參考(搜尋編號12459) google網址:https://hcm19522.blogspot.com/
google"EXCEL迷"  blog  或google網址:https://hcm19522.blogspot.com/

TOP

本帖最後由 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
要常應用字典才能與字典成為好友
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 6# 198188

謝謝前輩一起學習
其實如果字典key不會重複特性 與5# 的字典特性懂了,常運用就會進步
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 每天無所事事,是人生的消費者,積極、有用才是人生的創造者。
返回列表 上一主題