9k Aufrufe
Gefragt in Tabellenkalkulation von halfstone Profi (18.1k Punkte)
Hi,

wie kann ich mit Excel 2007 jede zweite Zeile löschen.

Es handelt sich um eine Auswertung von Daten bei der dieDaten leider doppelt erfasst werden, daher möchte ich jede zweite Zeile automatisch gelöscht haben.

Beispiel:

Erste Spalte:

ntldr
ntldr
usb 2.0
usb 2.0
usb 2.0
usb 2.0
festplatte
festplatte

daraus soll dann:

ntldr
usb 2.0
usb 2.0
festplatte

werden.

Es sind im Originalfile ca. 500 000 Datensätze und eine Reduzierung auf die Hälfte würde die weiteren Auswertungen sehr viel schneller machen.

Gruß und Danke schon mal

Fabian

6 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Fabian,

ich beziehe mich mal darauf was Du nebenbei erzählst.

Doppelte Löschen
angenommen Deine Daten stehen in A1 bis A????
Bereich markieren = Spalte A anklicken (evtl. eine Leerzeile vorher einfügen)
Daten / Filter / Spezialfilter
keine Duplikate
jetzt kannst du noch einstellen, ob an gleicher Stelle oder woanders placiert; hier also B1 eingeben
Spalte A anschließend löschen
Bei mehreren Spalten, muss die Liste eine Überschrift haben, am besten fett formatiert, dann erkennt sie auch Excel als Überschrift.

Gruß Hajo
0 Punkte
Beantwortet von mickey Experte (5.5k Punkte)
Hi. Microsoft hat dazu folgendes FAQ online gestellt - prüf an einer Testdatei ob das entsprechend funktioniert:

Löschen jeder zweiten Zeile in einem Excel-Arbeitsblatt:

1. Erstellen Sie eine neue Microsoft Excel-Arbeitsmappe.
2. Geben Sie im Zellbereich A1:A9 eines neuen Arbeitsblatts die Zahlen 1 bis 5 ein, wobei Sie nach jeder Eingabe jeweils die nächste Zeile frei lassen. Beispiel:


A1: 1
A2:
A3: 2
A4:
A5: 3
A6:
A7: 4
A8:
A9: 5


3. Zeigen Sie im Menü Extras auf Makro, und klicken Sie anschließend auf Visual Basic-Editor.

Hinweis: Klicken Sie in Microsoft Office Excel 2007 auf der Registerkarte Entwicklertools in der Gruppe Code auf Visual Basic.
4. Klicken Sie im Menü Einfügen auf Modul.
5. Geben Sie in das neue Modul das folgende Makro ein:


Sub Delete_Every_Other_Row()

' Dimension variables.
Y = False ' Change this to True if you want to
' delete rows 1, 3, 5, and so on.
I = 1
Set xRng = Selection

' Loop once for every row in the selection.
For xCounter = 1 To xRng.Rows.Count

' If Y is True, then...
If Y = True Then

' ...delete an entire row of cells.
xRng.Cells(I).EntireRow.Delete

' Otherwise...
Else

' ...increment I by one so we can cycle through range.
I = I + 1

End If

' If Y is True, make it False; if Y is False, make it True.
Y = Not Y

Next xCounter

End Sub


6. Wechseln Sie zu dem Arbeitsblatt mit den Daten, und markieren Sie anschließend den Zellbereich A1:A9.
7. Um das Makro auszuführen, zeigen Sie im Menü Extras auf Makro, und klicken Sie auf Makros.

Hinweis: Klicken Sie in Excel 2007 auf der Registerkarte Entwicklertools in der Gruppe Code auf Makros.

Hinweis: Um die Registerkarte Entwicklertools in der Multifunktionsleiste anzuzeigen, klicken Sie auf die Microsoft Office-Schaltfläche, klicken Sie auf Excel-Optionen, klicken Sie auf die Kategorie Häufig verwendet, aktivieren Sie das Kontrollkästchen Entwicklerregisterkarte in der Multifunktionsleiste anzeigen, und klicken Sie anschließend auf OK.
8. Wählen Sie das Makro Delete_Every_Other_Row aus. Klicken Sie danach auf Ausführen.

Dieses Makro löscht jede zweite Zeile, beginnend mit der zweiten Zeile des markierten Bereichs.

Hinweis: Bei einer Liste, die Daten in mehreren Spalten enthält, markieren Sie nur die erste Spalte, und führen Sie das Makro anschließend aus.


Gruß,
Mic

[sup]Bei Eingriffen ins System, die Registry oder Dateien erst eine Sicherung vornehmen©[/sup]
0 Punkte
Beantwortet von halfstone Profi (18.1k Punkte)
Hi,

das Teil von Microsoft hab ich auch schon gefunden, Danke das funktioniert auch, wenn es noch rechnet aber ich denke es macht genau das was ich brauche.

Hi Hajo,

Danke auch für deine Hilfe, aber alle Doppelten wollte ich nicht rausfiltern, ich brauche wirklich nur die Funktion, die völlig dumm jede zweite Zeile löscht, Doppelte sollen weiterhin erhalten bleiben da ich genau das auswerten muss.

Danke auch an dich.

Was ich noch ergänzen muss, Antworten im Minutentakt bei gefühlten 50 Grad Temperatur finde ich ja wieder geil ;-)
Schneller bekommt man wohl nirgens Hilfe.

Gruß Fabian
0 Punkte
Beantwortet von
Hi Fabian,
Antworten im Minutentakt bei gefühlten 50 Grad Temperatur finde ich ja wieder geil ;-)
Schneller bekommt man wohl nirgens Hilfe.

liegt vielleicht am Fragenden?? ;-)

Trotzdem viel Spaß beim Endspiel da nun unbelastet zugeschaut werden kann.
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all :-)

alternativ und um einiges schneller :-))

hilfsspalte(händich oder per makro befuellen)
ISTGERADE(ZEILE(ZELLE))

autofilter mit criterium true auf der hilfsspalte

mit einem rutsch wird nun geloescht

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all :-)

das koennte dann so aussehen :-)

gruss nighty

Option Explicit

Sub Jede2Zeile()
Dim DeineHilfsSpalte As Long
Dim LetzteZeileSpA As Long
With ActiveSheet
LetzteZeileSpA = .Cells(Rows.Count, 1).End(xlUp).Row
DeineHilfsSpalte = 4 'der index deiner hilfsspalte
.Range(.Cells(2, DeineHilfsSpalte), .Cells(LetzteZeileSpA, DeineHilfsSpalte)).FormulaR1C1 = "=ISTGERADE(ROW(RC[-2]))"
.Cells(1, DeineHilfsSpalte).AutoFilter Field:=1, Criteria1:=True
.Rows("2:" & LetzteZeileSpA).Delete Shift:=xlUp
.Cells(1, DeineHilfsSpalte).AutoFilter
End With
End Sub
...