返回列表 上一主題 發帖

VLOOKUP問題

範例  :

1. 如果 A1:W6, 都有資料。

2. A13, 輸入陣列公式後, 向下複製至A38 :
{=OFFSET(list!A$1,,SMALL(IF(T(OFFSET(list!A$1,MATCH($B$11,list!$A$2:$A$6,0),COLUMN(A:Z)))<>"",COLUMN(A:Z),50),ROWS(A$1:A1)))&""}

3. A34 公式 :
{=OFFSET(list!A$1,,SMALL(IF(T(OFFSET(list!A$1,MATCH($B$11,list!$A$2:$A$6,0),COLUMN(A:Z)))<>"",COLUMN(A:Z),50),ROWS(A$1:A22)))&""}
=OFFSET(list!A$1,,SMALL({1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,50,50,50,50},22))&""
=OFFSET(list!A$1,,22)&""
返回 W1 最後產品, 品名

4. A35 公式 :
{=OFFSET(list!A$1,,SMALL(IF(T(OFFSET(list!A$1,MATCH($B$11,list!$A$2:$A$6,0),COLUMN(A:Z)))<>"",COLUMN(A:Z),50),ROWS(A$1:A23)))&""}
=OFFSET(list!A$1,,SMALL({1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,50,50,50,50},23))&""
=OFFSET(list!A$1,,50)&""
返回 A$1 後 第50欄 (AY1) 資料, AY1 應該是空白的。
=0&""
=""
=空白

TOP

回復 11# JBY


    感謝大大的解答!小弟還需消化一會:)

TOP

http://blog.xuite.net/hcm19522/twblog/353362071

TOP

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

        靜思自在 : 世上有兩件事不能等:一、孝順 二、行善。
返回列表 上一主題