2016-02-28 51 views
0

我有一列標記爲a,b,c等的單元格。單元格中的標記是唯一的,用「,」(逗號和空格)分隔,但沒有排序。我想要一個數組公式來返回每個單元格中具有排序標籤的列。 例如 在A1:A5Google表格使用數組公式分隔單元格中的逗號分隔文本

c, a 

b, a, d 

a, c 

c 

c, b, a 

我想在B1的陣列式返回在B1的結果:B5

a, c 

a, b, d 

a, c 

c 

a, b, c 

在細胞分選我可以告訴標記後 「C,A」與標籤「a,c」相同。 我的公式只返回只有一個格

=ARRAYFORMULA(JOIN(", ",SORT(TRANSPOSE(SPLIT(A1:A5,", ",FALSE))))) 

回答

1

ARRAYFORMULA:

=ArrayFormula(TRIM(TRANSPOSE(SPLIT(CONCATENATE(REPT(TRANSPOSE(QUERY(SORT({TRANSPOSE(SPLIT(JOIN(", ",ArrayFormula(REGEXREPLACE(A1:A5,"\w+",TEXT(row(A1:A5),"0")))),", ")),TRANSPOSE(SPLIT(JOIN(", ",A1:A5),", "))},1,1,2,1),"select Col2",0)&", "),ROW(A1:A5)=SPLIT(JOIN(", ",ArrayFormula(REGEXREPLACE(A1:A5,"\w+",TEXT(row(A1:A5),"0")))),", "))&REPT(" "&CHAR(9),TRANSPOSE(row(OFFSET(A1,,,COUNTA(SPLIT(JOIN(", ",A1:A5),", "))))-row($A$1)+1)=COUNTA(SPLIT(JOIN(", ",A1:A5),", ")))),", "&CHAR(9),0)))) 

我以前this tip來解決的任務。


更新

有了一些修改,這個公式也可以處理逗號分隔短語:

=ArrayFormula(TRIM(TRANSPOSE(SPLIT(CONCATENATE(REPT(TRANSPOSE(QUERY(SORT({TRANSPOSE(SPLIT(JOIN(",",ArrayFormula(REGEXREPLACE(A1:A5,"[^,]+",TEXT(row(A1:A5),"0")))),",",0)),TRANSPOSE(SPLIT(JOIN(", ",A1:A5),", ",0))},1,1,2,1),"select Col2",0)&", "),ROW(A1:A5)=SPLIT(JOIN(",",ArrayFormula(REGEXREPLACE(A1:A5,"[^,]+",TEXT(row(A1:A5),"0")))),",",0))&REPT(" "&CHAR(9),TRANSPOSE(row(OFFSET(A1,,,COUNTA(SPLIT(JOIN(", ",A1:A5),", ",0))))-row($A$1)+1)=COUNTA(SPLIT(JOIN(", ",A1:A5),", ",0)))),", "&CHAR(9),0)))) 

file sample。關鍵是REGEXREPLACE部分公式:"[^,]+"

+0

謝謝Max。它適用於上面的簡單情況。但對於逗號分隔的短語,它可能無法正常工作。但你的回答真的揭示了這一點。 – visualPaul

0

ARRAYFORMULA和拆分將無法正常工作在多行。我能想到的最好的方法是用腳本填寫公式。你可以在Open或OnEdit上完成。

function fillformuladown() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); 
    var lastRow = ss.getDataRange().getNumRows(); 
    var rngVal = ss.getRange("k1").getFormula() 
    ss.getRange("b1:b"+lastRow).setFormula(rngVal) 
}