2017-02-08 7 views
2

Similarquestions zu diesem wurden gefragt, aber nicht genau so. Es gibt one das ist sehr nah, aber diese Lösung funktioniert nicht für mich.Excel SUMME Multiple-Kriterien Cell-Wert

Ich habe eine Funktion, die kommagetrennte Werte in eine Zelle zurückgibt. Ich würde gerne die Elemente in dieser Zelle als Kriterium an eine SUMIFS Funktion übergeben, die einen solchen Ansatz verwendet one.

Mein Versuch ist unten dargestellt:

enter image description here

Ich glaube, dass dies irgendwie mit der Art und Weise verbunden ist, dass die Funktion zu verstehen, was in der Zelle G8 ist. Es sieht so aus, als würde es ein paar zusätzliche Zitate hinzufügen. Wenn ich G8 in der Bearbeitungsleiste und drücken Sie F9 markieren, die ich erhalten:

enter image description here

Es gibt zusätzliche Anführungszeichen auf jeder Seite der einzelnen Kriterien.

Ich bin offen für eine benutzerdefinierte VBA-Funktionslösung, aber ich würde etwas bevorzugen, das als eine Arbeitsblattfunktion erstellt werden kann. Die Kriterien werden von einer benutzerdefinierten VBA-Funktion zurückgegeben, die Elemente aus einem Listenfeld entfernt und einige Regex-Operationen ausführt, um zusätzliche Kommas zu entfernen. Die Anzahl der Elemente, die ausgewählt werden können, ist variabel. Daher möchte ich vermeiden, die Kriterien in mehr als eine Zelle aufteilen zu müssen. Vielen Dank.

+1

Die Zeichenfolge '{" Dog "," Cat "}' ist ein _string_, kein Array. Das Übergeben einer Zeichenfolge, auch wenn sie einem Array ähnelt, ist immer noch eine Zeichenfolge und kein Array. Sie funktioniert also nicht. Sie sagen, Sie haben eine VBA-Funktion, die eine durch Kommas getrennte Liste in eine Zelle zurückgibt. Versuchen Sie, das zu ändern, um ein Array zurückzugeben, und rufen Sie es in Ihrer 'SUMIFS' Formel auf (Umgehen der Rückgabe der Liste an eine Zelle) –

+0

Danke @chrisneilsen. Die Funktion, die ich verwende, ist ähnlich wie die in Beispiel 2 der Antwort [hier] (http://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft) -excel-beide-in-cell-and-loops). Ich habe versucht, dem Beispiel [hier] (http://stackoverflow.com/questions/1815980/excel-vba-function-returning-an-array) zu folgen, um eine Sammlung zurückzugeben, aber ich bekomme einen Fehler für "Argument nicht optional" auf meiner Ausgabe. Irgendwelche Gedanken darüber, wie ich sicherstellen kann, dass meine Funktion das Array wie gewünscht zurückgibt? –

+0

Wenn Sie den Code und eine Beschreibung von dem, was Sie möchten, die Funktion zu de kann ich helfen –

Antwort

1

Scheint, dass das rohe Komma-getrennte Kriterium in G6 ist, alles, was Sie brauchen, ist dieses Kriterium in ein Array zu teilen und es zu SUMIFS zu füttern. Aufteilen ist in VBA verfügbar, aber nicht in Excel verfügbar. Alles, was wir brauchen, ist ein wenig UDF zu schreiben, die die Spaltung der CSV tut und es in unserer Formel:

Function splitCSV(str As String) 
    splitCSV = Split(str, ",") 
End Function 

die Formel nun in F10 wäre:

=SUM(SUMIFS(C3:C10, B3:B10, "blue", A3:A10, splitCSV(G6))) 

EDIT

Das obige ist eine Array-Formel (Strg + Umschalt + Enter). Um eine normale Formel zu haben, können wir SUMPRODUCT anstelle von SUM verwenden. Dies führt zu mehr Flexibilität (normale Formel gegenüber Array-Formel) sowie zu einer gewissen "erwarteten" Leistungsverbesserung.

=SUMPRODUCT(SUMIFS(C3:C10, B3:B10, "blue", A3:A10, splitCSV(G6))) 
+1

Ich dachte nur nach meinem Kommentar zu @chris Neilson, "Hey, warum schreibe ich nicht einfach eine VBA-Funktion, um eine Zelle zu teilen String in ein Array !? " Du liest meine Gedanken. Vielen Dank! Das funktioniert prächtig. –

+0

@NickCriswell Das ist großartig.Gut zu wissen, dass es geholfen hat :) –

+1

Übrigens, diese Antwort hat mir die Moderator-Tools, danke !! –