2016-02-28 58 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) 
}