我不能为我的生活找出如何创建一个通用的公式来转换以下内容:
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
s。
以下是Google表格的link。
答案 0 :(得分:3)
嗯,这是一个黑客的熊,但它的确有效。它适用于任意行和任意列,无需任何公式拖动。
=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), "|")}), "|")), ",$", ""), "^:$", ""))
一些警告:
我把公式付诸实践 - 你可以view the spreadsheet by clicking here
"结果" sheet具有您想要的公式和输出。
答案 1 :(得分:0)
希望,这有效:
=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))))," ",", "))
我的sample in action =)
<强>更新强>
我想出了如何缩短公式:
=ARRAYFORMULA(TRANSPOSE(SPLIT(ArrayFormula(CONCATENATE(A2:A8&": /")),"/"))&SUBSTITUTE(trim(transpose(query(transpose(REPT(B1:D1,B2:D8="x")),,counta(B1:D1))))," ",", "))
上面的公式工作是一样的。它使用了技巧proposed here。