2016-06-17 9 views
0

Ich versuche, eine bedingte Multi-Verkettung einzurichten und bin fast da.Bedingte Verkettung eines Zellenbereichs

Das Prinzip ist (wie ein SUMMIF) Sie laufen eine Zeile/Spalte und wenn der Wert der Bedingung entspricht, nehmen Sie den entsprechenden Wert aus dem Summenbereich und addieren sie zusammen. Obwohl dieses Mal wir sie verketten (sie buchstäblich addieren!) Dieses Bild zeigt das erwartete Ergebnis und mein tatsächliches Ergebnis, das besser erklären sollte, als ich kann. Spreadsheet Das Problem ist, ich habe, dass, egal was ich Eingang als letzte Parameter gibt es noch ein Komma ohne Leerzeichen ...

Hier ist der Code („#“ gibt noch ein Komma usw. Eingabe): hier

/** 
 
* 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; 
 
}

Was bin ich? Danke.

Antwort

1

Ich denke, eine Formel, dies für Sie tun können:

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

+0

Danke, das funktioniert und ist viel einfacher als meine Methode. Ich wäre auch interessiert zu wissen, wo mein Fehler im Code ist, wenn Sie können, damit ich meine GSCripting verbessern kann. – Zaberi