簡體   English   中英

Google表格通過ARRAYFORMULA將可變寬度/高度表轉換為列表

[英]Google Sheets transform variable width/height sheet into list with ARRAYFORMULA

我一輩子都想不通如何創建一個通用公式來轉換以下內容:

Name  | cool | smart | funny | ... |
Bill  |      | x     | x     |     |
Sally | x    | x     |       |     |
Bob   | x    |       | x     |     |
Cindy |      |       |       |     |
Steve | x    |       | x     |     |
Carol |      |       | x     |     |
Bob   |      | x     |       |     |
...   |      |       |       |     |

變成這樣的東西:

Bill:smart,funny
Sally:cool,smart
Bob:cool,funny
Cindy:
Steve:cool,funny
Carol:funny
Bob:smart

我希望它能夠處理任意數量的列和行。 有什么方法可以實現而無需“拖動”? 即與ARRAYFORMULA一起ARRAYFORMULA

這里是示例Google表格的鏈接

好吧,這是一個駭人聽聞的做法,但它確實有效。 它適用於任意行和任意列,而無需拖動任何公式。

=ARRAYFORMULA(REGEXREPLACE(REGEXREPLACE(TRANSPOSE(SPLIT(CONCATENATE({Data!A2:A&":", REGEXREPLACE(Data!B2:O, "x", REGEXREPLACE(Data!B1:O1, "$", ",")), IF(LEN(Data!A2:A)=LEN(Data!A2:A), "|")}), "|")), ",$", ""), "^:$", ""))

一些警告:

  • 數據表開頭下方或右邊不得有任何不相關的數據(即,除了多余的標題行或列之外,數據本身必須位於工作表中)。
  • 名稱和標簽不得包含“ |”,因為它在內部用作拆分字符(可以更改為另一個字符)
  • 數據不能超出給定列。 在上面的公式中,它在列“ O”處最大化,但是可以是任意列(例如,列“ ZZ”)

我使用了公式-您可以通過單擊此處查看電子表格

“結果”表具有所需的公式和輸出。

希望,這可行:

=ArrayFormula(TRANSPOSE(SPLIT(ArrayFormula(CONCATENATE(A2:A8&": /")),"/"))&SUBSTITUTE(trim(transpose(query(transpose(IFERROR(ArrayFormula(HLOOKUP(REGEXREPLACE(B2:D8,"x","1")*1*COLUMN(B2:D8)*row(B2:D8)^0,{COLUMN(B2:D8);B1:D1},2,0)),"")),,counta(B1:D1))))," ",", "))

我的樣本在運行 =)


更新

我想出了縮短公式的方法:

=ARRAYFORMULA(TRANSPOSE(SPLIT(ArrayFormula(CONCATENATE(A2:A8&": /")),"/"))&SUBSTITUTE(trim(transpose(query(transpose(REPT(B1:D1,B2:D8="x")),,counta(B1:D1))))," ",", "))

上面的公式是相同的。 它使用這里提出的技巧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM