Clever-Excel-Forum

Normale Version: Dopplungen Spalten-übergreifend leeren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Liebes Clever-Excel-Forum,

ich suche nach einer Lösung für eine Aufgabe, die ein Makro per Button übernehmen soll.

Es geht darum, dass das Makro alle Zellen von Spalte A mit den Zellen von Spalte B vergleichen soll und wenn es zwischen den beiden Spalten Dopplungen gibt, dann sollen nur die doppelten Einträge aus Spalte A geleert werden.
ACHTUNG: die Zellen sollen nicht gelöscht oder verschoben werden, der Inhalt soll nur geleert werden.

Bis jetzt habe ich dafür leider noch keine Lösung gefunden, ich hoffe ihr könnt mir helfen.

Beispiele: [attachment=26746]
Hallo,

Zitat: BS_01.xlsx (Größe: 12,43 KB 

... eine Datei mit einem Makro die die Endung *.xlsx hat, kann schon mal nicht funktionieren,
weil diese Datei nicht damit umgehen kann. Speichere sie mit der Endung *.xlsm oder *.xlsb.
Eine *.xlsx-Datei schubst Makros einfach ohne Vorwarnung in den Datenhimmel.

Da die von Dir hier vorgestellte Datei aus den oben genannten Gründen kein Makro hat, spare
ich mir den Download und das Ansehen.
Hallo,

so wie Du es schreibst (die rot markierte Zellen in Spalte A: "SOLL GELEERT WERDEN, ABER NICHT GELÖSCHT") kann mit einer bedingten Formatierung ganz ohne VBA gelöst werden.

Dazu markiere A4:A## und dann aktiviere bedingte Formatierung und gib folgende Formel ein:

Code:
=ZÄHLENWENN($B:$B;A4)>0

und weise als Format: das benutzerdefiniertes Zahlenformat
Code:
;;;

zu.

Bei Bedarf  lassen sich mit der Betätigung einer "Schaltfläche" oder auch anders (z.B. Dropdownzelle) sowie einer kleinen Erweiterung der Formel die Zahlen in diesen Zellen auch leicht wieder ein- und ausblenden.
Hallo

ich denke das kleine Programm ist genau das was du suchst ....

mfg Gast 123
Vielen Dank GAST 123 das hat mir jetzt schon sehr weitergeholfen.[url=https://www.clever-excel-forum.de/User-Gast-123][/url]

Zitat von Gast 123:

-----

Sub doppelte_löschen()
Dim AC As Range, lzA As Long
Dim AB As Range, lzB As Long
lzA = Cells(Rows.Count, 1).End(xlUp).Row
lzB = Cells(Rows.Count, 2).End(xlUp).Row

For Each AC In Range("A4:A" & lzA)
   For Each AB In Range("B4:B" & lzB)
      If AB.Value = AC.Value Then
         AC.Value = Empty
      End If
   Next AB
Next AC
End Sub

-------

jetzt ist allerdings meine Frage, wie kann ich beispielsweise alles um eine Spalte Verschieben.
Also das nicht A mit B abgeglichen werden, sondern B mit C und das statt A dann natürlich B geleert wird?

---

Ich habe das mal so versucht, es will aber noch nicht ganz:

Sub doppelte_löschen()
Dim AC As Range, lzB As Long
Dim AB As Range, lzC As Long
lzB = Cells(Rows.Count, 1).End(xlUp).Row
lzC = Cells(Rows.Count, 2).End(xlUp).Row

For Each AC In Range("B4:A" & lzB)
   For Each AB In Range("C4:B" & lzC)
      If AB.Value = AC.Value Then
         AC.Value = Empty
      End If
   Next AB
Next AC
End Sub


--
oder anders gesagt was bedeutet AC und AB ^
Hallo 

freut mich das meine Lösung angekommen ist. Du hast es auch fast geschafft den Code umzuschreiben, aber achte bitte auf die genauen Details!!  Kleine Flüchtigkeits Fehler, wie sie auch mir immer noch passieren. Variable lzB + lzC musst du dann auch auf die Spalten B+C umschreiben, standen noch auf A+B. Und im Rang auch beides auf "B" und "C" aendern, sonst stimmt der Bereich nicht! Schaue es dir bitte im korriegierten Code genau an.

AC + AB sind Objekt Variable, als Range deklariert. For Each bedeutet das jede Zelle in diesem Bereich angesprochen wird. AC ist meine Standard Abkürzung für ActıveCell. Und AB fiel mir gerade so ein. Du kannst dir jeden beliebigen anderen Text ausdenken, ausser VBA Befehle!! Das gibt dann Querelen mit Excel.

mfg Gast 123

Code:
Sub doppelte_löschen()
Dim AC As Range, lzB As Long
Dim AB As Range, lzC As Long
lzB = Cells(Rows.Count, 2).End(xlUp).Row
lzC = Cells(Rows.Count, 3).End(xlUp).Row

For Each AC In Range("B4:B" & lzB)
  For Each AB In Range("C4:C" & lzC)
     If AB.Value = AC.Value Then
        AC.Value = Empty
     End If
  Next AB
Next AC
End Sub