Debian Geschrieben 9. August 2006 Geschrieben 9. August 2006 Hallo, ich habe keien Plan von vba aber ein Problem das ich von Hand fast nicht lösen kann. Ich habe eine Exceltabelle mit 3 Spalten "Nummer, Name, Vorname". Darunter sind etwa 8000 zeilen mit Personen aufgeführt, viele davon aber doppelt oder gar dreifach (sind durch die Nummer identifizierbar). Gibt es mit Visual Basci einen einfachen Weg die unnötigen Zeilen automatisiert zu löschen? (eventuell geht es auch in einer andere sprache, wie gesagt, ich bin unwissend) Zitieren
fi-newbie Geschrieben 9. August 2006 Geschrieben 9. August 2006 Hallo, ich weiß zwar nicht welche Excel-Version Du hast, aber ich erklärs mal anhand von Office 2007: Es gibt die Möglichkeit Duplikate zu entfernen. Zuerst müssen alle Spalten markiert werden. Klicke dann auf das Register "Daten" und dort auf "Duplikate entfernen". In dem sich dann öffnenden Fenster kan man die Salten auswählen, welche überprüft werden sollen. Wenn man mehrere auswählt, werden diese dann in Kombination miteinander geprüft. Hoffe, ich konnte Dir helfen. mfg newbie Zitieren
-roTekuGeL- Geschrieben 10. August 2006 Geschrieben 10. August 2006 dim persnr as string dim row as integer, row2 as integer row = 2 'header nicht mitnehmen row2 = 2 do while tabelle1.cells (row, 1) <> "" persnr = tabelle1.cells (row, 1) do while tabelle1.cells (row2, 1) <> "" if tabelle1.cells (row2, 1) = persnr then 'zeile löschen (kenn den befehl nich ausm kopf, zur not n makro aufzeichnen...) endif row2 = row2 + 1 enddo row = row + 1 enddo[/PHP] so sähe das IMHO in VB aus, müsstest du nur noch für deine zwecke anpassen ( die 1 in dem cells befehl steht für die spalte) er sucht also die personalnummer in den spalten durch und wenn doppelte dabei sind löscht er sie (der teil muss noch gemacht werden, sollte aber nur ein kleiner befehl sein...) ist aber nicht getestet und ich verweise mal auf die uhrzeit falls fehler drinstecken Zitieren
Dragon8 Geschrieben 10. August 2006 Geschrieben 10. August 2006 Befehl zum löschen der Zeile: Tabelle1.Rows(row2 & ":" & row2).Delete Shift:=xlUp Aber was mir noch aufgefallen ist, muss die zweite schleife, welche ja überprüft ob die in der ersten schleife aktuell makierte Pesonalnummer nochmal drin ist, nicht erst eine Zeile darunter anfangen? jetzt fangen sie ja beide bei der ersten Personalnummer an, die erste udn die zweite schleife. also überprüft die zweite schleife dann ja gleich die erste spalte und findet dann ja schon den ersten wert, der mit der zu erst makierten Personalnummer übereinstimmt und löscht ihn raus, was ja bestimmt nicht passieren soll. und das nächste, muss row2 nicht auch jedesmal wenn die erste schleife neu von vorne beginnt wieder zurück gesetzt werden? Dim persnr As String Dim row As Integer, row2 As Integer row = 2 'header nicht mitnehmen [COLOR="red"]row2 = row + 1[/COLOR] 'eins unter der ersten PerNr anfangen Do While Tabelle1.Cells(row, 1) <> "" persnr = Tabelle1.Cells(row, 1) [COLOR="Red"] row2 = row + 1[/COLOR] Do While Tabelle1.Cells(row2, 1) <> "" If Tabelle1.Cells(row2, 1) = persnr Then [COLOR="red"]Tabelle1.Rows(row2 & ":" & row2).Delete Shift:=xlUp[/COLOR] End If row2 = row2 + 1 enddo row = row + 1 enddo Alles rotmakierte habe ich geändert. Mit freundlichen Grüßen Dragon8 Zitieren
-roTekuGeL- Geschrieben 10. August 2006 Geschrieben 10. August 2006 @Dragon: vollkommen richtig sonst steht am ende gar nix mehr drin ich möchte nochmals auf die uhrzeit des posts verweisen *hust* Zitieren
Dragon8 Geschrieben 10. August 2006 Geschrieben 10. August 2006 Ja ist ja ok, hab ich ja gesehen, ich weiß garnicht wie man um die uhrzeit morgens schon arbeiten kann aber ich wollte ja nicht das der threadersteller nachher das ding durchlaufen lässt und ne leere liste vor sich sieht ^^ @Threadersteller; also den code hier Sub entfDuplikate() Dim persnr As String Dim row As Integer, row2 As Integer row = 2 'header nicht mitnehmen row2 = row + 1 'eins unter der ersten PerNr anfangen Do While Tabelle1.Cells(row, 1) <> "" persnr = Tabelle1.Cells(row, 1) row2 = row + 1 Do While Tabelle1.Cells(row2, 1) <> "" If Tabelle1.Cells(row2, 1) = persnr Then Tabelle1.Rows(row2 & ":" & row2).Delete Shift:=xlUp End If row2 = row2 + 1 enddo row = row + 1 enddo End Sub einfach bei dir im VB editor in Excel, zum beispiel in ein Modul, einfügen, und F5 drücken, die Daten müssen natürlich in der ersten Tabelle stehen, sonst klappt es nicht. Mit freundlichen Grüßen Dragon8 Zitieren
Debian Geschrieben 10. August 2006 Autor Geschrieben 10. August 2006 @newbie: Ich habe Word 2003 uns es wie filgt gelöst. http://www.pctipp.ch/helpdesk/kummerkasten/archiv/office/18791.asp @roTekuGel&Dragon: Werde diesen Lösungsweg demnächst auch ausprobieren. Danke euch beiden auf jeden Fall sehr Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.