Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Zeilen automatisch markieren/löschen, wenn bestimmte Bedingung erfüllt ist
#1
Hallo!

Ich habe in einer Tabelle in Spalte B folgende Daten (Tabelle hat viele Spalten):

CA167
CA1670R
CA1671
CA1671R
CA1672
CA1672R
CA1673
CA1673R
CA1674R
CA167R
CA168

Wenn eine Nummer mit einem Suffix versehen ist, aber bereits die Grundnummer existiert, dann soll die komplette Zeile der Suffix-Nummer gelöscht werden.
Somit würde sich Folgendes ergeben:

CA167
CA1670R
CA1671
CA1672
CA1673
CA1674R
CA168

Da die ein großer manueller Aufwand ist, hier die Frage, ob jemand eine Idee hat, wie man dies vereinfachen oder automatisieren kann.

Schon jetzt vielen Dank für jede Anregung.

Viele Grüße
pantens
Antworten Top
#2
Hi,

anbei eine Versuch

Code:
Option Explicit

Sub stantiv()
Dim objF As Object, i As Long, rng_Big As Range, str_firstMatch As String
For i = 1 To Cells(Rows.Count, 2).End(xlUp).Row
    If Right(Cells(i, 2).Value, 1) <> "R" Then
        Set objF = Columns(2).Find(Cells(i, 2).Value & "R", lookat:=xlWhole)
        If Not objF Is Nothing Then
            str_firstMatch = objF.Address
            Do
                If rng_Big Is Nothing Then
                    Set rng_Big = objF
                Else
                    Set rng_Big = Union(rng_Big, objF)
                End If
            Loop While Not objF Is Nothing And str_firstMatch <> objF.Address
           Set objF = Nothing
        End If
    End If
Next
If Not rng_Big Is Nothing Then rng_Big.Delete
End Sub
lg Chris
Feedback nicht vergessen.
[Bild: v.gif]
3a2920576572206973742064656e20646120736f206e65756769657269672e
Antworten Top
#3
Hallo Chris-Ka!

Zunächst einmal vielen Dank für die schnelle Antwort. Leider hilft mir das nicht, da ich nicht weiß, was ich damit machen muss.
Soll ich ein Spalte C einfügen und diesen Text in jede Zelle eingegeben?

Viele Grüße,
pantens

PS: Das Katzenbild ist ja Klasse!
Antworten Top
#4
Hi,

^^
Zitat:Soll ich ein Spalte C einfügen und diesen Text in jede Zelle eingegeben?

nein :)

Öffne deine Mappe -> drücke Alt+F11
gehe auf Menü Einfügen -> Modul
kopiere meinen Code dort hinein
Schließe das Fenster
wechsle auf das Blatt wo in Spalte B deine Daten stehen -> drücke Alt+F8 -> wähle "stantiv" aus -> klicke auf Ausführen.
fertig :)
lg Chris
Feedback nicht vergessen.
[Bild: v.gif]
3a2920576572206973742064656e20646120736f206e65756769657269672e
Antworten Top
#5
Hallo zusammen,

ich habe vor kurzem gelernt, dass man so etwas schneller mit Formeln lösen kann, deshalb hier eine Variante mit Formeln in der Hilfsspalte C:

Code:
Option Explicit

Sub doppelte_löschen()
   Dim lngZ As Long
   lngZ = Cells(Rows.Count, 2).End(xlUp).Row
   Range("C2:C" & lngZ).FormulaLocal = "=WENN(RECHTS(B2;1)=" & """" & "R" & """" & ";WENN(ZÄHLENWENN($B$2:B2;LINKS(B2;LÄNGE(B2)-1))>0;1;" & """""" & ");" & """""" & ")"
   On Error Resume Next 'falls keine doppelten kommt ds sonst zum Fehler
   Range("C2:C" & lngZ).SpecialCells(xlCellTypeFormulas, 1).EntireRow.Delete
   Range("C2:C" & lngZ).Clear
End Sub

Der Code gehört in das Code Modul der Tabelle mit den Werten.
Rechtsklick auf den Tabellenreiter und im sich öffnenden Kontextmenü "Code auswählen" anklicken.
Im sich öffnenden Fenster den Code einkopieren und so ausführen wie Chris es beschrieben hat.

Wie gesagt, der Code schreibt in Spalte C Formeln rein. Sollte die belegt sein, kannst Du auch jede andere Spalte nutzen.
Dazu im Code überall in diesem Ausdruck:
Range("C2:C" & lngZ)

den Buchstaben C (rot markiert) mit dem von Dir gewünschten Spaltenbuchstaben ersetzen.

Außerdem gehe ich davon aus, dass Deine Daten Ab Zeile 2 vorliegen.
Gruß Atilla
Antworten Top
#6
Ihr seid SPITZE!!! Hut ab.

Vielen, vielen Dank. Bei 30000 Zeilen ist das eine richtige Zeitersparnis.

Viele Grüße & ein schönes WE
pantens
Antworten Top
#7
Hallo,

mich würde schon interessieren, welche Version Du nutzt, denn sie führen nicht immer zum selben Ergebnis.
Gruß Atilla
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste