Zum Inhalt springen

Doppelte Zeilen in Excel löschen


Debian

Empfohlene Beiträge

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)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ;):D

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...