Google 工作表:根据单元格的 COUNTA、ARRAYFORMULA 重复一行
Google Sheets: Repeat a row based on COUNTA of a cell, ARRAYFORMULA
我有一个 table 如下。 table 会不时更新,所以不知道确切的行数:
+--+-------+-------------+
|a |red |1, 1, 1, |
+--+-------+-------------+
|b |green |2, 2, |
+--+-------+-------------+
|c |blue |3, |
+--+-------+-------------+
我需要根据第 3 列中的 COUNTA 重复每一行,如下所示:
+--+-------+-------------+
|a |red |1 |
+--+-------+-------------+
|a |red |1 |
+--+-------+-------------+
|a |red |1 |
+--+-------+-------------+
|b |green |2 |
+--+-------+-------------+
|b |green |2 |
+--+-------+-------------+
|c |blue |3 |
+--+-------+-------------+
我写了一个公式,但为了确保它处理足够多的行,我必须手动向该公式添加另一行(考虑列是 E、F 和 G):
={
if(len(E2)>0,{
transpose(split(rept(E2&"****",COUNTA(split(G2,", "))),"****")),transpose(split(rept(F2&"****",COUNTA(split(G2,", "))),"****")),TRANSPOSE(split(G2,", "))}
,{"","",""});
if(len(E3)>0,{
transpose(split(rept(E3&"****",COUNTA(split(G3,", "))),"****")),transpose(split(rept(F3&"****",COUNTA(split(G3,", "))),"****")),TRANSPOSE(split(G3,", "))}
,{"","",""});
if(len(E4)>0,{
transpose(split(rept(E4&"****",COUNTA(split(G4,", "))),"****")),transpose(split(rept(F4&"****",COUNTA(split(G4,", "))),"****")),TRANSPOSE(split(G4,", "))}
,{"","",""});
if(len(E5)>0,{
transpose(split(rept(E5&"****",COUNTA(split(G5,", "))),"****")),transpose(split(rept(F5&"****",COUNTA(split(G5,", "))),"****")),TRANSPOSE(split(G5,", "))}
,{"","",""})
}
等等
正因为确切的行数未知,所以我想将其转换为第 2-1000 行的 ARRAYFORMULA。
这可能吗?如果是,公式是什么?谢谢!
将此脚本粘贴到脚本编辑器中。
/**
* Splits the array by commas in the column with given index, by given delimiter
* @param {A2:B20} range Range reference
* @param {2} colToSplit Column index
* @param {","} delimiter Character by which to split
* @customfunction
*/
function advancedSplit(range, colToSplit, delimiter) {
var resArr = [], row;
range.forEach(function (r) {
r[colToSplit-1].replace(/(?:\r\n|\r|\n)(\d|\w)/g,", ").split(delimiter)
.forEach(function (s) {
row = [];
r.forEach(function (c, k) {
row.push( (k === colToSplit-1) ? s.trim() : c);
})
resArr.push(row);
})
})
return resArr.filter(function (r) {
return r.toString()
.replace(/,/g, "")
})
}
然后在电子表格中使用此脚本作为自定义公式
=advancedSplit(E2:G, 3, ",")
希望对您有所帮助?
我有一个 table 如下。 table 会不时更新,所以不知道确切的行数:
+--+-------+-------------+
|a |red |1, 1, 1, |
+--+-------+-------------+
|b |green |2, 2, |
+--+-------+-------------+
|c |blue |3, |
+--+-------+-------------+
我需要根据第 3 列中的 COUNTA 重复每一行,如下所示:
+--+-------+-------------+
|a |red |1 |
+--+-------+-------------+
|a |red |1 |
+--+-------+-------------+
|a |red |1 |
+--+-------+-------------+
|b |green |2 |
+--+-------+-------------+
|b |green |2 |
+--+-------+-------------+
|c |blue |3 |
+--+-------+-------------+
我写了一个公式,但为了确保它处理足够多的行,我必须手动向该公式添加另一行(考虑列是 E、F 和 G):
={
if(len(E2)>0,{
transpose(split(rept(E2&"****",COUNTA(split(G2,", "))),"****")),transpose(split(rept(F2&"****",COUNTA(split(G2,", "))),"****")),TRANSPOSE(split(G2,", "))}
,{"","",""});
if(len(E3)>0,{
transpose(split(rept(E3&"****",COUNTA(split(G3,", "))),"****")),transpose(split(rept(F3&"****",COUNTA(split(G3,", "))),"****")),TRANSPOSE(split(G3,", "))}
,{"","",""});
if(len(E4)>0,{
transpose(split(rept(E4&"****",COUNTA(split(G4,", "))),"****")),transpose(split(rept(F4&"****",COUNTA(split(G4,", "))),"****")),TRANSPOSE(split(G4,", "))}
,{"","",""});
if(len(E5)>0,{
transpose(split(rept(E5&"****",COUNTA(split(G5,", "))),"****")),transpose(split(rept(F5&"****",COUNTA(split(G5,", "))),"****")),TRANSPOSE(split(G5,", "))}
,{"","",""})
}
等等
正因为确切的行数未知,所以我想将其转换为第 2-1000 行的 ARRAYFORMULA。
这可能吗?如果是,公式是什么?谢谢!
将此脚本粘贴到脚本编辑器中。
/**
* Splits the array by commas in the column with given index, by given delimiter
* @param {A2:B20} range Range reference
* @param {2} colToSplit Column index
* @param {","} delimiter Character by which to split
* @customfunction
*/
function advancedSplit(range, colToSplit, delimiter) {
var resArr = [], row;
range.forEach(function (r) {
r[colToSplit-1].replace(/(?:\r\n|\r|\n)(\d|\w)/g,", ").split(delimiter)
.forEach(function (s) {
row = [];
r.forEach(function (c, k) {
row.push( (k === colToSplit-1) ? s.trim() : c);
})
resArr.push(row);
})
})
return resArr.filter(function (r) {
return r.toString()
.replace(/,/g, "")
})
}
然后在电子表格中使用此脚本作为自定义公式
=advancedSplit(E2:G, 3, ",")
希望对您有所帮助?