Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1588to1592
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

VBA Doppelte Zellinhalte löschen (nicht Duplikate)

VBA Doppelte Zellinhalte löschen (nicht Duplikate)
06.11.2017 15:53:43
Jörg
Hallo Forum,
ich möchte doppelte Zellinhalte löschen - nicht Duplikate entfernen - d.h. die Zeile soll weiterhin stehen bleiben.
Bsp. In Spalte A steht untereinander A, B, C, D
in Spalte B steht untereinander 1,1,2,2,
Gewünschtes Ergebnis ist A,B,C,D und 1, , 2, ,
DAnke für Eure Hilfe, ciao Jörg

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Doppelte Zellinhalte löschen (nicht Duplikate)
06.11.2017 16:01:29
ChrisL
Hi Jörg
z.B.
Sub t()
Dim lngZeile As Long
Application.ScreenUpdating = False
For lngZeile = 1 To Cells(Rows.Count, 2).End(xlUp).Row
If WorksheetFunction.CountIf(Range("B1:B" & lngZeile), Cells(lngZeile, 2)) > 1 Then _
Cells(lngZeile, 2).ClearContents
Next lngZeile
End Sub
Falls die Laufzeit zu lang ist, könnte man noch optimieren.
cu
Chris
AW: VBA Doppelte Zellinhalte löschen
06.11.2017 16:18:48
Jörg
Hallo Chris,
hab es gerade laufen lassen, es funktioniert, aber ich must abbrechen aufgrund der Laufzeit - es sind über 5.000 Datensätze...
Welche Optimierung ist denn noch möglich.
Hilft der Hinweis, daß die Spalte B sortiert ist und man daher nur mit den nachfolgenden vergleichen muss bis ein neuer Wert auftaucht?
Danke, ciao Jörg
Anzeige
AW: VBA Doppelte Zellinhalte löschen
06.11.2017 16:27:23
ChrisL
Hi Jörg
Dann probiere mal so...
Sub t()
Dim lngZeile As Long, rngBereich As Range, arrBereich As Variant
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With ActiveSheet
Set rngBereich = .Range("B1:B" & .Cells(Rows.Count, 2).End(xlUp).Row)
arrBereich = Application.Transpose(rngBereich)
For lngZeile = UBound(arrBereich) To LBound(arrBereich) + 1 Step -1
If arrBereich(lngZeile) = arrBereich(lngZeile - 1) Then _
arrBereich(lngZeile) = ""
Next lngZeile
rngBereich = Application.Transpose(arrBereich)
End With
Application.Calculation = xlCalculationAutomatic
End Sub

cu
Chris
Anzeige
AW: VBA Doppelte Zellinhalte löschen
06.11.2017 16:35:01
Jörg
super, das wars.
Danke!
AW: VBA Doppelte Zellinhalte löschen
06.11.2017 16:15:45
Daniel
Hi
ohne Makro so:
in Zelle C2 die Formel: =Wenn(B2=B1;"x";"")
Formel bis zum Tabellenende runter ziehen
in Spalte C nach "x" filtern in die Werte in Spalte B löschen
(in gefilterten Tabellen werden nur die sichtbaren Zeilen bearbeitet)
Gruß Daniel
AW: VBA Doppelte Zellinhalte löschen
06.11.2017 16:30:26
Jörg
Hallo DAniel,
DAnke für den Tip, aber ich wollte es per VBA ohne Formel/Hilfsspalte löschen - hatte ich vergessen zu schreiben.
Ciao Jörg
AW: VBA Doppelte Zellinhalte löschen
06.11.2017 17:09:28
Daniel
Hi
Regel nummer 1:
alles was man in Excel von Hand machen kann, kann man auch per Makro ausführen lassen.
Somit ist jede Lösung ohne Makro immer auch eine Makrolösung (der Recorder hilft beim Programmieren)
Regel nummer 2:
Wenn man das Problem mit einem Makro löst, sollte man keine Scheu vor Hilfsspalten haben (sofern sich das Problem damit sinnvoll lösen lässt).
diese lassen sich per Makro einfügen und auch per Makro wieder löschen, ohne das jemand das mitbekommt.
für die Lösung dieses Problems per Makro würde ich es allerdings etwas anders machen:
1. kennzeichne die zu löschenden Zellen nicht mit dem Text "x", sondern mit der Zahl 1
2. selektiere die markierten Zellen nicht mit dem Autofilter, sondern mit der Funktion START - BEARBEITEN - SUCHEN UND AUSWÄHLEN - INHALTE - FORMELN - ZAHLEN
3. lösche die Inhalte aller Zellen links von den selekiteren (diesen Schritt kannst du nicht von Hand, sondern nur per Makro machen)
With ActiveSheet.Usedrange
With .Columns(.Columns.count)
with .Offset(1, 1).resize(.Rows.count - 1)
.FormulaR1C1 = "=IF(RC2=R[-1]C2,1,"""")
IF Worksheetfunction.Sum(.Cells) > 0 Then
Intersect(Columns(2), .SpecialCells(xlcelltypeformulas, 1).EntireRow). _
ClearContents
end if
.ClearContents
end with
end with
end with
Gruß Daniel
Gruß Daniel
Anzeige

322 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige