Registriert seit: 28.03.2020
Version(en): Office 365
16.02.2021, 14:42
(Dieser Beitrag wurde zuletzt bearbeitet: 16.02.2021, 15:08 von Glausius.)
Liebe Excel-Experten, ich habe bei euch schon einmal eine tolle Unterstützung bekommen und versuche es noch einmal mit einem anderen Problem: Ich komme leider mit meinem Makro nicht voran. Ich habe eine Liste mit drei Spalten:
A|B|C 1|--|d 2|--|d 3|e|t 4|--|d
"--" heißt: leere Zelle
Ich möchte per Makro automatisieren, dass der Inhalt "d" in allen drei Zeilen nach links in die leere Spalte verschoben wird. Dazu sind folgende Schritte notwendig: 1. Tabelle wird nach Spalte C sortiert. 2. Suche in Spalte C nach "d" und markiere alle Zellen, in denen "d" vorkommt. (Dies ist ja durch das "Suchen"-Fenster möglich.) 3. Verschiebe die markierten Zellen von Spalte C nach Spalte B.
Diese Schritte sind "zu Fuß" genau so möglich und führen zum gewünschten Ergebnis. Wenn ich diese Schritte aber in einem Makro aufzeichne, scheint dieses meine Suche komplett zu ignorieren. Statt dessen markiert Excel immer die komplette Spalte C und verschiebt sie nach B. Dies hat zur Folge, dass auch in Zeile 3 "e" durch "t" ersetzt wird. Ich will aber nur den Inhalt "d" jeweils in die leere Spalte B verschieben.
Habt ihr eine Idee?
Vielen Dank!! Jan
Registriert seit: 11.04.2014
Version(en): 2021
Hallo Jan,
da Du Dein Makro hier nicht zeigst, mal einen anderen Makro-Weg: Lege eine Schleife über Deine Zeilen und frage darin ab, ob Spalte B leer ist und in Spalte C ein "d" steht, dann schiebe den Wert von C nach B, ansonsten lass alles so wie es ist.
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Registriert seit: 28.03.2020
Version(en): Office 365
Hallo Glausius, das Makro habe ich deswegen nicht gepostet, weil letztlich nichts drinsteht. Scheinbar kann man Suchen nicht ins Makros einbauen. Das ist ja genau mein Problem. Leider verstehe ich nicht, was du mit "Schleife über Zeilen legen" und "den Wert von C nach B schieben" meinst. So fit bin ich in Excel nicht. Kannst du das etwas genauer sagen? Vielen Dank! Jan
Registriert seit: 11.04.2014
Version(en): 2021
Code: Sub Werte_tauschen() Dim i As Integer
For i = 1 to 4 'hier Zeile 1 bis 4 If Cells(i, 2) = "" AND Cells(i, 3) = "d" then Cells(i, 2) = Cells(i, 3) Cells(i, 3) = "" End If Next
End Sub
Das Ganze in ein Modul und Du kannst das Makro ausfrufen, wobei ich das jetzt fest auf Deine 4 Teilen eingestellt habe. Man kann das natürlich auch variable gestalten oder die Zeilenanzahl fest vorgeben.
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Folgende(r) 1 Nutzer sagt Danke an Glausius für diesen Beitrag:1 Nutzer sagt Danke an Glausius für diesen Beitrag 28
• Jan234
Registriert seit: 11.04.2014
Version(en): Office 365
Hallo Jan, versuche es mal damit. Sortieren brauchst du dafür nicht: Code: Option Explicit
Sub verschieben() Dim lngZeile As Long For lngZeile = 2 To Range("A1").End(xlDown).Row If Cells(lngZeile, 3) = "d" Then Cells(lngZeile, 2) = "d" Cells(lngZeile, 3) = "" End If Next lngZeile End Sub
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
Registriert seit: 28.03.2020
Version(en): Office 365
Wow, Klasse! Vielen Dank! Das erspart mir eine Menge Rumklickerei!!! Euch noch eine gute Zeit und alles Gute! Jan
Registriert seit: 28.03.2020
Version(en): Office 365
Hallo Klaus-Dieter, weil das so super geklappt hat, vielleicht kriegst du das auch noch hin? Das hier wäre noch das Sahnehäubchen auf mein Makro:
Ausgangssituation:
A|B|C --|e|d z|--|d
"--" heißt: leere Zelle
Ziel:
A|B|C d1|e|-- z|d2|--
oder auch:
A|B|C
d|e|--
z|d|--
Damit meine ich: Wenn in der Zeile die Spalte A leer ist, dann wird "d" in Spalte A verschoben (oder kopiert) und in "d1" umbenannt. (Wenn das mit dem Umbenennen zu kompliziert ist, kann das aber auch in einem späteren Schritt erfolgen.) Wenn in der Zeile die Spalte B leer ist, dann wird "d" in Spalte B verschoben (oder kopiert) und in "d2" umbenannt. (Wenn das mit dem Umbenennen zu kompliziert ist, kann das aber auch in einem späteren Schritt erfolgen.)
Weil Zeile C dann sowieso gelöscht wird, ist es egal, ob verschoben oder kopiert wird.
Vielen Dank!! Gruß Jan
Registriert seit: 11.04.2014
Version(en): Office 365
Jallo Jan, so: Code: Option Explicit
Sub verschieben() Dim lngZeile As Long Dim intMark As Integer For lngZeile = 2 To Range("A1").End(xlDown).Row If Cells(lngZeile, 1) = "" Then intMark = 1 If Cells(lngZeile, 2) = "" Then intMark = 2 If Cells(lngZeile, 3) = "d" Then Cells(lngZeile, intMark) = "d" & intMark Cells(lngZeile, 3) = "" End If Next lngZeile End Sub
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
Registriert seit: 28.03.2020
Version(en): Office 365
Hallo Klaus-Dieter, das ist einfach fantastisch und erspart mir sehr viel Arbeit. Ganz herzlichen Dank! Ich habe noch eine offene Frage, aber da komme ich vielleicht nächste Woche nochmal auf dich zurück. Grüße! Jan
Registriert seit: 28.03.2020
Version(en): Office 365
Hallo Klaus-Dieter, ich habe doch noch einmal eine Bitte, aber ich bin mir nicht sicher, ob das machbar ist...
Ausgangssituation: Zeile 1 ist unterschiedlich eingefärbt, mal rot, mal gelb. Sie hat manchmal einen Inhalt mit einer Ziffer, manchmal nicht. C1 und D1 haben keinen Inhalt, sind aber eingefärbt.
|A |B |C |D |E 1| 7 (rot) |1 (rot) | (gelb) | (rot) |
Folgendes soll nun mit Zelle E1 passieren: 1. Es wird abgefragt, welche Farbe die mit Ziffern befüllten Zellen haben. Dies ist immer eindeutig, d.h. die mit Ziffern befüllten Zellen haben immer die gleiche Farbe, hier: rot. 2. Zelle E1 wird deshalb rot eingefärbt. 3. Diese Operation gilt für den Bereich E1 bis E100, allerdings nur für sichtbare (eingeblendete) Zeilen.
Ist sowas möglich? Wäre toll!!!
Danke und Gruß Jan
|