Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
928to932
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
928to932
928to932
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Auf Select verzichten?

Auf Select verzichten?
26.11.2007 17:26:22
Rolf
Hallo Excelprofis,
folgendes Makro sortiert die Daten in Spalte "B" ab Zeile "10"
und löscht alle Zeilen mit doppelten Einträgen ab Zeile "10".
Ist es möglich auf "Select" zu verzichten?

Sub Sortieren_löschen()
Dim wks1 As Worksheet
Set wks1 = Worksheets("Tabelle2")
'Bereich "B10:B200" sortieren
wks1.Select               'Auf "Select" verzichten?
Range("B10:B200").Select  'Auf "Select" verzichten?
Selection.Sort Key1:=Range("B10"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("B10").Select
'Doppelten Datensätze löschen
Dim i As Long
i = 10
Do Until IsEmpty(Cells(i, 2).Value)
If Cells(i, 2).Value = Cells(i + 1, 2).Value Then
Cells(i, 2).EntireRow.Delete
Else
i = i + 1
End If
Loop
End Sub


Vielen Dank im voraus
Rolf

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Auf Select verzichten?
26.11.2007 17:31:46
Hajo_Zi
Hallo Rolf,
Witht WKS1
.Range("B10:B200").Sort Key1:=.Range("B10"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
end With
' Range("B10").Select

AW: Auf Select verzichten?
26.11.2007 17:32:47
Matthias
Hallo
schon so mal probiert?
wks1.Range("B10:B200").Sort Key1:=Range("B10"), Order1:=xlAscending, ...


Userbild

Anzeige
AW: Auf Select verzichten?
26.11.2007 17:34:00
Hajo_Zi
Hallo Mathias,
es fehlt WKS1. vor Range("B10")
Gruß Hajo

hatte ich glatt übersehen. Danke ___oT
26.11.2007 17:47:33
Matthias

AW: hatte ich glatt übersehen. Danke ___oT
26.11.2007 18:10:00
Rolf
Hallo Hajo und Matthias,
ich habe beide Versionen von Euch getestet.
Beide funktionieren.
Vielen Dank an Euch
Gruß Rolf

AW: hatte ich glatt übersehen. Danke ___oT
26.11.2007 18:23:36
Hajo_Zi
Hallo Rolf,
das ist nicht ganz korrekt. Matthias seine Variante geht nur, wenn die Tabelle die sortiert wird aktiv ist. Wenn das immer so ist hätte man sich den Teil mit WKS1 sparen können.
Gruß Hajo

Anzeige
Der Einspruch war schon korrekt ;o)
26.11.2007 18:45:29
Matthias
Hallo Rolf
Hajo hat da schon berechtigt Einwand angemeldet! :o)
wks1.Range("B10:B200").Sort Key1:=wks1.Range("B10"), Order1:=xlAscending, ...
Userbild

AW: Der Einspruch war schon korrekt ;o)
26.11.2007 19:12:00
Rolf
Hallo Excelprofis,
ich habe jetzt doch festgestellt, daß das nicht alles funktioniert.
Und zwar das Löschen der doppelten Einträge.
Ich habe die Makroerweiterung von Hajo eingebaut.
Zur Info: die Tabelle2 ist nicht aktiv
Hier noch mal das Makro

Sub Sortieren_löschen()
Dim wks1 As Worksheet
Set wks1 = Worksheets("Tabelle2")
'Bereich "B10:B200" sortieren
With wks1
.Range("B10:B200").Sort Key1:=.Range("B10"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End With
'Doppelten Datensätze löschen funktionieren nicht
Dim i As Long
i = 10
Do Until IsEmpty(Cells(i, 2).Value)
If Cells(i, 2).Value = Cells(i + 1, 2).Value Then
Cells(i, 2).EntireRow.Delete
Else
i = i + 1
End If
Loop
End Sub


Vielen Dank im voraus
Gruß Rolf

Anzeige
AW: Doppelte löschen
26.11.2007 19:19:04
Hajo_Zi
Hallo Rolf,
um das löschen der Zeilen habe ich mich nicht gekümmert. Dazu hätte man ja die Datei nachbauen müssen um das zu testen. Ich habe das Problem nicht, warum sollte ich die Datei löschen.
Löschen der Zeilen sollte man vom letzten Datensatz zum ersten Datensatz machen, ist erheblich einfacher.
Gruß Hajo

AW: Doppelte löschen
26.11.2007 19:48:00
Rolf
Hallo Hajo,
das Makro funktioniert inzwischen.
Deine Idee: Löschen der Zeilen sollte man vom letzten Datensatz zum ersten Datensatz machen.
Vieleicht hast du ein Makrobeispiel, da ich nicht so fit in Makros bin.
Noch einmal vielen Dank
Gruß Rolf

Anzeige
AW: Doppelte löschen
26.11.2007 19:51:00
Hajo_Zi
Halo Rolf,
da gibt es bestimmt schon zig im Archiv. Hier mal ein nicht aktuellles.

Sub löschen()
‘   mit bestimmten Datum löschen
Dim I As Long
Dim Letzte As Long
If [a65536] = "" Then
Letzte = [a65536].End(xlUp).Row
Else
Letzte = 65536
End If
On Error Resume Next
For I = Letzte To 1 Step -1
If IsDate(Cells(I, 1)) Then
If CDate(Cells(I, 1)) = CDate("23.12.89") Then Rows(I).Delete
End If
Next
End Sub


Gruß Hajo

AW: Doppelte löschen
27.11.2007 09:07:41
Rolf
Hallo Hajo und Daniel,
ich habe mir beide Makros angesehen und bin dabei sie zu verstehen.
Vielen Dank an Euch
Gruß Rolf

Anzeige
AW: Doppelte löschen
27.11.2007 00:07:14
Daniel
Hi
kleiner Tip:
Doppelte Datensätze löscht man nicht mit einer Schleife, einfach weils viel zu lange dauert.
wesentlich effektiver ist folgender Ansatz:
- Hilfsspalte mit formel einfügen, die bei den zu löschenden Daten einen Wahrheitswert einträge, und bei den Daten, die stehenbleiben sollen, die Zeilen-Nummer
- in dieser Hilfsspalte Formeln durch Werte ersetzen
- Tabelle nach Hilfsspalte sortieren
- über die Funktion BEARBEITEN - GEHE ZU - INHALTE - KONSTANTEN - WAHRHEITSWERTE (in VBA SpeicalCells(xlcelltypeconstants, 4)) die zu löschenden Zeilen selektiern und löschen.
Bei grossen Datenmengen gehts das auch von Hand schneller als ein Makro mit schleife.
ein codebeispiel:

Sub Doppelte_Löschen()
'gilt für sortierte Werte in Spalte A im aktiven Sheet
Range("A:A").Insert
With Range("A2:A1000") 'Zellbereich entsprechend anpassen
.FormulaR1C1 = "=if(R[-1]C[1] = RC[1],true,row())"
.Formula = .Value
.EntireRow.Sort key1:=Range("A2"), order1:=xlAscending, header:=xlNo
.SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete
.EntireColumn.Delete
End With
End Sub


Gruß, Daniel

Anzeige
AW: Der Einspruch war schon korrekt ;o)
26.11.2007 19:31:51
Rolf
Hallo Excelprofis,
ich habe das Löschen der doppelten Einträge gelöst.
Hier zur Info das komplette Makro:

Sub Sortieren_löschen()
Dim wks1 As Worksheet
Set wks1 = Worksheets("Tabelle2")
'Bereich "B10:B200" sortieren
With wks1
.Range("B10:B200").Sort Key1:=wks1.Range("B10"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End With
'Doppelten Datensätze löschen
Dim i As Long
i = 10
Do Until IsEmpty(wks1.Cells(i, 2).Value)
If wks1.Cells(i, 2).Value = wks1.Cells(i + 1, 2).Value Then
wks1.Cells(i, 2).EntireRow.Delete
Else
i = i + 1
End If
Loop
End Sub


Noch einmal vielen Dank
Gruß Rolf

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige