2016-06-17 9 views
0

Я пытаюсь настроить условный мультиконкатенат и почти там.Условная конкатенация диапазона ячеек

Принцип (как SUMIF) выполняется вдоль одной строки/столбца, и если значение соответствует условию, вы принимаете соответствующее значение из диапазона сумм и добавляете их вместе. Хотя на этот раз мы их конкатенируем (буквально добавляя их вместе!) На этом рисунке показан ожидаемый результат и мой фактический результат, который должен объяснить лучше, чем я могу. Spreadsheet Проблема у меня в том, что независимо от того, что я вход в качестве последнего параметра он еще не дает запятую без пробела (ввод «#» по-прежнему дает запятая и т.д.) ...

Вот код:

/** 
 
* Concatenates a range of cells where the condition is met. 
 
* 
 
* @param {A4:A6} cRange The dynamic cell range to test. 
 
* @param {"Condition"} cCondition The string that the cell should match. 
 
* @param {A4:A6} pRange The dynamic cell range to concatenate. 
 
* @param {", "} interspace A string to insert between each entry. 
 
* @return The a concatenated range of cells 
 
* @customfunction 
 
*/ 
 
function conditionalMultiConcat(cRange, cCondition, pRange, interspace){ 
 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); //get the active workbook 
 
    var sheet = ss.getSheets()[0]; //get the active sheet 
 
    //var values = sheet.getRange(pRange).getValues(); //debug line - uncomment to see the values 
 
    var values = "" //set the return value to blank 
 
    for(var cc = 0; cc < pRange.length; ++cc) { //For each value in the array 
 
    if ((cc == 0 || cc == pRange.length - 1) && (cRange[cc] = cCondition)) { //if it's the first or last value AND it matches our condition 
 
     values = values + pRange[cc].toString();// concatenate without interspace 
 
    } 
 
    else if (cRange[cc] = cCondition){ //else if it matches our condition then concatenate with the interspace 
 
     values = values + interspace + pRange[cc].toString();// concatenate 
 
    } 
 
    } 
 
    return values; 
 
}

Что я здесь отсутствует? Спасибо.

ответ

1

Я думаю, что формула может сделать это для вас:

=JOIN(",",FILTER(B1:D1,B2:D2="Y"))

+0

Спасибо, это работает, и гораздо проще, чем мой метод. Мне также было бы интересно узнать, где моя ошибка в коде, если вы можете, поэтому я могу улучшить свой gscripting. – Zaberi

Смежные вопросы