Hallo,
habe eine Frage bzgl. Makros in Excel.
Ich habe einer Tabelle eine Spalte hinzugefügt, in der ich eine WENN-Funktion eingebaut habe. Diese soll, wenn zwei Kriterien zutreffen, den Buchstaben A eintragen. Treffen diese nicht zu soll die gesamte Zelle gelöscht werden, inclusive Formel (wichtig für die Auswertung mit Pivottabelle)! Nun denke ich, dass ich dafür ein Makro brauche, der mir die Zelle löscht. Allerdings wäre dabei für mich wichtig, dass das Makro dies universal macht. Daher soll genau die Zelle, in welcher das Makro steht, gelöscht werden. Ich möchte im Quelltext nicht extra für jede Zeile die Zelle die Nummerierung angeben müssen (zb. A1, U6, E5…).
Hoffe das ich mein Problem ausreichend verständlich erklären konnte und freue mich auf gute Lösungsvorschläge!
Danke.
Wie sieht denn dein Makro aus? Hat du schon etwas zusammmengestellt bzw. mit dem Makro Rekorder aufgezeichnet?
Natürlich gäb es da ein einfachere Lösung, da musst du nicht alle Zellen im Quelltext reinschreiben. Dafür müsste man eine Schleife verwenden.
Jetzt wäre es interessant zu wissen was du überprüfst ( also welche Spalten in der jeweiligen Zeile).
Sind es immer dieselben Spalten , so dass sich nur von Zeile zu Zeile springt? Zum Beispiel immer von Spalte D bis G, D1 bis G1 und dann D2 bis G2 usw…
Da kann man dann jede Zeile ( mithilfe der Schleife ) durchlaufen und dass dann kontrollieren mit der if funktion und in die bestimmte eine Zelle den Wert A reinschreiben oder das andere löschen.
Schreib mir doch dein Code, dann könnt ich dir weiterhelfen.
Hallo enesc,
danke für die schnelle Antwort.
Ich versuch mein Problem nocheinmal genauer zu beschreiben
Wie gesagt habe ich eine neue Spalte erstellt, welche sich mit Hilfe einer WENN-Funktion aus zwei vorhergehenden Spalten zusammensetzt und dies folgendermaßen auswerten soll:
Sind beide Kriterien wahr, soll in das jeweilige Feld der Buchstabe A eigesetzt werden.
Ist eine, bzw. beide falsch, soll der gesamte Inhalt der Zelle (auch die Formel, da ich diese Spalte später in einer Pivottabelle auswerten möchte und nach Anzahl der „gefüllten“ Felder sortieren möchte) gelöscht werden.
Ob dabei ein Makro verwendet wird ist mir hierbei egal. Wenn es dafür eine andere Möglichkeit gibt wäre auch super!
Ich hoffe diesmal war es leichter verständlich.
Danke!
soll die gesamte Zelle gelöscht werden, inclusive
Formel (wichtig für die Auswertung mit Pivottabelle)!
Hallo Michael,
was du vorhast klingt etwas abenteuerlich.
Warum muss die Zelle gelöscht werden, und nicht nur ihr Inhalt?
Wenn du eine einzelne Zelle löschst, rückt eine benachbarte Zelle an diese Stelle. Es gibt ja keine Löcher in einer Excel-Tabelle.
Wenn du aber den Inhalt der Zelle einschließlich des Makros löschst, steht das Makro danach ja für keine weiteren Aufgaben zu Verfügung.
Außerdem kann ein Makro sich nicht selbst löschen.
Warum kann im Falle eines „falsch“ in der Wenn-Funktion der angezeigte Inhalt nicht einfach leer bleiben? Beim Löschen der Zelle würde ja auch eine leere Zelle nachrücken.
Sicher gibt es aber eine bessere Lösung für dein Problem.
Dazu müsste ich aber deine Excel-Tabelle besser kennen, und was du damit vor hast.
was du eben beschrieben hast, habe ich bereits versucht
Mein Problem ist, wenn ich die Spalte in einer Pivottabelle auswerten möchte und nach Anzahl sortiere, werden dort nicht die Anzahl der A’s angezeigt sonder alle Zellen, da in den Zellen mit blanco immer noch die Formel hinterlegt ist.
Deshalb müsste der gesamte Inhalt aus der Zelle gelöscht werden.
War vielleicht ein bisschen unglücklich formuliert!
Hallo Michael,
ich bin kein Programmierer und kann daher auch mit einem Makro nicht helfen.
Ich würde es auch nicht mit einem MAcro lösen. Die Wennabfrage liefert den entsprechenden Status. Danach mit Autofilter die die Zeilen filtern, dann sichtbare Zeilen markieren, Taste Entfernen drücken - und das wars.
Beste GRüße
Helmut Schuster
Dim i As Integer
Dim endzeile As Integer
endzeile = 30 'ist die letzte zeile, die überprüft wird
For i = 1 To endzeile 'Läuft alle Zeilen von 1 bis endzeile ab
'Hier kommen jetzt die Zwei Kontrollzeilen mit den jeweiligen Kontrollwerten
If Sheets(1).Cells(i, „F“).Value = „Kontrollwert1“ And Sheets(1).Cells(i, „G“).Value = „Kontrollwert2“ Then
Sheets(1).Cells(i, „H“).Value = „A“
Else
Sheets(1).Cells(i, „H“).Value = „“
End If
Next i
End Sub
Das müsstest du dann nur noch an deine Zellen anpassen.
vielleicht hilft dir ja folgendes:
du hast in deiner Tabelle eine Spalte, welche dir den Wert „A“ oder leer ausgibt.
Ich glaube das Problem ist der Buchstabe.
Wenn du eine weitere Spalte deiner Tabelle hinzufügst, eine „Hilfsspalte“ sozusagen, in welcher du den Buchstaben in eine Zahl umwandelst [=wenn(‚SpalteF‘=„A“;1;"")] und diese Spalte mit in das Pivottable einbeziehst, kannst du die Anzahl sicher ermitteln (Filtereinstellung auf 1 und er zeigt in der Summe die Anzahl der Zeilen mit der 1 an.)
Schriftfarbe der Hilfsspalte in weiß und die Zahlen verwirren oder stören dein Bild nicht.
Da ich deine Tabelle ja nicht kenne, weiß ich nicht ob das bei dir klappen kann. Versuchs halt.
Die Spalte mit dem Früfkriterium und ggf. die Zeile ab der das Makro prüfen soll muss du noch anpassen.
Gruß
Franz
Sub Zeilen\_loeschen()
'Löscht Zeilen mit Mehrfacheinträgen in Spalte B der aktiven Tabelle
Dim objRng As Range, objCell As Range, wks As Worksheet
Dim boolLoeschen As Boolean, StatusCalc As Long
Set wks = ActiveSheet
With wks
'Bereich, der geprüft werden soll = Zellbereich mit der WENN-Formel
'hier im Beispiel Spalte 6 (F)
Set objRng = .Range(.Cells(2, 6), .Cells(.Rows.Count, 6).End(xlUp))
'Makrobremsen deaktivieren
With Application
.ScreenUpdating = False
StatusCalc = .Calculation
.Calculation = xlCalculationManual
.EnableEvents = False
End With
.Calculate
'Inhalte in den Zeilen, die nicht dem Prüfkriterium entsprechen, löschen
For Each objCell In objRng.Cells
If objCell.Value "A" Then
.Rows(objCell.Row).ClearContents
boolLoeschen = True
End If
Next
'Zeilen mit gelöschten Inhalten löschen
If boolLoeschen = True Then objRng.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
'Makrobremsen zurücksetzen
With Application
.ScreenUpdating = True
.Calculation = StatusCalc
.EnableEvents = True
End With
End With
End Sub