Wie führe ich eine einfache Set-Operation in der Google Docs-Tabelle durch?

10

Angenommen, ich habe einige Namen in Zellen B1:B3und eine vollständige Liste aller Namen in A1:A4. Kann ich eine Liste mit Namen erstellen A1:A4, die nicht in enthalten sind B1:B3?

ZB haben Zellen A1:A4"A", "B", "C", "D", wenn B1:B3sie "A", "C", "D" enthalten, dann möchte ich "B" erhalten.

Ich habe die Funktionsliste durchgesehen , konnte aber nicht herausfinden, wie es geht.

Update : Mit Lance Hilfe der Formel I herauskam , war:

FILTER(A1:A4, A1:A4<>B1, A1:A4<>B2, A1:A4<>B3)

Dies ergibt das richtige Ergebnis, ich habe jedoch immer noch ein Problem. Das Problem ist, dass sich meine Zellen B1:Bxausdehnen können. Ich leite ein Sportteam und verwende ein Google Text & Tabellen-Formular, damit die Leute es einreichen können. Sie wählen ihren Namen aus einer Auswahlliste aus und wählen ein Optionsfeld "Ja" (ich kann spielen) oder "Nein" (ich bin raus). Was ich hier erreichen möchte, ist, in meiner Tabelle diejenigen Personen anzuzeigen, die nicht geantwortet haben. Ziel ist es, diese Liste nach jeder neuen Einreichung automatisch zu aktualisieren. Wenn neue Zeilen in die Tabelle eingefügt werden, wird die Formel leider durcheinander gebracht. Ich bin mir nicht sicher, ob es dafür eine Lösung gibt.

Update 2 : Ich habe eine Lösung gefunden. Ich habe die Zellen zuerst B1:Bxin eine andere Region kopiert C1:Cxund dann die obige Formel verwendet, aber dagegen C1:Cx. Jetzt sogar B1:Bxerweitert, ist die Formel noch gültig.

Grokus
quelle
Die Lösung für das expandierende Problem besteht darin, einen benannten Bereich zu verwenden. Es wird wahrscheinlich einige Arbeit erfordern, um den Filter genau richtig zu machen.
Lance Roberts
@Lance, ich habe eine Problemumgehung gefunden und meinen Beitrag erneut aktualisiert. Vielen Dank.
Grokus
1
Tolle Frage, ich habe sie gefunden, als ich selbst nach dieser Antwort gesucht habe. Ihre Problemumgehung ist ziemlich gut, aber ich glaube, ich habe endlich genau das bekommen, wonach Sie gesucht haben. Schauen Sie sich meine Antwort unten an.
Anthony DiSanti

Antworten:

4

WOW, ich wollte Ihnen eine genaue Lösung geben, Google Text & Tabellen ist so frustrierend. Script-Loop-Stadt.

Sie können dies mit der Arbeitsblattfunktion FILTER tun, wobei Ihre arrayCondition_1 eine Funktionsformel ist, die für jede Zeile, die nicht betrogen wird, einen wahren Wert angibt. Ich konnte sehen, dass die MATCH-Funktion nicht verwendet werden konnte.

Lance Roberts
quelle
1
Ich fand, dass die Verwendung von Chrome im Umgang mit Google Text & Tabellen viel besser ist.
Grokus
Der heutige Tag ist verrückt nach mir, aber wenn ich mich erinnern kann, mache ich nächste Woche eine Pause (wenn die Antwort bis dahin nicht gefunden wurde).
Lance Roberts
Es ist in Ordnung, ich konnte FILTER verwenden, um die gewünschten Ergebnisse zu erzielen. Vielen Dank.
Grokus
@grokus, großartig, du solltest die Formel posten, die du als Referenz für zukünftige Leser verwendet hast.
Lance Roberts
Ich habe meinen ursprünglichen Beitrag aktualisiert.
Grokus
4
=FILTER(A:A, NOT(COUNTIF(B:B, A:A)))

COUNTIFZählt, wie oft jeder Spieler in der Spalte in der Spalte Aangezeigt wird, Bund gibt ein Array der Zählungen zurück.

NOT wandelt die Zahlen in boolesche Werte (wahr oder falsch) um und nimmt dann die Umkehrung.

FILTEREntfernt die Spieler, die in der BSpaltenantwortliste angezeigt wurden.

Der Trick dabei ist, dass NOTdie Zählungen in Boolesche Werte umgewandelt werden. Wenn ein Spieler nicht geantwortet hat, wird er 0 Mal in der Liste der Antworten angezeigt. Wenn sie geantwortet haben, werden sie mindestens einmal angezeigt (möglicherweise versucht ein Spieler, seine Antwort zu ändern, indem er die Umfrage ein zweites Mal einreicht). 0 wirft auf Falseund alle anderen Zahlen auf True. Also Spieler, die auf die Karte geantwortet haben Trueund auf die noch nicht geantwortet haben False. NOTnimmt dann die Umkehrung und gibt Ihnen eine Maske der Spieler, die noch nicht geantwortet haben.

Diese Lösung unterstützt eine wachsende Liste von Einsendungen, die leere Zeilen oder doppelte Einsendungen enthalten können. Um auf den in der Frage beschriebenen spezifischen Bereich zu beschränken, verwenden Sie:=FILTER(A1:A4, NOT(COUNTIF(B:B,A1:A4)))

Anthony DiSanti
quelle
Genie 20charlimit
Fadeway
0

Hier ist eine Tabelle, die zeigt, wie dies einfach gemacht werden kann:

Festlegen von Vorgängen in Google Sheets

Union ist ={setA; setB}

Der Unterschied ist =filter(setA, iferror(MATCH(setA, setB, false)))

Schnittpunkt ist =filter(setA; MATCH(setA, setB, false))

Erläuterung setAund setBkann als Bereiche bezeichnet werden, oder Sie können die normale Bereichsnotation verwenden. Benannte Bereiche machen dies nur klarer.

Union ist nur eine neue Produktreihe, bei der beide Produktreihen nebeneinander stehen.

Der Schnittpunkt (am einfachsten) hängt davon ab , ob nach Indizes gesucht wird, setAan setBdenen sie beendet werden, und setA danach gefiltert wird.

Der Unterschied ist ähnlich, aber Filter setA, um nur Mitglieder auszuwählen, bei denen der Index setBnicht gefunden wird.

Zusätzliches Guthaben

Die Vereinigung mit doppelter Eliminierung ist nur setA + (setB-setA) , also wie oben

={setA;filter(setB, iserror(MATCH(setB,setA,false)))}
Marc Meyer
quelle