Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Schnittmenge zweier Spalten

Schnittmenge zweier Spalten
23.06.2014 15:21:15
Gordon
Moin moin,
ich habe zwei Spalten (A1:A10000 und C1:C8000) mit Werten gefüllt. Nun möchte ich gerne die Werte herausfinden, die sich a) in beiden Spalten befinden und b) sich nur in Spalte C befinden. Bisher habe ich das mit zwei Schlleifen abgehandelt, was auch finktioniert, aber recht lange dauert.
Gibt es noch andere Möglichkeiten um so etwas zu bewerkstelligen? Ich hatte es schon mit Union und Intersect versucht, aber irgendwie nicht hinbekommen. Ich wäre sehr dankbar, wenn da jemand eine Antwort für mich hätte.
Danke euch schon mal im vor aus....
Gruß
Gordon

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schnittmenge zweier Spalten
23.06.2014 15:41:54
Daniel
Hi
Sortiere Spalte A aufsteigend und fügen in Spalte D folgene Formel ein, die du dann soweit runterkopierst wie in C Daten vorhanden sind:
=Wenn(SVerweis(C1;A:A;1;Wahr)=C1;"A und C";"nur C")
durch die Sortierung kann man für die Prüfung den SVerweis verwenden, welcher in sortierten Daten eine wesentlich schnellere Suchmethode anwendet als den Zeilenweisen Vergleich per Schleife.
per Autofilter kannst du dann auf die unterschiedlichen Daten zugreifen oder du sortierst C und D nach D.
und ja, auch per Makro macht man das genauso
(Sortieren , Formel einfügen und Autofilter kann man gut mit dem Recorder aufzeichnen)
Gruß Daniel

Anzeige
AW: Schnittmenge zweier Spalten
24.06.2014 09:51:22
Gordon
Hallo Daniel,
danke dir, aber ich hatte eine reine VBA-Löösung für das Probelm gesucht. Diese wurde mir ja nun von Rudi geliefert. Aber danke dir dennoch für deine Mühe! :-)
Gruß
Gordon

AW: Schnittmenge zweier Spalten
24.06.2014 13:02:49
Daniel
Hi
du kannst jeden Schritt, den du von Hand in Excel ausführst, auch per VBA ausführen.
von daher ist nach meiner Sichtweise jede Excellösung immer auch eine reine VBA-Lösung.
das von mir gezeigte Vorgehen dürfte als VBA nur unwesentlich langsamer sein als das Dictionary von Rudi, hätte diesem gegenüber aber zwei Vorteile:
1. du kannst sie auch schnell mal ohne Makro verwenden.
2. es werden nur Methoden eingesetzt, die jedem Excelanwender, der sich nicht mehr als Anfänger bezeichnet, bekannt sein sollten (Sortieren, SVerweis, Autofilter).
natürlich ist das Dictionary in der fortgeschrittenen Programmierung sehr hilfreich und wichtig, aber man sollte auch lernen, mit den Werkzeugen kreativ umzugehen, die man kennt.
Gruß Daniel

Anzeige
AW: Schnittmenge zweier Spalten
25.06.2014 09:56:47
Gordon
Hallo Daniel,
danke weiterhin für deinen Beitrag. Wie der Makrorecorder funktioniert ist mir bekannt. Auch die von dir genannten Funktionen/Formeln sind mir bekannt. Dennoch suchte ich eine Lösung, die a) die schnellste ist und vorallem b) die rein im Hintergrund abläuft und ohne jegliche Eintragungen (wie z.B. =sverweis()) auf den Sheets auskommt. Daher präferiere ich halt Rudis Lösung.
Dein Lösungsansatz ist sicher richtig, aber er komtm halt nicht dem ganz nahe was ich suchte.
Gruß
Gordon

Anzeige
AW: Schnittmenge zweier Spalten
23.06.2014 16:01:52
UweD
Hallo
als Formellösung mit 2 Hilfsspalten (L:M)
Formeln ab Zeile2 nach unten copieren bis keine Werte mehr kommen...
mit http://www.excelformeln.de/formeln.html?welcher=194
Tabelle1
 ABCDEFGHIJKLM
1Artikel A  Artikel C    in A und CNur in C          22
210  10  10X          1 
320  30  20            2 
430  250  30X          323
540  100  40            4 
650  50  50X          5 
760  200  60            6 
870  220  70            7 
980  300  80            824
1090      90            9 
11100      100X          10 
12110      110            11 
13120      120            12 
14130      130            13 
15140      140            14 
16150      150            15 
17160      160            16 
18170      170            17 
19180      180            18 
20190      190            19 
21200      200X          20 
22210      210            21 
23220      220X          22 
24        250  X           
25        300  X           
26                         
27                         

verwendete Formeln
Zelle Formel Bereich
M1 =MAX(L:L) 
E2 =WENN(ZEILE(A1)>MAX(M:M);"";WENN(ZEILE(A1)>MAX(L:L);INDEX(C:C;VERGLEICH(ZEILE(A1);M:M;0));INDEX(A:A;VERGLEICH(ZEILE(A1);L:L;0)))) 
F2 =WENN(ZÄHLENWENN(A:A;E2)+10*ZÄHLENWENN(C:C;E2)=11;"X";"") 
G2 =WENN(ZÄHLENWENN(A:A;E2)+10*ZÄHLENWENN(C:C;E2)=10;"X";"") 
L2 =WENN(ZÄHLENWENN(A$2:A2;A2)=1;MAX(L$1:L1)+1;"") 
M2 =WENN(UND(ZÄHLENWENN(C$2:C2;C2)=1;ZÄHLENWENN(A:A;C2)=0);MAX(M$1:M1)+1;"") 

Tabellendarstellung in Foren Version 5.49


Gruß UweD

Anzeige
AW: Schnittmenge zweier Spalten
24.06.2014 09:51:48
Gordon
Hallo Uwe,
danke dir, aber ich hatte eine reine VBA-Löösung für das Probelm gesucht. Diese wurde mir ja nun von Rudi geliefert. Aber danke dir dennoch für deine Mühe! :-)
Gruß
Gordon

AW: Schnittmenge zweier Spalten
23.06.2014 16:05:00
Rudi
Hallo,
ca. 0,1 Sek.:
Sub SpaltenVergleich()
Dim i As Integer
Dim arrA, arrC
Dim objA As Object, objC As Object, objAC As Object, objItem
Set objA = CreateObject("Scripting.Dictionary")
Set objC = CreateObject("Scripting.Dictionary")
Set objAC = CreateObject("Scripting.Dictionary")
objAC("Beide") = 0
objC("nur C") = 0
arrA = Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
arrC = Range(Cells(1, 3), Cells(Rows.Count, 3).End(xlUp))
For i = 1 To UBound(arrA)
objA(arrA(i, 1)) = arrA(i, 1)
Next
For i = 1 To UBound(arrC)
objC(arrC(i, 1)) = arrC(i, 1)
Next
For Each objItem In objA
If objC.exists(objA(objItem)) Then
objAC(objItem) = 0
End If
Next
For Each objItem In objC
If objA.exists(objC(objItem)) Then
objC.Remove (objA(objItem))
End If
Next
Range("E:F").Clear
If objAC.Count Then
Cells(1, 5).Resize(objAC.Count) = WorksheetFunction.Transpose(objAC.keys)
End If
If objC.Count Then
Cells(1, 6).Resize(objC.Count) = WorksheetFunction.Transpose(objC.keys)
End If
End Sub

Gruß
Rudi

Anzeige
Änderung
23.06.2014 16:31:42
Rudi
besser so:
  For Each objItem In objA
If objC.exists(objItem) Then
objAC(objItem) = 0
End If
Next
For Each objItem In objC
If objA.exists(objItem) Then
objC.Remove (objItem)
End If
Next

Gruß
Rudi

AW: Änderung
24.06.2014 09:34:16
Gordon
Hallo Rudi,
das ist genau das was ich gesucht habe. Funktioniert super! :-)
Dennoch hätte ich ein paar Fragen, damit ich den Code genau verstehe:
1.
Was ist ein "Scripting.Dictionary"?
2.
Warum müssen die Daten erst in ein Array um sie dann in das "Scripting.Dictionary"-Object zu schieben? Hätte man due Range nicht direkt in das "Scripting.Dictionary"-Object eintragen können bzw. warum geht das nicht?
3.
Mit den Begriffen *.Transpose() und *.Keys kann ich leider nichts anfangen, Kannst du mir da eine kurze Erläuterung geben?
Danke dir schon mal für deine Hilfe. Wenn die Fragen doch zu viel sein sollten, brauchst du sie nicht beantworten. Ich werde ansonsten mal versuchen, über Google etwas herauszufinden.
Gruß
Gordon

Anzeige
AW: Änderung
24.06.2014 10:40:42
Rudi
Hallo,
1. Ein Objekt, das Datenschlüssel-Element-Paare speichert.
2. Könnte man, ist aber langsamer.
3. Transpose dreht das Array, .Keys sind die Schlüssel des Dictionary.
Tipp: Schau mal in die Hilfe.
Gruß
Rudi
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Schnittmenge zweier Spalten in Excel


Schritt-für-Schritt-Anleitung

Um die Schnittmenge zweier Spalten in Excel zu berechnen, kannst du verschiedene Methoden verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Daten vorbereiten: Stelle sicher, dass deine Daten in den Spalten A und C stehen. In diesem Beispiel gehen wir davon aus, dass du in Spalte A (A1:A10000) und in Spalte C (C1:C8000) Werte hast.

  2. Hilfsspalten einfügen: Füge zwei Hilfsspalten D und E hinzu, um die Ergebnisse zu speichern.

  3. Formel einfügen: Füge in Zelle D1 die folgende Formel ein:

    =WENN(SVERWEIS(C1;A:A;1;WAHR)=C1;"A und C";"nur C")

    Kopiere die Formel nach unten, bis du alle Daten in Spalte C abgedeckt hast.

  4. Filter anwenden: Verwende den Autofilter, um die Ergebnisse zu filtern, sodass du die Schnittmenge leicht erkennen kannst.

  5. Schnittmenge berechnen: Alternativ kannst du auch die VBA-Lösung verwenden, die von Rudi im Forum bereitgestellt wurde, um die Berechnungen im Hintergrund durchzuführen.


Häufige Fehler und Lösungen

  • Formel nicht erkannt: Stelle sicher, dass die Formel korrekt eingegeben wurde. Überprüfe die Semikolons und die Zellbezüge.

  • Leere Zellen: Achte darauf, dass keine leeren Zellen in den Spalten vorhanden sind, da dies zu unerwarteten Ergebnissen führen kann.

  • Datenformat: Prüfe das Format der Zellen. Wenn Zahlen als Text gespeichert sind, kann die Formel nicht korrekt arbeiten.


Alternative Methoden

Es gibt verschiedene Möglichkeiten, die Schnittmenge in Excel zu berechnen:

  1. VBA-Makro: Wie von Rudi beschrieben, kannst du ein VBA-Makro verwenden, um die Schnittmenge schnell zu ermitteln. Hier ist ein einfaches Beispiel:

    Sub SpaltenVergleich()
       ' Dein VBA-Code hier
    End Sub
  2. Pivot-Tabellen: Du kannst auch Pivot-Tabellen verwenden, um die Daten zusammenzufassen und die Schnittmenge visuell darzustellen.

  3. Power Query: Mit Power Query kannst du Daten aus verschiedenen Quellen kombinieren und die Schnittmenge berechnen.


Praktische Beispiele

Nehmen wir an, du hast folgende Daten:

  • Spalte A: 10, 20, 30, 40, 50
  • Spalte C: 30, 40, 50, 60, 70

Die Verwendung der Formel in D1 würde dir "A und C" für die Werte 30, 40 und 50 und "nur C" für 60 und 70 zeigen.

Wenn du die VBA-Methode verwendest, würde das Skript die Werte in der entsprechenden Hilfsspalte automatisch ausfüllen.


Tipps für Profis

  • Optimierung: Wenn du mit großen Datenmengen arbeitest, ist es empfehlenswert, deine Daten zu sortieren, bevor du die SVERWEIS-Funktion anwendest. Dies verbessert die Performance.

  • Dynamische Bereiche: Nutze dynamische Bereiche oder Tabellen, um deine Formeln automatisch anzupassen, wenn neue Daten hinzugefügt werden.

  • Verwendung von Arrays: Arbeite mit Arrays in VBA, um die Effizienz deines Codes zu erhöhen. Dies kann die Laufzeit erheblich reduzieren.


FAQ: Häufige Fragen

1. Wie berechne ich die Schnittmenge aus zwei Listen in Excel? Du kannst die SVERWEIS-Funktion oder VBA verwenden, um die Schnittmenge zu bestimmen.

2. Was ist der Unterschied zwischen SVERWEIS und WVERWEIS? SVERWEIS sucht in einer Spalte nach einem Wert, während WVERWEIS in einer Zeile sucht.

3. Wie kann ich die Schnittmenge zweier Tabellen in Excel berechnen? Du kannst die gleichen Methoden wie oben beschrieben verwenden, um die Schnittmenge zwischen zwei Tabellen zu ermitteln.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige