VBA - doppelte Werte löschen - Bedingung
#1
Hallo zusammen,

ich habe eine Frage zur Umsetzung im VBA, und hoffe auf eure Hilfe.

Ich möchte über ein VBA Makro Einträge suchen, die den gleichen Status aufweisen (erledigt) und dann alle Zeilen bis auf eine löschen lassen. z.B. Für das löschen habe ich schon folgenden VBA Code gefunden: ---> soll hier z.B. 2 von 3 Aufträgen mit Status erledigt löschen

Auftragsnummer        Status           Datum
10                            offen            10.01.2017
10                            erledigt         11.01.2017
10                            erledigt         11.01.2017
10                            erledigt         11.01.2017


Option Explicit

Sub DoppelteNr()

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


Vielen Dank, Kirschgurke
Top
#2
Ist hier eine Abhängigkeit zur Auftragsnummer wichtig?
Soll es dann so aussehen?
Vorher:
Code:
AuftragsNr Status   Datum        
10         offen    10.01.2017
10         erledigt 11.01.2017
10         erledigt 11.01.2017
10         erledigt 11.01.2017
11         offen    12.01.2017
11         erledigt 11.01.2017
11         erledigt 11.01.2017

Nachher:
Code:
AuftragsNr Status   Datum        
10         offen    10.01.2017
10         erledigt 11.01.2017
11         offen    12.01.2017
11         erledigt 11.01.2017
Top
#3
Ja, genau so soll es aussehen. Sonst explodiert Exel nch :)
Top
#4
Hallo zusammen,

habe soweit folgenden VBA Code. Wie schaffe ich es, dass er einen Auftrag mit "erledigt" stehen lässt, nicht löscht, und nur alle anderen überflüssigen löscht?

Sub DoppelteNr()

Dim iRow As Integer, iRowL As Integer

iRowL = Cells(Cells.Rows.Count, 6).End(xlUp).Row
For iRow = iRowL To 1 Step -1
If WorksheetFunction.CountIf(Columns(6), Cells(iRow, 6)) > 1 Then
If Cells(iRow, 4) = "erledigt" Then
Rows(iRow).Delete
End If
End If
Next iRow
End Sub
Top
#5
Hier anbei die Lösung, wo man die Spalte, wo doppelte Werte vorkommen, definieren kann

Sub Loesche_DZeilen()
Dim temp
Dim i%, n%, ZSpalte%
Dim Zeilenzahl As Long
ZSpalte = 6 'F wird gezählt
Zeilenzahl = Sheets(1).Cells(Rows.Count, ZSpalte).End(xlUp).Row
For n = 2 To Zeilenzahl
temp = Sheets(1).Cells(n, ZSpalte).Value
For i = n To Zeilenzahl
m = Sheets(1).Cells(i + 1, ZSpalte).Value
Do While Sheets(1).Cells(i + 1, ZSpalte).Value = temp
Sheets(1).Cells(i + 1, ZSpalte).EntireRow.Delete
Zeilenzahl = Zeilenzahl - 1
Loop
Next i
Next n
End Sub
Top


Gehe zu:


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