Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1228to1232
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

Doppelte löschen VBA Bereich erweitern??

Doppelte löschen VBA Bereich erweitern?
Marcy
Hallo zusammen,
ich bekomme es einfach nicht hin, dass doppelte in Spalte A erst ab Zeile 25 gesucht und ggf. gelöscht werden.
Könnte mir jemand den VBA so anpassen, dass er erst ab Zeile 25 arbeitet?

Sub DblFind()
Dim iRow As Integer, iRowL As Integer
iRowL = Cells(Cells.Rows.Count, 1).End(xlUp).Row
For iRow = iRowL To 1 Step -1
If WorksheetFunction.CountIf(Columns(1), Cells(iRow, 1)) > 1 Then
Rows(iRow).Delete
End If
Next iRow
End Sub

Gruß Marcy
For iRow = iRowL To 26 Step -1
29.09.2011 08:00:51
Matthias
Hallo
Du machst den Fehler hier:
For iRow = iRowL To 1 Step -1
Du mußt auch prüfen, ob iRow>25 ist.

Option Explicit
Sub DblFind()
Dim iRow As Integer, iRowL As Integer
On Error GoTo ErrExit
iRowL = Cells(Cells.Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
If iRowL > 25 Then
For iRow = iRowL To 26 Step -1
If WorksheetFunction.CountIf(Columns(1), Cells(iRow, 1)) > 1 Then
Rows(iRow).Delete
End If
Next iRow
End If
ErrExit:
Application.ScreenUpdating = True
End Sub
Gruß Matthias
AW: Doppelte löschen VBA Bereich erweitern?
29.09.2011 08:25:26
Marcy
Danke Matthias,
löschen tut er nun ab 25. Das ist gut.
Er soll aber auch erst ab 25 suchen.
Da fehlt doch sicher hier etwas, oder?
iRowL = Cells(Cells.Rows.Count, 1).End(xlUp).Row
Habe (For iRow =) ersetzt.
Wenn jetzt über Zeile 25 ein Eintrag steht, der auch unter Zeile 24 vorkommt, wird er beim Ausführen des VBA unter Zeile 24 gelöscht :-(.
Marcy
Anzeige
kann ich nicht nachvollziehen
29.09.2011 09:15:24
Matthias
Hallo
Bei mir wird nur unter Zeile25 gelöscht.
https://www.herber.de/bbs/user/76800.xls
Vielleicht hab ich Dich auch falsch verstanden
Gruß Matthias
AW: kann ich nicht nachvollziehen
29.09.2011 09:21:23
Marcy
Ja ist richtig mit dem LÖSCHEN, aber...
schreibe z.B. in Zelle A10 eine 1
Schreibe eine 1 auch unterhalb Zeile 24.
Nach Ausführung des VBA ist keine 1 mehr unterhalb Zeile 24 zu finden. Die ist weg, die in Zelle A10 bleibt.
Deine Ergänzung macht zwar was sie soll, aber mir fehlt, dass erst AB ZEILE 25 nach Doppelten gesucht wird.
Gesucht: Suche ab Zeile 25 nach Doppelten und lösche diese (ab Zeile 25)
FALSCH: NICHT SCHON AB ZEILE 1 SUCHEN UND AB ZEILE 25 LÖSCHEN.
Hoffe habe es jetzt besser rüber gebracht.
Marcy
Anzeige
CountIf(Range(Cells(26, 1), Cells(iRowL, 1))) owT
29.09.2011 09:28:26
Reinhard


neuer Versuch
29.09.2011 09:39:04
Matthias
Hallo
so?

Option Explicit
Sub DblFind()
Dim iRow As Integer, iRowL As Integer
On Error GoTo ErrExit
iRowL = Cells(Cells.Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
If iRowL > 25 Then
For iRow = iRowL To 25 Step -1
If WorksheetFunction.CountIf(Range("A25:A" & iRowL), Cells(iRow, 1)) > 1 Then
Rows(iRow).Delete
End If
Next iRow
End If
ErrExit:
Application.ScreenUpdating = True
End Sub
Gruß Matthias
ne, nicht so, sondern genau so :-) danke
29.09.2011 12:57:27
Marcy
danke
Problem gelöst.
Gruß Marcy
AW: Doppelte löschen VBA Bereich erweitern?
29.09.2011 14:03:44
Reinhard
Hallo Marcy,
die ganze Arbeit hat ja Matthias gemacht ich hab mich nur kurz eingemischt.
Ich erwähne jetzt nur noch Kleinigkeiten, die kannst du umsetzen oder nicht aber evtl. hilfreich zum Lernen/Verstehen u.ä.
Du deklarierst so
Dim iRow As Integer, iRowL As Integer
Ich hätte das so gemacht:
Dim lngRow As Long, lngRowL As Long
Drei Gründe warum ich das tue.
Quien sabe, vielleicht explodiert im Lauf der Zeit da die Spalte A und es sind 50.000 Zellen in ihr, dann ist Integer zu klein und es gibt einen Fehler.
Deine Integerdeklaration wird sowieso in Long umgewandelt wenn du sie in Cells(r,c) einfügst.
Geb hier oben links bei Schnellsuche ein
Wort zum Sonntag
da wird das erklärt warum und wieso.
Der dritte und für mich an sich der Hauptgrund warum ich Zeilen UND Spaltenvariablen immer als long deklariere ist, das ist einfach zu merken, funktioniert immer und ich muß nicht immer sinnloser Weise genau überlegen nehme ich jetzt Integer oder Long.
Ich nehme in beiden Fällen immer Long und feddisch :-)
Zum Lösungscode von matthias. Als ich da meinen kleinen Beitrag in der Beitragsfolge leistete fiel mir
auf daß mir persönlich sehr unklar war was genau du meinst.
Ich nehme mal die Aussage "ab zeile 25". Was genau bedeutet das denn?
Angenommen die Liste geht bis A50. Bedeutet das A25:A50 soll auf Doppelte geprüft werden ODER A26:A50?
Zur Prüfschleife, egal ob A25 oder A26 die oberste zu prüfende Zelle ist, es ist sinnlos diese auf "Dopplete" zu prüfen denn die wurden schon vorher in der Schleife abgemurkst :-)
Also muß die Prüfschleife nur zurück bis auf A26 oder A27 laufen.
Nochmals, der Code wird auch so klappen auch wenn du nichts von dem was ich sage umsetzt.
Wenn du aber Vba erlernen willst wäre es für dich schon interessant versuchen zu verstehen was ich da schrieb.
Gruß
Reinhard
Anzeige
@Matthias und Reinhard
29.09.2011 14:29:09
Marcy
Natürlich galt der Dank beiden.
Sorry Matthias, falls Du es verstanden hast wie Reinhard.
@Reinhard, natürlich bin ich immer gewollt, das ganze zu verstehen.
Denn derzeit baue ich es mir immer aus verschiedenen Sachen zusammen, verstehe dabei aber meist nur wenig, was ich genau tue :-)
Von daher danke für die Ausführliche Erklärung, die sicher nicht nur mir ein Stück weiter hilft.
Gruß Marcy
AW: @Matthias und Reinhard
29.09.2011 16:25:58
Reinhard
Hallo Marcy,
"Denn derzeit baue ich es mir immer aus verschiedenen Sachen zusammen, verstehe dabei aber meist nur wenig, was ich genau tue "
Normaler Verlauf, so habe ich auch angefangen bzw. bin immer noch dabei dies zu tun :-)
Gruß
Reinhard
Anzeige
habe fertig, jetzt macht der Blattschutz alles weg
30.09.2011 11:59:25
Marcy
Das gibt es doch nicht.
habe alles fertig, läuft prima mit den mit VBA belegten Textfeldern.
Mit der Tabelle sollen Excel unerfahrene Mitarbeiter, Lagerortslisten erstellen.
In der Tab sind aber nur bestimmte Zellen freigegeben, damit nicht ausversehen die Hilfspalten mit den ganzen Formeln überschrieben oder gelöscht werden.
Nach Belegung mit Passwort und drücken eines Buttons, entsteht nun ein Fehler.
Sch...., was nun?
Aufgabe: Die mit Makros belegten Buttons (Textfelder) sollen auch mit Blattschutz funktionieren.
Über Hilfe bin ich wie immer sehr dankbar
Marcy
Anzeige
dann entferne vorher den Blattschutz
30.09.2011 12:14:16
Matthias
Hallo

DeineTabelle.Unprotect "123" 'Blattschutz aufheben
' hier Dein Code
DeineTabelle.Protect "123"
'Blattschutz wieder setzen
wobei hier 123 das Passwort ist.
DeineTabelle mußt Du anpassen
Beispiel:
https://www.herber.de/bbs/user/76813.xls
Gruß Matthias
Du bist der BESTE
30.09.2011 13:01:37
Marcy
Top,
habe unprotectet über jedes VBA gesetzt
und protect unter jedes VBA.
In meine Blatt gibt es nämlich rund 2700 freie Zellen die beschrieben werden dürfen.
Ich gehe jetzt mal davon aus, dass ich durch meine Änderung nun erst den Blattschutz aufhebe und zum Ende er wieder gesetzt wird.
Klappt in jedem Fall.
Vielen DANK dafür
Marcy
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige