[英]How to encapsulate INDIRECT into INDEX using R/C notation in Excel?
我使用 INDIREKT 創建了一個范圍,我添加了 COL() 來查看這個范圍有多大:
=COL(INDIRECT("R1C1:R1C5"; 0))
如您所見,我使用 R/C 表示法進行行/列尋址。 結果只是第一行中從 1 到 5 的所有數字:
現在我只是使用數字來處理字符串中的字母,如下所示:
="_" & MID("HELLO"; COL(INDIRECT("Z1S1:Z1S5"; 0)); 1)
這按預期工作並返回:
現在工作表上某處有一個隨機單元格,我將這個單元格命名為“_H”。 該單元格僅包含字母 H:
我也為 E、L 和 O 做了這個。
現在我添加第三行包含這個。
=INDEX(INDIRECT(A2);1;1)
將其拉到 5 列的寬度,結果符合預期:
我的問題來了:如何使用 R/C 表示法? 這進入我的腦海:
=INDIRECT("Z2S1"; 0)
這將返回第 2 行第 1 列 aka A2 的正確值。 這是_H。 現在我將其放入 INDEX 公式中,期望 Excel 接受 _H,將其用作 INDEX 的地址並返回此“名稱范圍”的 1;1 的值:
=INDEX(INDIRECT("R2C1";0);1;1)
但結果很簡單:
當我刪除引號時,Excel 在抱怨,所以這是行不通的:
=INDEX(INDIRECT(R2C1;0);1;1)
(顯然,因為 Excel 設置說我更喜歡 A1 表示法)。
但我想知道為什么當我明確告訴 excel 使用 R/C 表示法時它不起作用?
好吧,看起來 Excel 只是取范圍和 R1C1 的值在這個范圍內 - 即 _R。 所以我試圖讓這個專欄參數“動態”。 我知道這會返回整個范圍的列索引。
=COL(INDIRECT("R1C1:R1C5";0))
這會為特定列返回 1、2、3、4 和 5。 那么為什么不把它放到上面的公式中呢:
=INDEX(INDIRECT("Z2S" & COL(INDIRECT("R1C1:R1C5";0));0);1;COL(INDIRECT("R1C1:R1C5";0)))
這將返回 #VALUE 作為錯誤。
如何間接尋址單元格甚至范圍以從特定坐標獲取值(使用 INDEX)? 我特別需要 R/C 表示法,因為我需要用數字來表示范圍(例如第 1 列而不是 A 列等等)。
您可以壓縮您的解決方案 - 不需要 `INDEX(X;1;1) :
=LET(word,"HELLO",
singleCharacters,"_" & MID(word,SEQUENCE(1,LEN(word)),1),
MAP(singleCharacters,LAMBDA(a,INDIRECT(a))))
使用LET
使其更具可讀性。
好的,這比我想象的要容易,Excel 有這個很棒的 MAP 公式:
=MAP(A2:E2; LAMBDA(a; INDEX(INDIRECT(a); 1; 1)))
現在每個特定列都指向引用/范圍名稱,INDEX 可以使用它從特定命名范圍的 R1/C1 中獲取值。
這甚至可以改進為單行:
=MAP(SEQUENCE(1;LEN("HELLO")); LAMBDA(i; INDEX(INDIRECT("_" & MID("HELLO"; i; 1));1;1)))
我可以把它放在我想要的任何地方,我只需要定義命名范圍。
感謝引導正確方向的@Ike。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.