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.
... 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.
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.
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
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