Google Sheets: повторите строку, основанную на COUNTA ячейки, ARRAYFORMULA - PullRequest
0 голосов
/ 28 октября 2018

У меня есть таблица, как показано ниже.Таблица обновляется время от времени, поэтому точное количество строк неизвестно:

+--+-------+-------------+
|a |red    |1, 1, 1,     |
+--+-------+-------------+
|b |green  |2, 2,        |
+--+-------+-------------+
|c |blue   |3,           |
+--+-------+-------------+

Мне нужно повторить каждую строку на основе COUNTA в столбце 3 следующим образом:

+--+-------+-------------+
|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,", "))}
,{"","",""})

}

и т. Д.

Пример листа .

Синус точное число строк не известно, я хотел быпреобразовать это в ARRAYFORMULA для строк 2-1000.

Возможно ли это вообще?Если да, какова будет формула?Спасибо!

1 Ответ

0 голосов
/ 28 октября 2018

Вставьте этот скрипт в редактор скриптов.

    /** 
 * 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, ",")

Надеюсь, это поможет?

...