labi
Goto Top

4 spalten in excel vergleichen

4 spalten in excel vergleichen

hallo zusammen

ich habe 4 spalten mit je ca. 200-300 nummern drin...

wie schaffe ich das am besten, jede nummer, welche in allen 4 spalten vorkommt in eine 5. spalte zu schreiben??

kann mir da bitte bitte jemand weiterhelfen??

danke
labi

Content-ID: 45011

Url: https://administrator.de/contentid/45011

Ausgedruckt am: 26.11.2024 um 07:11 Uhr

bastla
bastla 21.11.2006 um 18:47:10 Uhr
Goto Top
Hallo Labi!

Ausgehend von Deiner Beschreibung habe ich die Anzahl der Nummern je Spalte variabel gelassen - Voraussetzung ist nur, dass die Spalten zusammenhängend befüllt sind (keine leeren Zellen zwischendurch) und alle 4 Spalten direkt nebeneinander stehen. Die Ergebnisse stehen dann unmittelbar neben der 4. Nummernspalte. Unter der Annahme, dass die erste Zahlenspalte in B ist und alle (auch die Ergebnisspalte) den ersten Eintrag in Zeile 3 bekommen sollen, müsste folgendes Script funktionieren:
Option Explicit

Sub Sammle()
Const VonZeile = 3
Const VonSpalte As Integer = 2 'Spalte B  
Const SpaltenAnzahl As Integer = 4

Dim VonVergleich As Integer, BisVergleich As Integer
VonVergleich = VonSpalte + 1
BisVergleich = VonSpalte + SpaltenAnzahl - 1
Dim ZielSpalte As Integer
ZielSpalte = VonSpalte + SpaltenAnzahl

Dim i As Integer, j As Integer, k As Integer, z As Integer
Dim Nummer As Variant, ok As Boolean

i = VonZeile
z = VonZeile
Do While Cells(i, VonSpalte).Value <> ""  
    Nummer = Cells(i, VonSpalte).Value
    ok = True
    For j = VonVergleich To BisVergleich
        k = VonZeile
        Do While Cells(k, j).Value <> "" And Cells(k, j).Value <> Nummer  
            k = k + 1
        Loop
        If Cells(k, j).Value <> Nummer Then
            ok = False
            Exit For
        End If
    Next
    If ok Then
        Cells(z, ZielSpalte).Value = Nummer
        z = z + 1
    End If
    i = i + 1
Loop
MsgBox "Fertig."  
End Sub
Vorgangsweise:
Tabelle mit den Nummern öffnen, "Visual Basic-Editor" (Alt-F11) aufrufen, Doppelklick auf "Diese Arbeitsmappe" links oben, im jetzt geöffneten Fenster das Script einfügen, bei Bedarf die "Const"-Zeilen anpassen, den Cursor auf eine der "Const"-Zeilen stellen und mit dem "Play"-Button der Symbolleiste starten.

HTH
bastla

[Edit] 2 konstante Werte durch Variable "VonSpalte" ersetzt. [/Edit]
Labi
Labi 21.11.2006 um 21:34:26 Uhr
Goto Top
WOW

das ist super face-smile)

danke!

wie mach ich das jetzt, wenn ich 4 spalten habe und alle nummern haben will, die in 2 spalten vorkommen??
kann man das leicht einbauen??
bastla
bastla 21.11.2006 um 21:46:47 Uhr
Goto Top
Hallo Labi!

Für aneinander grenzende Spalten ja - einfach die "Const"-Einträge anpassen, zB
Const VonSpalte As Integer = 4 'Spalte D  
Const SpaltenAnzahl As Integer = 2
Dann aber auch dafür sorgen, dass die Ausgabe der übereinstimmenden Nummern keine Daten überschreibt (da sie immer an die letzte Vergleichsspalte anschließt): Ersetze
ZielSpalte = VonSpalte + SpaltenAnzahl
zB durch
ZielSpalte = 10 'Spalte J  
Für den Vergleich der Spalten 1 und 3, 1 und 4 oder 2 und 4 müsste man das Script etwas umbauen.

Grüße
bastla
Biber
Biber 21.11.2006 um 22:14:03 Uhr
Goto Top
Nur als Fussnote (ich wäre das Problem auch über ein Skript angegangen):

Zum Vergleich auf gleiche Werte in 2 Spalten gibt es hier eine schöne Excel-Formel www.excelformeln.de Formel 83

Ist eine meiner neuen Lieblingsseiten, seit Psycho Dad neulich auf die verwiesen hat.

Gruß
Biber
bastla
bastla 21.11.2006 um 22:35:50 Uhr
Goto Top
Schon bookgemarked face-wink

Heute mag ich mich nicht mehr reindenken, aber für 4 Spalten könnte das per Formel ganz amüsant sein ...

Grüße
bastla
bastla
bastla 21.11.2006 um 23:27:05 Uhr
Goto Top
Hallo Labi!

Um auch nicht angrenzende Spalten zusammenfassen zu können, habe ich folgende Erweiterung vorgenommen:
Wenn in einer (anzugebenden - siehe neue erste "Const"-Anweisung) Markierungszeile für eine Spalte eine Markierung gesetzt wird (konkret, wenn die Zelle nicht leer ist), wird diese Spalte in den Vergleich mit einbezogen. Das folgende Beispiel würde also die Inhalte der Spalten C und E vergleichen:
ABCDE
1
2 x x
3 15793
4 179157
5 ............
Außerdem werden in der neuen Version die gesamten Inhalte der Ergebnisspalte gelöscht (falls aus irgendeinem Grund nicht gewünscht, vor die Zeile "Cells(1, ZielSpalte).EntireColumn.ClearContents" ein Apostroph setzen oder die Zeile löschen).
Die Festlegung der Ergebnisspalte (ZielSpalte) kann, abweichend von der berechneten Position unmittelbar rechts neben der letzten Nummernspalte, auch fix eingetragen werden (siehe Kommentar und Beispielzeile im Script).
Option Explicit

Sub Sammle()
Const MarkierungsZeile As Integer = 2
Const VonZeile As Integer = 3
Const VonSpalte As Integer = 2 'Spalte B  
Const SpaltenAnzahl As Integer = 4

Dim ZielSpalte As Integer
ZielSpalte = VonSpalte + SpaltenAnzahl
'oder fixe Angabe einer Spaltennummer  
'ZielSpalte = 10 'Spalte J  

Dim ErsteSpalte As Integer
Dim VonVergleich As Integer, BisVergleich As Integer
Dim i As Integer, j As Integer, k As Integer, z As Integer
Dim Nummer As Variant, ok As Boolean

ErsteSpalte = 0
For i = VonSpalte To VonSpalte + SpaltenAnzahl - 1
    If Cells(MarkierungsZeile, i).Value <> "" Then  
        ErsteSpalte = i
        Exit For
    End If
Next
If ErsteSpalte = 0 Then
    MsgBox "Keine Spalte markiert."  
    End
End If

'Zielspalte löschen (Achtung, ganze Spalte wird gelöscht)  
Cells(1, ZielSpalte).EntireColumn.ClearContents

VonVergleich = ErsteSpalte + 1
BisVergleich = VonSpalte + SpaltenAnzahl - 1
i = VonZeile
z = VonZeile
Do While Cells(i, ErsteSpalte).Value <> ""  
    Nummer = Cells(i, ErsteSpalte).Value
    ok = True
    For j = VonVergleich To BisVergleich
        If Cells(MarkierungsZeile, j).Value <> "" Then  
            k = VonZeile
            Do While Cells(k, j).Value <> "" And Cells(k, j).Value <> Nummer  
                k = k + 1
            Loop
            If Cells(k, j).Value <> Nummer Then
                ok = False
                Exit For
            End If
        End If
    Next
    If ok Then
        Cells(z, ZielSpalte).Value = Nummer
        z = z + 1
    End If
    i = i + 1
Loop
MsgBox "Fertig."  
End Sub
Noch eine Anmerkung: Wenn verschiedene Varianten "durchgespielt" werden sollen, bietet es sich an, in der Tabelle eine Startmöglichkeit für das Script vorzusehen. Dazu kann zB ein ClipArt oder eine AutoForm eingesetzt werden: Die Grafik im Tabellenblatt platzieren, aus dem Kontextmenü "Makro zuweisen..." wählen und das Script "Sammle" angeben. Danach genügt ein Klick auf die Grafik, um das Script zu starten.


Grüße
bastla
Labi
Labi 22.11.2006 um 07:50:26 Uhr
Goto Top
danke für deine bemühungen face-smile

eine kleine "zusatzaufgabe" hätte ich da noch: *g*
4 spalten mit je 200 nummern sind gleich

ich suche alle nummern die 2 mal vorkommen.
die nummer kann in spalte 1 +2 oder 1+3 oder 1+4 oder 2+4 oder 3+2 stehen usw...

weißt du was ich meine? ich kann also nicht garantieren, dass die spalten in denen die doppelten vorkommen direkt nebeneinander ist in diesem 4-er paket
bastla
bastla 22.11.2006 um 08:05:31 Uhr
Goto Top
Hallo Labi!

Etwa 4 spalten in excel vergleichen?

Grüße
bastla
Labi
Labi 22.11.2006 um 08:08:12 Uhr
Goto Top
das verstehe ich jetzt nicht *g*

du verlinkst auf den selben post??
Labi
Labi 22.11.2006 um 08:09:40 Uhr
Goto Top
achso jetzt verstehe ich was du meinst *g*

bei dem bsp muss ich die spalten markieren, dass es funktioniert - das will bzw. kann ich aber nicht.
sollte ohne markiererei laufen
bastla
bastla 22.11.2006 um 08:10:22 Uhr
Goto Top
Hallo Labi!

Und das mit voller Absicht (siehe Post 23:27:05) ...

Grüße
bastla
bastla
bastla 22.11.2006 um 08:11:52 Uhr
Goto Top
Hallo Labi!
sollte ohne markiererei laufen
Wie legst Du dann fest, welche Spalten miteinander verglichen werden sollen?

Grüße
bastla
Labi
Labi 22.11.2006 um 08:12:24 Uhr
Goto Top
es ist immer fix die spalte A,B,C,D

was anderes tritt nie auf
bastla
bastla 22.11.2006 um 08:14:47 Uhr
Goto Top
Das ist schön, aber was genau willst Du als Ergebnis - eine Spalte mit den gleichen Nummern aus A+B, eine mit denen aus A+C, aus A+D, ... Bis jetzt wird ja immer nur eine Ergebnisspalte erzeugt.
Labi
Labi 22.11.2006 um 08:17:48 Uhr
Goto Top
ich will A,B,C,D vergleichen und wenn in irgendwelchen beiden spalten eine nummer doppelt vorkommt soll sie in spalte X geschrieben werden

also nur eine ergebnis spalte, so wie bisher

nur jetzt werd ja leider nicht so kreuz und quer miteinander verglichen
bastla
bastla 22.11.2006 um 08:19:26 Uhr
Goto Top
Also alle in A+B gleichen eintragen, darunter alle in A+C gleichen, darunter alle in A+D gleichen, ...?
Labi
Labi 22.11.2006 um 08:20:37 Uhr
Goto Top
genau, wobei es kann auch vorkommen, dass gleiche nummern in B+D oder C+B oder D+C sind

da liegt ja mein problem, weils so kompliziert ist *g*
bastla
bastla 22.11.2006 um 08:22:58 Uhr
Goto Top
Willst Du daher sicherstellen, dass Nummern im Ergebnis auch nicht mehrfach vorkommen? Wenn ja, kann dafür eine weitere (endgültige) Ergebnisspalte verwendet werden?

Noch eine Frage - lässt sich die Anzahl der Nummern in den einzelnen Spalten festlegen (zB in allen gleich oder sogar in allen 200)?
Labi
Labi 22.11.2006 um 08:25:36 Uhr
Goto Top
doppelte nummern im ergebnis wären mir zwar egal, aber schöner wäre es schon...

du kannst so viele ergebnisspalten verwenden wie du brauchst, hauptsache das endergebnis passt *g*

die anzahl der zeilen pro spalte lässt sich leider nicht fixieren und kann auch pro spalte anders sein....

es wird immer kniffeliger face-smile)
bastla
bastla 22.11.2006 um 08:32:01 Uhr
Goto Top
Zusammenfassung:
In den Spalten A bis D steht (ab welcher Zeile?) eine unbestimmte Anzahl von Zahlen, von denen all jene, die in mindestens zweien dieser Spalten vorkommen, in eine gemeinsame Ergebnisspalte geschrieben werden sollen, wobei im Ergebnis jede Zahl nur einmal aufscheinen soll (übrigens: Sortieren hätte ich heute im Sonderangebot face-wink).

Zur Sicherheit: Die Spalten ab E enthalten keine Daten, auf die Rücksicht zu nehmen wäre (können also vor allem gelöscht werden)?

So ganz nebenbei: Worum geht es bei der ganzen Sache überhaupt?
Labi
Labi 22.11.2006 um 08:36:11 Uhr
Goto Top
"ab welcher zeile" -> in jeder spalte ab zeile 2
ab E gibts keine Daten -> das ist richtig

also jetzt haben wir uns gegenseitig 100%-ig verstanden *gg*

das soll eine kleine handy-nummern-auswertung für die firmenhandys werden, die ich an meine mitarbeiter verteile...

DANKE für deinen unermüdlichen einsatz!!
bastla
bastla 22.11.2006 um 08:37:29 Uhr
Goto Top
Weiter geht's allerdings erst später am Tag ...

Grüße
bastla
Labi
Labi 22.11.2006 um 08:39:22 Uhr
Goto Top
ich bin über jede hilfe dankbar, also lass dir zeit....
(mach dir ein bier auf und hau dir ein paar Käsekrainer rein *gg*)
bastla
bastla 22.11.2006 um 12:43:48 Uhr
Goto Top
Hallo Labi!

Option Explicit

Sub Sammle()
Const VonZeile = 2
Const VonSpalte As Integer = 1 'Spalte A  
Const SpaltenAnzahl As Integer = 4

Dim ZielSpalte As Integer, TempSpalte As Integer, LetzteErgebnisZeile As Integer
ZielSpalte = VonSpalte + SpaltenAnzahl
TempSpalte = ZielSpalte + 1

Dim i As Integer, j As Integer, k As Integer, v As Integer, z As Integer
Dim Nummer As Variant, ok As Boolean
Dim Bis As Integer
Bis = VonSpalte + SpaltenAnzahl - 1

Cells(1, ZielSpalte).EntireColumn.ClearContents
Cells(1, TempSpalte).EntireColumn.ClearContents

z = VonZeile - 1
For v = VonSpalte To Bis - 1
    i = VonZeile
    Do While Cells(i, v).Value <> ""  
        Nummer = Cells(i, v).Value
        For j = v + 1 To Bis
            ok = True
            k = VonZeile
            Do While Cells(k, j).Value <> "" And Cells(k, j).Value <> Nummer  
                k = k + 1
            Loop
            If Cells(k, j).Value <> Nummer Then
                ok = False
            End If
            If ok Then
                z = z + 1
                Cells(z, TempSpalte).Value = Nummer
            End If
        Next
        i = i + 1
    Loop
Next

LetzteErgebnisZeile = z
If LetzteErgebnisZeile > VonZeile Then
    Range(Cells(VonZeile, TempSpalte), Cells(LetzteErgebnisZeile, TempSpalte)).Sort (Cells(VonZeile, TempSpalte))
    z = VonZeile
    Cells(z, ZielSpalte).Value = Cells(z, TempSpalte).Value
    For i = VonZeile + 1 To LetzteErgebnisZeile
        If Cells(i, TempSpalte).Value <> Cells(i - 1, TempSpalte).Value Then
            z = z + 1
            Cells(z, ZielSpalte).Value = Cells(i, TempSpalte).Value
        End If
    Next
ElseIf LetzteErgebnisZeile = VonZeile Then
    Cells(VonZeile, ZielSpalte).Value = Cells(VonZeile, TempSpalte).Value
End If

Cells(1, TempSpalte).EntireColumn.ClearContents
MsgBox "Fertig."  
End Sub
Gebrauchsanweisung: wie oben

Grüße
bastla
Labi
Labi 22.11.2006 um 16:40:38 Uhr
Goto Top
WOW!

das funktioniert ja wirklich face-smile) *g*

DANKE DANKE DANKE
Labi
Labi 22.11.2006 um 16:43:20 Uhr
Goto Top
und wenn ich dann später mal mehrere spalten haben sollte (also mehr als 4) brauch ich dann nur die variable "spaltenanzahl" ändern, oder gehört sonst noch was umgestellt??
bastla
bastla 22.11.2006 um 18:49:34 Uhr
Goto Top
Hallo Labi!
brauch ich dann nur die variable "spaltenanzahl" ändern
Abgesehen davon, dass "SpaltenAnzahl" eine Konstante face-wink ist, wäre das der Plan. Der Rest baut auf den Festlegungen am Anfang auf (zB auch die ZielSpalte).
oder gehört sonst noch was umgestellt??
Ich habe nichts dagegen, wenn Du es noch verbesserst; aber sofern es jetzt tut, was es soll, kannst Du es einfach so lassen.

Grüße
bastla
conni0815
conni0815 07.02.2009 um 10:44:20 Uhr
Goto Top
Einen schönen guten Morgen an alle Mitglieder,

habe in diesem Forum endlich das gefunden was ich suchte und zwar den Beitrag "4 Spalten in Excel vergleichen, geschrieben von Labi am 21.11.2006 18;11:18 Uhr". Geantwortet bzw. den Code hat "bastla" geschrieben. Meine Exceltabelle hat aber anstatt 4 Spalten 18 Spalten und mehr und ca. 100 Zeilen. Da ich aber totale Anfängerin in VBA bin, ist er mir nicht gelungen auf 18 Spalten oder mehr den Code zu verändern. Kann mir jemand bitte weiterhelfen. Im voraus möchte ich mich für jede Antwort bedanken.

Gruss

conni0815
bastla
bastla 07.02.2009 um 11:06:34 Uhr
Goto Top
Hallo conni0815!
ist er mir nicht gelungen auf 18 Spalten oder mehr den Code zu verändern.
Die Spaltenanzahl wird in Zeile 6 (der zweiten/vorläufig face-wink letzten Version) festgelegt - soferne die Anzahl der Spalten in Deiner Tabelle dynamisch ist und daher nicht als Konstante eingetragen werden soll/kann, solltest Du den Aufbau der Tabelle noch etwas genauer beschreiben (vor allem: aus welcher Zeile - etwa mit Überschriften - lässt sich diese Anzahl sicher ermitteln) ...

Grüße
bastla
conni0815
conni0815 07.02.2009 um 15:51:08 Uhr
Goto Top
Hallo bastla,

vielen Dank für deine schnelle Antwort. Vorab zur Info: Ich komme aus der Bekleidungsindustrie und wir haben Kleiderständer (Spalte A = Kleiderstange 1, Spalte B = Kleiderstange 2 usw.). und dort hängen minimum 90 Teile pro Stange drauf (Zeile 1-90). In Excel habe ich nun eine Arbeitsmappe z. B. Tabelle1 und dort streichen wir das, was wir von der Kleiderstange nehmen. Nun möchte ich eine Auswertung machen wo jede Nummer, welche in allen 18 Spalten oder mehr vorkommt und diese in die 19 Spalte oder mehr schreiben. Alles weitere ist sehr schwer zu beschreiben. Das Prinzip ist eigentlich wie bei Labi, nur das ich mehr Spalten habe, wenn ich es richtig sehe. Wenn ich das hätte, wäre ich schon sehr dankbar. Sollten sich dann noch Fragen ergeben, würde ich mich vertrauensvoll an dich wenden. Besten Dank.

Gruss

conni0815