[英]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), "|")}), "|")), ",$", ""), "^:$", ""))
一些警告:
我使用了公式-您可以通過單擊此處查看電子表格
“結果”表具有所需的公式和輸出。
希望,這可行:
=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.