Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
392to396
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
392to396
392to396
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Vergleich und Löschen

Vergleich und Löschen
06.03.2004 22:44:38
Matthias
Hallo,
ich habe folgendes Problem
es sind in Spalte a , b, c, d, e, f Zahlen, die von einem Barcodescanner eingelesen wurden, eingetragen. (einzeilige Überschrift über den Spalten vorhanden)
Ich möchte nun, daß Spalte a mit Spalte b verglichen wird und die doppelten Zahlen in Spalte a gelöscht werden und die unter der Löschung stehenden Zahlen nach oben rücken.
Danach sollen die Spalten b mit c verglichen werden und weiter wie oben.
Das Soll sich wiederholen, bis Spalten e und f vergliechen wurden.
Hier im Forum habe ich den VBA gefunden und ich habe versucht weitere Makros durch Änderung der Spalten zu erzeugen. Ist mir aber nach stundenlangen Versuchen nicht gelungen. Kann mir bitte jemand helfen.

Sub vergleich()
Dim EndeA As Integer, EndeB As Integer
EndeA = Range("A1").End(xlDown).Row
EndeB = Range("B1").End(xlDown).Row
For B = 1 To EndeB
For A = 1 To EndeA
If Cells(A, 1) = Cells(B, 2) Then
Cells(A, 1).Delete
End If
Next A
Next B
End Sub

Und noch eine Frage, geht ein solcher Vergleich mit Löschung auch über mehrere Tabellen.
Matthias

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Unklare Aufgabenstellung
07.03.2004 01:30:53
Ramses
Hallo
Was soll passieren, wenn der Suchbegriff nicht in Spalte B vorkommt
Was soll passieren, wenn der Begriff nicht in Spalte B vorkommt aber dafür doppelt in den anderen Spalten
Was soll passieren wenn der Suchbegriff in der gleichen Spalte mehr als doppelt vorkommt
Gruss Rainer
AW: Unklare Aufgabenstellung
07.03.2004 08:25:18
andre
hallo matthias,
etwa so:


Sub vergleich()
    Dim EndeA As Integer, EndeB As Integer, EndeC As Integer
    Dim a%, b%, c%
    'Hinweis: Integer nur wenn sicher ist, dass
    'Bereich nur bis Zeile 32768 = Integerende geht
    'EndeC/c klappt, dort stehen max. 256
    EndeC = Cells(1, Columns.Count).End(xlToLeft).Column
    For c = 1 To EndeC
        EndeA = Cells(Rows.Count, c).End(xlUp).Row
        EndeB = Cells(Rows.Count, c + 1).End(xlUp).Row
        'EndeA/B klappt so, wenn der Bereich nicht bis ganz unten gefüllt ist
        For b = 1 To EndeB
            For a = 1 To EndeA
                If Cells(a, c) = Cells(b, c + 1) Then
                Cells(a, c).Delete
                End If
            Next a
        Next b
    Next c
End Sub

     Code eingefügt mit Syntaxhighlighter 2.5

das makro kannst du in jeder tabelle anwenden. wenn du es auch für den sprung von einer zur nächsten brauchst, also vergleich IV Blatt 1 zu A Blatt 2, muss man es umprogrammieren.
gruss andre
Anzeige
Präzissierung der Aufgabenstellung u. vielen Dank
07.03.2004 11:34:24
Matthias
Hallo,
erst mal vielen vielen Dank für die Hilfe. Andre, das Programm ist so wie ich es beschrieben habe, aber Rainer hat recht, ich habe mich unpräzise ausgedrückt bzw. war mir nicht klar über den genauen Ablauf.
Es wäre perfekt, wenn
wenn Spalte B; die Spalte A überprüft ob gleiche Zahlen vorhanden, wenn in A gleiche Zahlen vorhanden dann diese in Spalte A löschen und darunter liegende Zahlen hochrücken
wenn Spalte C; die Spalte B und die Spalte A überprüft ob gleiche Zahlen vorhanden, wenn in B und oder A gleiche Zahlen vorhanden dann diese in Spalte A bzw B löschen und darunter liegende Zahlen hochrücken
wenn Spalte D; die Spalte C, die Spalte B und die Spalte A überprüft ob gleiche Zahlen vorhanden, wenn in C und oder B und oder A gleiche Zahlen vorhanden dann diese in Spalte A bzw. B bzw. C löschen und darunter liegende Zahlen hochrücken.
usw.
Doppelungen bzw. mehr als Doppelungen in den Spalten wollte ich mit einem gesonderten Makro beseitigen, wenn es in einem Makro geht, wäre das super.
Mit der EXCEL Datei und dem Makro wollte ich eine Auftragsverfolgung realisieren, in der die jeweilige bearbeitende Station die Auftragsnummer einscannt und die Nummer an den vorherigen Stationen löscht, da sie dort dann ja fertig bearbeitet sind.
Nochmals vielen Dank für die Mühe. Sollte jemand von Euch mal in Potsdam sein, melden ich gebe einen aus. Das ist wirklich ernst gemeint.
Viele Grüße Matthias
Anzeige
AW: Präzissierung der Aufgabenstellung u. vielen Dank
07.03.2004 11:48:20
Matthias
Hallo André,
mir ist aufgefallen, daß sich Zahlen aus den nächsten Spalten in die vorherige eintragen, obwohl das Makro die löschen müßte.
Ich habe die EXCEL Datei mal rangehangen.
https://www.herber.de/bbs/user/4120.xls

Gruß
Matthias
AW: Präzissierung der Aufgabenstellung u. vielen Dank
07.03.2004 14:09:36
Ramses
Hallo
Es ist immer noch nicht ganz klar, aber hier mal einen Code der das macht was du beschrieben hast.
Das ist der Code



Option Explicit
Sub del_double_data()
Dim As Integer, n As Integer, x As Integer
Dim wks As Worksheet
For Each wks In Application.Worksheets
    'Schleife für Anzahl Spalten definieren
    '2 = A, 6 = H
    'Die letzte Spalte kann nicht verglichen werden
    For i = 2 To 6
        'Spalte links von i prüfen
        For n = wks.Cells(65536, i - 1).End(xlUp).Row To Step -1
            If Application.WorksheetFunction.CountIf(Range(wks.Cells(2, i - 1), wks.Cells(n, i - 1)), wks.Cells(n, i)) > 0 Then
                For x = wks.Cells(65536, i - 1).End(xlUp).Row To Step -1
                    If wks.Cells(x, i - 1) = wks.Cells(n, i) Then
                        wks.Cells(x, i - 1).Delete Shift:=xlUp
                        Exit For
                    End If
                Next x
            End If
        Next n
    Next i
Next wks
End Sub

     Code eingefügt mit Syntaxhighlighter 2.5



Das ist die Ausgangslage
Anzeige
AW: Präzissierung der Aufgabenstellung u. vielen Dank
07.03.2004 17:10:51
Matthias
Hallo Rainer,
bitte um Nachsicht und vielen Dank für Deine Mühe. Leider ist das Makro nicht das was ich erreichen wollte.
Ich versuche es nochmal zu beschreiben.
Mit der EXCEL Datei und dem Makro wollte ich eine Auftragsverfolgung realisieren, an der jeweiligen Station, die jeweils in Spalte A bis F einscannen können, wird die Auftragsnummer einscannt. Da die nächst höhere Spalte einen höheren Anarbeitungsstand des Auftrages darstellen und mit der EXCEL Datei ein Überblick geschaffen werden soll, müssen die Auftragsnummern die in einer höheren Bearbeitungsstufe (höhere Spalte)sind mit denen der niedrigeren Bearbeitungsstufen (niedrige Spalten) zu vergelichen und doppelte in den niedrigen Spalten zu löschen.
Vielleicht kannst Du es aus einer Beispieltabelle besser sehen. André sein Makro war schon gut, prüft aber nicht über alle unteren Spalten und verschiebt Zellen.
Ich habe versucht in der EXCEL Datei https://www.herber.de/bbs/user/4124.xls den Ausgangszustand, das Ergebnis mit Andrés Makro und das eigentliche Ergebnis, was herauskommen soll darzustellen.
Nochmals vielen Dank!!!
Matthias
Anzeige
AW: Präzissierung der Aufgabenstellung u. vielen Dank
07.03.2004 17:17:37
andre
hallo matthias,
schreibe mal hinter das delete shift:=xlup, dann klappts auch mit dem nachbarn.
gruss andre
AW: Präzissierung der Aufgabenstellung u. vielen Dank
07.03.2004 17:20:11
andre
hallo matthias,
ich habe auchmal sicherheitshalber den zähler der inneren schleife rumgedreht
For a = EndeA To 1 Step -1
If Cells(a, c) = Cells(b, c + 1) Then
Cells(a, c).Delete shift:=xlUp
End If
Next a
gruss andre
AW: Präzissierung der Aufgabenstellung u. vielen Dank
07.03.2004 20:02:55
Matthias
Hallo André,
habe alles gemacht, funktioniert aber leider nicht. Bei der Beispieldatei löscht er in Spalte A 1,2,3,4,5,6 un 7 nicht, in Spalte B 2 und 2 nicht, in Spalte C die zwei 4 (soll nur eine stehen bleiben) Spalten D,E und F scheinen zu funktionieren. Es schein so, das der Lauf unterbrochen wird, wenn in einer Spalte z.B. inn C nicht steht, das in A und B nicht gelöscht wird.
Ich weiß ich nerve Euch bestimmt. Die Lösung würde mir aber sehr viel bedeuten.
Danke
Anzeige
AW: Präzissierung der Aufgabenstellung u. vielen Dank
08.03.2004 08:07:29
andre
hallo matthias,
der code funktioniert wie beschrieben.
1-7 kann in spalte a nicht gelöscht werden, weil es in spalte b nicht enthalten ist. nach deiner beschreibung wir eine spalte nur mit der nächsten verglichen und nicht mit allen folgenden:
Ich möchte nun, daß Spalte a mit Spalte b verglichen wird und die doppelten Zahlen in Spalte a gelöscht werden und die unter der Löschung stehenden Zahlen nach oben rücken.
Danach sollen die Spalten b mit c verglichen werden und weiter wie oben.
Das Soll sich wiederholen, bis Spalten e und f vergliechen wurden.
wenn du eine spalte mit allen folgenden vergleichen willst melde dich noch mal.
hier mal ein screenshot:
Userbild
gruss andre
Anzeige
AW: Präzissierung der Aufgabenstellung u. vielen Dank
08.03.2004 19:57:43
Matthias
Hallo Andre,
das Makro läuft gut, nachdem ich es nach Deinen Angaben gändert habe. Vielen Dank.
Perfekt wäre es, wenn (und jetzt kommt wieder ein Erklärungsversuch, der bestimmt nicht präzise ist) das Makro so prüfen würde
prüfe Spalte A auf Zahlen die in B vorkommen, wenn ja lösche diese in Spalte A
prüfe Spalte A und B auf Zahlen die in C vorkommen, wenn ja lösche diese dort, wo sie vorkommen
prüfe Spalte A, B und C auf Zahlen die in D vorkommen, wenn ja lösche diese dort, wo sie vorkommen
usw.
unter Beibehaltung der schönen Sachen die in Deinem Makro funktionieren, wie nach oben rücken und löschen der Doppel- und Mehrfacheinträge in der jeweiligen Spalte
Falls es nicht geht oder sehr aufwendig ist, kann ich mit Deinem jetzigen Makro prima leben. Ich werde dann organisatorisch mir etwas einfallen lassen.
Kannst Du mir bitte noch sagen, an welcher Stelle ich was und wie ändern muß, damit ich das Makro auf mehr Spalten ausweiten bzw. einschränken kann oder geht es sogar, daß man Spalten überspringt?
Nochmals vielen Dank und wen Du oder Rainer eine Potsdam Besuch machen, mich einfach anmailen und ich gebe einen aus bzw. führe Euch durch die stadt.
Gruß Matthias
Anzeige
AW: Präzissierung der Aufgabenstellung u. vielen Dank
09.03.2004 16:36:52
andre
hallo matthias,
probier's mal so:


Sub vergleich()
Dim EndeA As Integer, EndeB As Integer, EndeC As Integer
Dim a%, b%, c%
'Hinweis: Integer nur wenn sicher ist, dass
'Bereich nur bis Zeile 32768 = Integerende geht
'EndeC/c klappt, dort stehen max. 256
'Optimierung für größere Datenmengen mit "Find" zum Suchen
EndeC = Cells(1, Columns.Count).End(xlToLeft).Column
'alle Spalten bearbeiten ausser letzter Spalte - danach kommt nix mehr
For c = 1 To EndeC - 1
          'letzte Zeile der bearbeiteten Spalte
    EndeA = Cells(Rows.Count, c).End(xlUp).Row
    'EndeA/B klappt so, wenn der Bereich nicht bis ganz unten gefüllt ist
    'bearbeitete Spalte von letzter zu erster Zeile durchgehen
    For a = EndeA To Step -1
        'mit allen Folgespalten vergleichen
        For d = c + 1 To EndeC
            'letzte Zeile der Suchspalte
            EndeB = Cells(Rows.Count, c + 1).End(xlUp).Row
            'mit allen Zeilen vergleichen
            For b = 1 To EndeB
                'bei Gleichheit Zelle in bearbeiteter Spalte löschen
                If Cells(a, c) = Cells(b, d) Then
                    Cells(a, c).Delete shift:=xlUp
                End If
            Next b
        Next d
    Next a
Next c
End Sub
 

     Code eingefügt mit Syntaxhighlighter 2.5


gruss andre
Anzeige
AW: Präzissierung der Aufgabenstellung u. vielen Dank
09.03.2004 20:35:22
Matthias
Hallo André,
leider geht das Makro nicht richtig.
In der Datei habe ich Ausgangssituation, Ergebnis Makro und Soll dargestellt.
https://www.herber.de/bbs/user/4177.xls
Gruß Matthias
AW: Präzissierung der Aufgabenstellung u. vielen Dank
10.03.2004 18:14:12
andre
hallo matthias,
noch'n versuch. dabei wird übrigens auch in deiner mittleren spalte die doppelte 5 und 6 entfernt.


Sub vergleich()
Dim EndeA As Integer, EndeB As Integer, EndeC As Integer
Dim a%, b%, c%
'Hinweis: Integer nur wenn sicher ist, dass
'Bereich nur bis Zeile 32768 = Integerende geht (z.B. EndeC / c max. 256 Spalten)
'Optimierung für größere Datenmengen mit "Find" zum Suchen
'EndeC klappt so, wenn die letzte Spalte nicht gefüllt ist
EndeC = Cells(1, Columns.Count).End(xlToLeft).Column
'alle Spalten bearbeiten ausser letzter Spalte - danach kommt nix mehr
For c = 1 To EndeC
  'letzte Zeile der bearbeiteten Spalte
  EndeA = Cells(Rows.Count, c).End(xlUp).Row
  'EndeA/B klappt so, wenn der Bereich nicht bis ganz unten gefüllt ist
  'bearbeitete Spalte von letzter zu erster Zeile durchgehen
  'Bearbeitungsspalte nach doppelten durchsuchen
  For a = EndeA To Step -1
    'bei Gleichheit Zelle in bearbeiteter Spalte löschen
    For b = 1 To a - 1
      If Cells(a, c) = Cells(b, c) Then
        Cells(a, c).Delete shift:=xlUp
        EndeA = EndeA - 1
        Exit For
      End If
    Next b
  Next a
  MsgBox 1
  'nach Doppelsuche in letzter Spalte Schleife verlassen
  If c = EndeC Then Exit For
  
  For a = EndeA To Step -1
    'mit allen Folgespalten vergleichen
    If Cells(a, c) = "" Then
      Cells(a, c).Delete shift:=xlUp
    Else
      For d = c + 1 To EndeC
        'letzte Zeile der Suchspalte
        EndeB = Cells(Rows.Count, d).End(xlUp).Row
        'mit allen Zeilen vergleichen
        For b = 1 To EndeB
          'bei Gleichheit Zelle in bearbeiteter Spalte löschen
          If Cells(a, c) = Cells(b, d) Then
            Cells(a, c).Delete shift:=xlUp
            Exit For
          End If
        Next b
      Next d
    End If
  Next a
Next c
End Sub


     Code eingefügt mit Syntaxhighlighter 2.5

gruss andre
Anzeige
AW: Präzissierung der Aufgabenstellung u. vielen Dank
10.03.2004 21:51:29
Matthias
Hallo André,
jetzt geht leider nichts mehr. Es erscheint nur ein Fenster mit einer 1 und ein ok Button.
Kann das sein, oder ist irgend ein anderes Makro bei mir aktiv?
kannst Du das anhand der Beispieldatei mal überprüfen.
Gruß Matthias
AW: Präzissierung der Aufgabenstellung u. vielen Dank
11.03.2004 17:58:45
andre
hallo matthias,
hast du (öfter) mal ok gedrückt? nimm mal diese zeile raus: MsgBox 1
das war nur für mich eine kontrollstelle.
gruss andre
AW: Präzissierung der Aufgabenstellung u. vielen Dank
07.03.2004 19:07:20
Ramses
Hallo
Tut mir leid.
Aber ich verstehe nicht, warum die beiden "2" in Spalte B gelöscht werden sollen und die 3 "3" auf 1 reduziert werden soll.
Da bleibt mir das Geheimnis leider verborgen, und ich kann keinen Ansatz erkennen.
Ansonsten hätte ich einfach vermutet, alle doppelten Datensätze soweit reduzieren, bis nur noch ein Datensatz davon vorhanden ist.
AW: Präzissierung der Aufgabenstellung u. vielen Dank
07.03.2004 21:16:39
Matthias
Hallo Rainer,
die Zahlen 1, 2 usw dienen nur zur Vereinfachung, in der Realität ist es eine ausgelesene Auftragsnummer (aus Barcode), die beiden "2" in Spalte B werden gelöscht, weil in Spalte D die "2" schon steht (höherer Anarbeitungszustand in der Produktion). Ich kann erkennen, daß der Auftrag "2" kommissioniert ist. Beide deshalb, weil es vorkommen kann, das die Auftragsnummer aus Versehen doppelt gescannt wird.
Die "3" in Spalte B bleibt, da keine "3" in Spalte C,D,E und F ist. Daraus kann ich erkenne, daß bei Auftrag "3" Teile fehlen.
Konnte ich es jetzt richtig erklären?
Gruß Matthias
Noch offen...
07.03.2004 22:59:23
Ramses
Hallo
Jetzt habe ich es zwar verstanden, aber ich kriegs nicht auf die Reihe.
Irgendwie habe ich da heute den Wurm drin.
Sorry.
Gruss Rainer
AW: Noch offen...
08.03.2004 07:14:37
Matthias
Hallo,
ich habe schon von Anfang an vermutet, daß es schwer ist, dieses Problem zu lösen.
Viele Grüße aus Potsdam

Matthias
AW: Noch offen... wirklich?
08.03.2004 07:55:47
andre
hallo matthias,
hat dir nun meine korrektur was gebracht? mein wurm ist damit raus.
gruss andre

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige