返回列表 上一主題 發帖

VLOOKUP問題

本帖最後由 Andy2483 於 2024-3-1 10:17 編輯

謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,將二維結果陣列在字典提取/編輯/放回...達到想要的效果,學習方案如下,請各位前輩指教
執行前:


執行結果:


Option Explicit
Sub TEST()
Dim Brr, Crr(1 To 200, 1 To 2), A, Z, i&, j%, R&, c%, T$, xR As Range
'↑宣告變數:&是長整數,%是短整數,沒有指定是通用型變數
Set Z = CreateObject("Scripting.Dictionary")
'↑令Z變數是 字典
Brr = Range([IV1].End(xlToLeft), [A65536].End(xlUp))
'↑令Brr變數是 帶入區域儲存格值的二維陣列
For i = 2 To UBound(Brr)
'↑設順迴圈!令i從2 到Brr陣列縱向最大索引列號
   T = Trim(Brr(i, 1)): A = Z(T): R = Z(T & "/r")
   '↑令T變數是i迴圈列1欄Brr陣列值:令A變數是 以變數查Z字典回傳的item值
   '令R變數是 T變數連接"/r"字串組成的新字串為key,查Z字典回傳的item值

   If Not IsArray(A) Then A = Crr: R = 1: A(R, 1) = Brr(1, 1): A(R, 2) = Brr(i, 1)
   '↑如果A變數不是二維陣列!就令A變數變為同Crr的二維陣列:令R變數=1:令R變數列1欄A陣列值是 1列1欄Brr陣列值
   '令R變數列2欄A陣列值是 i迴圈列1欄Brr陣列值

   For j = 2 To UBound(Brr, 2)
   '↑設順迴圈!令j從2 到Brr陣列橫向最大索引欄號
      If Brr(i, j) = "" Then GoTo j01
      '↑如果i迴圈列j迴圈欄Brr陣列值是 空字元!就跳到標示j01位置繼續執行
      R = R + 1
      '↑令R變數累加1
      A(R, 1) = Brr(1, j)
      '↑令R變數列1欄A陣列值是 1列j迴圈欄Brr陣列值
      A(R, 2) = Brr(i, j)
      '↑令R變數列2欄A陣列值是 i迴圈列j迴圈欄Brr陣列值
j01: Next
   Z(T) = A: Z(T & "/r") = R
   '↑令key是 T變數,的item值以 A變數放回Z字典中
Next
Set xR = [A11]
'↑令xR變數是 物件 A11 儲存格
For Each A In Z.KEYS
'↑設逐項迴圈!令A變數是 Z字典裡的key
   If Not IsArray(Z(A)) Then GoTo A01
   '↑如果以A變數查Z字典得item不是陣列!就跳到標示 A01位置繼續執行
   xR.Resize(Z(A & "/r"), 2) = Z(A)
   '↑令區域儲存格以 二維陣列值寫入
   Set xR = xR(1, 4)
   '↑令xR變數變為向右移動自身格算起的第4欄儲存格
A01: Next
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 知識要用心體會,才能變成自己的智慧。
返回列表 上一主題