我有一個 Google 表格電子表格,我希望撰寫一個公式來查找給定短語在電子表格中任意位置的位置,然后回傳搜索單元格下方一定數量單元格的單元格值。例如,如果我正在搜索值“11/15/2022”,并且該單元格是 C4,我想回傳單元格 C6 的值。我曾嘗試使用HLOOKUP()
,但這將我的搜索范圍限制在單行,并且我需要能夠在電子表格中的任何位置進行搜索(并且資料的維度都大于一)。
是否有執行此操作的函式(Excel 或 Google 表格)?任何幫助深表感謝!
uj5u.com熱心網友回復:
嘗試:
=INDEX(TEXTJOIN(, 1, IF(B1:F10=A1, B3:F12, )))
uj5u.com熱心網友回復:
為這段代碼提供 H1:H3 中的查找值、行偏移量和列偏移量值,
查找結果將顯示在 K 列中。
如果查找值有多個匹配項,則所有結果都將溢位到 K 列。(例如,如果給定查找值有 3 個匹配項,但在應用偏移量后,結果值超過 1 個,所有唯一結果將作為列 K 中的陣列回傳)。
=LAMBDA(LOOKUPVALUE,ROWOFFSET,COLOFFSET,DATA,
LAMBDA(ROWA,COLA,
LAMBDA(COLLEN,ROWLEN,
UNIQUE(FLATTEN(MAKEARRAY(ROWLEN,COLLEN,LAMBDA(ROW,COL,
LAMBDA(CELLVALUE,
IF(CELLVALUE=LOOKUPVALUE,INDEX(DATA,ROW ROWOFFSET,COL COLOFFSET),"")
)(INDEX(DATA,ROW,COL))
))),FALSE,TRUE)
)(COUNTBLANK(ROWA) COUNTA(ROWA),COUNTBLANK(COLA) COUNTA(COLA))
)(INDEX(DATA,1),INDEX(DATA,,1))
)($H$1,$H$2,$H$3,$A$1:$F)
uj5u.com熱心網友回復:
使用@Ping 的回答提供的示例資料。在 celH2
中,您可以輸入以下公式:
=LET(rng, A1:E5, nRows, ROWS(rng), nCols, COLUMNS(rng), lookup, G1,
rOffset, G2, cOffSet, G3, check, IF(rng=lookup,1,0), NF, "Not Found",
idx, MAKEARRAY(nRows, nCols, LAMBDA(r,c, r&","&c)),
IF(MAX(check) = 0, NF, LET(found, TEXTSPLIT(TEXTJOIN(";",,MAP(idx,check,
LAMBDA(a,b, IF(b=1, a,"")))),",",";"),
MAP(INDEX(found,,1), INDEX(found,,2),LAMBDA(row,col,
IFERROR(INDEX(rng, row rOffset, col cOffSet), NF)))
))
)
這是相應的輸出:
check
name 是一個[0,1]
與 相同形狀的陣列,如果找到該值rng
則設定為,否則設定為。1
lookup
0
idx
name 是一個與 相同形狀的陣列rng
,并且在每個單元格上都有由逗號 ( ) 分隔的行和列索引位置,
。例如行3
和列4
表示為:3,4
。
注意:您不能在不使用逗號分隔的情況下存盤資訊,因為在每行或每列超過一位數字的情況下,您無法區分行部分和列,反之亦然。
姓名found
:
TEXTSPLIT(TEXTJOIN(";",,MAP(idx,check, LAMBDA(a,b, IF(b=1, a,"")))),",",";")
在第一列上有所有匹配的行,在第二列上有相應的列。該MAP
函式神奇地找到與找到idx
的查找值相對應的值。請記住,idx
兩者check
具有相同的形狀,這就是我們可以MAP
在這里使用的原因。TEXTJOIN
并且TEXTSPLIT
僅用于將資訊置于預期格式中。
最后一個MAP
函式用于在rng
考慮列和行偏移量時找到相應的值。如果找到多個值,它會回傳一個包含相應值的陣列。如果要將輸出放在單個單元格中,可以通過 封裝結果TEXTJOIN
,如下所示:最后一個 的輸出在TEXTJOIN(",",,mapResult)
哪里。mapResult
MAP
這種方法考慮了以下非快樂路徑場景。它回傳Not Found
(它可以定制為不同的值):
lookup
找不到該值- 偏移值產生超出輸入范圍的值
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/534775.html
標籤:擅长谷歌表格