Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1288to1292
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
Inhaltsverzeichnis

gleiche Abteilungsnummer, unterschiedlicher Name

gleiche Abteilungsnummer, unterschiedlicher Name
30.11.2012 12:11:45
Jenkins
Hallo zusammen,
Ich suche eine Lösung wie ich über ein VBA Skript abbilden kann, dass nach gleichen Abteilungsnummern mit unterschiedlichen Abteilungsnamen gesucht wird. Ein Beispiel wie meine Ausgangstabelle aussieht findet ihr hier:
Userbild
Das ganze sollte am besten über einen Button aufrufbar sein und die gefundenen Inkonsistenzen gruppiert nach Abteilungsnummer auf zweites Arbeitsblatt übertragen werden. In etwa so:
Userbild
Über eine Idee wie das ganze umsetzbar wäre oder Code-Vorschläge wäre ich sehr dankbar.

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: gleiche Abteilungsnummer, unterschiedlicher Name
30.11.2012 12:22:01
Rudi
Hallo,
warum nicht einfach per Pivot-Tabelle?
Gruß
Rudi

AW: gleiche Abteilungsnummer, unterschiedlicher Name
30.11.2012 12:36:33
Jenkins
Hallo Rudi,
Vielen Dank für deinen Vorschlag. Die Lösung das Problem als Pivot Tabelle umzusetzen, besteht bereits. Allerdings hat die original Tabelle noch mehr Spalten die auf die selbe Weise verglichen werden müssen und deswegen bin ich auf der Suche nach einer etwas eleganteren Lösung, bzw. einem ausbaufähigerem Ansatz.
Gruß
Jenkins

immer wieder das gleiche.
30.11.2012 12:51:55
Rudi
Hallo,
da kommt jemand mit nem Problem und dann stellt sich raus, dass es viel komplexer ist, als angegeben.
Mündet dann in nem Endlosthread.
noch mehr Spalten die auf die selbe Weise verglichen werden müssen
dann solltest du mal konkreter werden.
Gruß
Rudi

Anzeige
AW: immer wieder das gleiche.
30.11.2012 13:32:23
Jenkins
Hallo,
Es geht um Spalten die nach dem selben Prinzip verglichen werden sollen und um dieses Prinzip geht es. Deswegen ist das eigentliche Problem nicht komplexer. Bsp: Produktnummer zu Produktname, kommt also letztendlich auf das selbe raus wie das Problem mit den Abteilungen.
Gruß
Jenkins

AW: immer wieder das gleiche.
01.12.2012 20:55:20
schauan
Hallo Jenkins,
ich könnte mir da eine Lösung mit dem Spezialfilter vorstellen. Filter die (beiden) Spalten in einen anderen Bereich ohne Duplikate. Die könntest Du auch aufzeichnen, und damit hättest Du einen code.
Alternativ könntest Du eine Collection aufbauen. Due gehst in einer Schleife über alle Zeilen, nimmst als Wert die Zeilennummer oder was immer Du willst, und als Key setzt Du die Inhalte der beiden Spalten zusammen.
Im Prinzip so
'neue Colection dimensionieren
dim colZeilen as new collection
'bei Fehler weiter mit naechster Zeile
on error resume next
'Schleife ueber alle Zeilen
for i=1 to 10
'Datensatz hinzufuegen. Bei gleichem Key kommt Fehler
colZeilen.add i, cells(i,1) & cells(i,2)
next
Grüße, André

Anzeige
AW: immer wieder das gleiche.
03.12.2012 10:34:57
Jenkins
Hallo André,
Vielen Dank für deine Idee, das scheint auf jedenfall deutlich schneller zu sein als den Lösungsansatz den ich bisher verfolgt habe.
Allerdings habe ich noch das Problem mit dem Error Handling für die Collection, die funktioniert nicht ganz so wie ich es mir vorstelle.
Hier erst mal mein abgewandelter Code:
Dim colZeilen As New Collection
'bei Fehler weiter mit naechster Zeile
On Error Resume Next
'Schleife ueber alle Zeilen
Sheets("Abteilung").Select
For i = 2 To 100
'Datensatz hinzufuegen. Bei gleichem Key kommt Fehler
colZeilen.Add i, Sheets("Abteilung").Cells(i, 1) & Sheets("Abteilung").Cells(i, 2)
If Err = 1 Then
ActiveSheet.Cells(i, 1).Select
Selection.EntireRow.Delete
End If
Next
Mein Ziel ist es, alle Datensätze zu löschen, die "richtig" sind, damit ich nur noch die fehlerhaften Datensätze in der Übersicht habe.
z.B. das sowas übrig bleibt:
Abteilungsnummer Abteilungsname
A2 Werbung
A2 Marketing

Anzeige
AW: immer wieder das gleiche.
03.12.2012 10:52:47
Jenkins
Oder gibt es noch eine andere Möglichkeit die Elemente in der Collection irgendwie zu vergleichen?
Das Problem was ich noch sehe ist folgendes:
Wenn alle Werte mit dem gleichen Key (also Werte die in meiner Ausgangstabelle korrekt sind), bleibt dennoch von jeder Zeile ein Element übrig, da es ja dann nicht doppelt vorkommt. Wie kann ich auch diese Elemente rauslöschen bzw. erkennen? Hat jemand eine Idee?
Gruß Jenkins

AW: immer wieder das gleiche.
03.12.2012 11:52:43
Rudi
Hallo,
Sub aaa()
Dim rngDel As Range, rngC As Range
Application.ScreenUpdating = False
For Each rngC In Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))
If Application.CountIf(Columns(1), rngC) = 1 Then
If rngDel Is Nothing Then
Set rngDel = rngC
Else
Set rngDel = Union(rngDel, rngC)
End If
End If
Next
If Not rngDel Is Nothing Then
For Each rngC In rngDel.Areas
rngC.Resize(, 2).Delete
Next
End If
End Sub

Gruß
Rudi

Anzeige
AW: immer wieder das gleiche.
03.12.2012 14:56:53
Jenkins
Hallo Rudi,
Danke für dein Codebeispiel. Könntest du dazu vielleicht noch ein, zwei Sätze als Erklärung schreiben? Ich bin ein ziemlicher VBA Anfänger und kenne die meisten Befehle leider nicht.
Viele Grüße
Jenkins

AW: immer wieder das gleiche.
03.12.2012 18:06:01
schauan
Hallo Jenkins,
das mit dem Löschen hab ich aber in der ersten Frage nicht gelesen :-(
Ich bleib trotzdem mal bei meinem Vorschlag und hab hier die korrekte Fehlerbehandlung. Die Nummer bekommst Du auch raus, wenn Du sas On Error ... erst mal auskommentierst und Dir dann die Meldung anschaust. Hinterher musst Du den Fehler zurücksetzen, sonst bleibt er, auch wenn die nächste Zeile korrekt wäre.
Wenn Du die Zeilen in einer Schleife löschst, dann solltest Du von hinten anfangen - hinten wäre hier:
Cells(Rows.Count, 1).End(xlUp)) - siehe Rudi's code.
For i=Cells(Rows.Count, 1).End(xlUp)) to 2 step -2
Machst Du es anders rum, wird nur jede zweite Zeile betrachtet. Du löschst z.B. Zeile 9, in dem Moment rutscht Zeie 10 in die 9. Am Schleifenende wird der Zähler auf 10 gestellt, und dort ist ja jetzt die vorherige 11. Die hochgerutschte 10 fällt also durch's Raster :-(
Sub test()
Dim colZeilen As New Collection
'bei Fehler weiter mit naechster Zeile 
'On Error Resume Next 
'Schleife ueber alle Zeilen 
Sheets("Tabelle1").Select
For i = 2 To 100
'Datensatz hinzufuegen. Bei gleichem Key kommt Fehler 
colZeilen.Add i, Sheets("Tabelle1").Cells(i, 1) & Sheets("Tabelle1").Cells(i, 2)
If Err = 457 Then
ActiveSheet.Cells(i, 1).Select
Selection.EntireRow.Delete
Err.Clear
End If
Next

End Sub
Grüße, André

Anzeige
AW: immer wieder das gleiche.
04.12.2012 08:50:42
Jenkins
Nachtrag:
Ich habe mal kurz eine Integer Variable deklariert und versucht mit = ihr den Wert zuzuweisen:
numberOfRows = Sheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp)
Diese Variable bleibt 0 wenn der Code die Stelle durchläuft.

AW: immer wieder das gleiche.
04.12.2012 08:53:39
Jenkins
Hallo André,
Das Forum hat meine vorige Nachricht leider irgendwie verschluckt, deshalb macht mein Nachtrag natürlich keinen Sinn mehr, da der Vortrag gar nicht mehr da ist :)
Ich hatte geschrieben, dass ich deine Idee für sehr gut halte und sie theoretisch auch gut funktionieren würde. Allerdings springt meine For Schleife wenn ich den Kopf "For i=Cells(Rows.Count, 1).End(xlUp)) to 2 step -2" verwende direkt nach dem ersten Durchlauf bei Next raus, da für i der Wert "leer" steht.
Gruß und vielen Dank
Jenkins

Anzeige
AW: immer wieder das gleiche.
04.12.2012 09:08:57
Jenkins
Okey, das Problem mit der Wertzuweisung für i in der For Schleife habe ich jetzt so gelöst:
For i = Sheets("Übersicht").Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -2
Allerdings überspringt die Schleife ständig mehrere Zeilen, sodass am Ende noch viel zu viele Zeilen übrig bleiben obwohl sie hätten gelöscht werden sollen. Er liest sie durch das Step -2 auch gar nicht ein, da der Zähler i dadurch die Zeilen überspringt.

AW: immer wieder das gleiche.
04.12.2012 10:06:41
Jenkins
Hallo zusammen,
Mir ist zu Andrés Lösungsansatz noch was aufgefallen:
Und zwar wirft er mir jedes mal einen Error 457 wenn ich einen neuen Satz Abteilungsnummer + Abteilungsname einlese. Dadurch sind natürlich auch richtige Datensätze betroffen und zwar immer genau die, die eben vorher noch nicht in die Collection eingelesen wurden. z.B. zwangsweise immer der erste Datensatz der eingelesen wird.
Gruß
Jenkins

Anzeige
AW: immer wieder das gleiche.
04.12.2012 14:14:53
Jenkins
Bei dem Code von Rudi besteht übrigens das gleiche Problem. Bisher habe ich noch keine Lösung bzw. Idee gefunden wie man dieses Fehler umgehen kann.

AW: immer wieder das gleiche.
04.12.2012 18:32:47
schauan
Hallo Jenkins,
sorry, da waren nun beim einfachen aufschreiben gleich 2 Fehler drin.
Mit dem fehlenden .Row hast Du richtig erkannt. Die Steps dürfen allerdings auch nur -1 sein.
Der Fehler 457 sollte nur dann ausgegeben werden, wenn der key schon vorhanden ist, also in dem Fall der zusammengesetzte String aus den beiden Zellen.
Wenn Du die Schleife damit von hinten durchgehst, dann bleibt, wie Du festgestellt hast, immer die letzte Zeile eines Keys erhalten und alle vorhergehenden werden gelöscht.
Ich hatte ja schon mal geschrieben, dass am Anfang das Thema Löschen nicht stand. Dann hatte ich vermutet, dass die Mehrfacheinträge auf einen reduziert werden sollen - und nun sollen alle Zeilen raus, die mehrfach vorkommen.
Rudis Ansatz ist da schon besser. Du musst dort nur statt = 1 größer 1 programmieren, ansonsten werden alle Datensätze gelöscht, die nur 1x vorkommen - und das sind ja die richtigen, hoffe ich jedenfalls.
In Rudis code werden in der Schleife alle Zeilen gesammelt, die in Spalte A mehrfach vorkommen. Die Prüfung ist ja klar, und das Sammeln geschieht in der Zeile mit dem union.
Zum Schluss werden die gesammelten Zeilen gelöscht.
Grüße, André
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige