以某種方式將單元格中的字串轉換為行和列範圍的數組?

以某種方式將單元格中的字串轉換為行和列範圍的數組?

我打算將這些名稱從列表中轉換為如圖所示的範圍矩陣,在調試公式時,我希望它準確地向我顯示行和列範圍的數組,有什麼方法可以將這些名稱轉換為像這個這樣的範圍?在此輸入影像描述

答案1

如果您想要文字字串,請使用:

="={"""&TEXTJOIN(""",""",,SUBSTITUTE($A$2:$A$5," ","""/""")) & """}"

如果您想要一個將在其他地方使用的實際數組,請使用:

IFERROR(FILTERXML("<a><b>"&SUBSTITUTE(TRANSPOSE($A$2:$A$5)," ","</b><b>")&"</b></a>","//b["&ROW($A$1:$A$4)&"]"),"")

這將建立一個可用於其他公式的 4x4 陣列。根據版本的不同,在另一個公式中使用此公式需要在退出編輯模式時使用 Ctrl-Shift-Enter 而不是 Enter 來強制使用陣列公式。

我不知道有什麼方法可以做你想做的事情F9並在公式欄中顯示陣列。

答案2

好吧,文字字串,減去我不會複製的拼寫錯誤“JONH”,可以通過稍微調整一下 Scott Craner 的公式來獲得(我使用的SEQUENCE()不是ROWS()技巧,而是使用新函數來習慣)他們,呃? ),然後用作一些字串工作的基礎:

="={"""&TEXTJOIN("""\""",,INDEX(TRANSPOSE(B234:B237),SEQUENCE(4)))&""","""&TEXTJOIN("""\""",,INDEX(TRANSPOSE(C234:C237),SEQUENCE(4)))&""","""&TEXTJOIN("""\""",,INDEX(TRANSPOSE(D234:D237),SEQUENCE(4)))&""","""&TEXTJOIN("""\""",,INDEX(TRANSPOSE(E234:E237),SEQUENCE(4)))&"""}"

請記住,雖然它給出了所需的字面輸出,但輸出是不是從 Excel 的角度來看,它是一個陣列常數,並且不會像結果那樣被它精確地使用F9

它只是 Excel 所關心的一些文字字串。因此,在公式中使用它可能會導致失敗,或純粹偶然的成功。也許對於某些用途來說它也能正常運作。但它與 Excel 完全不同或等效,因為內部使用陣列常數突出顯示某些內容並點擊F9建立。

也就是說,它又醜又臃腫。我猜我不會在評論中來回跟踪該線程,所以我不明白為什麼 Scott Craner 使用TRANSPOSE()這迫使我這樣做,因為似乎所需的輸出是左右的(上面的評論為“A234 =” Jonh”,.. .)所以把它拿出來,然後將他的A2:A5 調整為A1:A4 (或為我的實驗刪除一行),我得到:

=IFERROR(FILTERXML("<a><b>"&SUBSTITUTE(($A$234:$A$237)," ","</b><b>")&"</b></a>","//b["&SEQUENCE(1,4)&"]"),"")

對於他的公式並重新設計我的公式,然後將他的公式混合以使用單個公式,我得到:

="={"""&TEXTJOIN("""\""",,B234:E234)&""","""&TEXTJOIN("""\""",,B235:E235)&""", """&TEXTJOIN("""\""",,B236:E236)&""","""&TEXTJOIN("""\""",,B237:E237)&"""}"

順便說一句,由於它是有圖案的,在構造上是重複的,因此可以使用舊的CONCATENATE()union operator現在的技巧來構建它,在最終連接之前很好地調整行和列,粘貼特殊值作為值,然後放置一個“=”在它之前使它成為一個公式。現在更容易了。對於不在四行以內且元素少於五個的資料。

F9那麼,這給出了表達的所需結果字串,儘管同樣,它並不是 Excel 看到的結果與您在使用上述內容後看到的數組常數相同。

然後,修改後的斯科特·克蘭納公式將給出評論中描述的單一單元格結果。它本身可以在公式中使用,讓 Excel 建立該內部陣列常數。但我認為,不是透過使用字串公式(這在計算上是一個死胡同),而是透過使用字串公式so Excel will evaluate it to the desired在陣列常數中所需的任何公式中使用 Scott Craner 的(調整後的)公式,然後,不要填充這 16 個單元格,而是將其傳遞到該公式內的計算鏈。

剛剛意識到這是南方公園裡的“斯科特·泰諾曼”(或接近的),卡特曼……報復的那個……我不再因為一遍又一遍地說“斯科特·克雷納「而感到隱隱約約的煩惱!

相關內容