Wie kann man bei Excel Zeilen löschen, wo ein bestimmter Wert in einer Zelle drin steht?
Hallo Leute,
Ich habe folgendes Problem: Wenn in folgenden Zellen B42,D42,F42 und G42 jeweils drinsteht: "Eintrag fehlt", dann soll die ganze Zeile, also in diesen Fall die Zeile 42 gelöscht werden bzw gar nicht erst erscheinen. Die Zellen(B42,D42..) bekommen Ihre Werte aus anderen Exceltabellen. Dies soll auch noch für andere Zellen in dergleichen Tabelle der Fall sein. Wie kann Ich dies beheben?Geht dies nur per Makros?
Über Filter wäre es sinnlos, weil es soll für den Betrachter erst gar nicht erscheinen. Der Betrachter soll nicht immer erst den Filter betätigen.
Vielen Dank für eure Antworten jetzt schon mal (:
3 Antworten
Excel selber kann nur Formeln beinhalten. eine Formel ist was sie ist, sie zeigt Ergebnisse auf Grund von Variablen und Berechnungen an.
Alles was mit tatsächlichem verschieben, löschen, kopieren und dergleichen zu tun hat, ist lediglich mit VBA also Makros möglich.
Willst du eine Zeile nicht anzeigen kannst du in jede Zelle der betreffenden Zeile eine Formel reinschreiben, welche die Zelle bei diesen Bedingungen leer anzeigt, aber löschen würde nur mit Makros (VBA) gehen.
Bsp. :Zelle A1: =Wenn(B1="Eintrag fehlt";"";B1)
In diesem Fall zeigt A1 nur dann das Ergebnis aus B1 an, wenn in B1 nicht "Eintrag fehlt" steht, ansonst wird die Zelle leer gelassen.
Ja, kann ich, jedoch gibt es da ein paar Dinge zu beachten.
Die Arbeitsmappe muss als Makromappe abgelegt werden.
- "Speichern unter" wählen
- Dateityp ".xlsm" wählen
- Datei speichern
Dann sollte erstmal ein Makro erstellt werden in dem nichts gemacht wird.
- Im Menü Ansicht auf "Makros" klicken
- "Makro aufzeichnen" anklicken
- Makroname: "Zeileloeschen"; Tastenkombination: Strg+i ; Makro speichern in: "Diese Arbeitsmappe"
- ok klicken
- Nochmal den Makros" Button anklicken
- "Aufzeichnung beenden" anklicken.
Dann müsste ich wissen ab welcher Zeile nach "Eintrag fehlt gesucht werden soll. Zudem müsste ich wissen in welcher Spalte der Text "Eintrag fehlt" steht und die genaue Schreibweise (Gross- / Kleinschreibung)
Zu guter Letzt weise ich noch darauf hin das Änderungen mit Makros nicht mit dem Zurückbutton rückgängig gemacht werden können und beim starten der Mappe eine Warnung erscheint, dass die Mappe Makros enthält und ob man diese deaktiviern möchte.
Hier ein Beispiel das man in die Arbeitsmappe integrieren kann um die Zeilen auszublenden vor dem verschicken. Dazu mit:
- alt+F11 den VBA Editor öffnen
- links im Verzeichnisbaum "DieseArbeitsmappe" öffnen
- mein Codebeispiel einfügen
- Dateiname für PDF und Bereich in dem "Eintrag fehlt" gesucht werden soll anpassen
Das Makro wird dann beim schliessen des Dokuments ausgeführt und in einen Mailanhang gesteckt.
Option Explicit
Dim rng As Range
Dim row As Range
Dim cell As Range
Dim PDFPfadName As Variant
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set rng = Range("D2:D50000") ' Bereich in dem ausgeblendet wird
PDFPfadName = ActiveWorkbook.Path & "\" & "MyPdF.pdf" ' Pfad und Name des PDF
Application.ScreenUpdating = False
For Each row In rng.Rows
For Each cell In row.Cells
If cell.Value = "Eintrag fehlt" Then
cell.EntireRow.Hidden = True
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
PDFPfadName, Quality:= _
xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
End If
Next cell
Next row
Application.ScreenUpdating = True
Application.Dialogs(xlDialogSendMail).Show
End Sub
Danke für deine Antwort.
Hast mir sogar sehr weitergeholfen. Das mit der pdf und dann per Mail schicken habe ich gar nicht gefragt, dass würde Ich aber auch gern in meiner Excel Tabelle einbauen.
Sub ZeilenBedingtEliminieren_
3_
Alternativen() '
if range("B42") = "Eintrag fehlt" or range("D42") = "Eintrag fehlt" or range("F42") = "Eintrag fehlt" or range("G42") = "Eintrag fehlt" then
ActiveSheet.Range("G42").EntireRow.Hidden = True 'verbirgt Zeile 42
'Alternativen (in Lang-Schreibweise und nur für B42):
'If ActiveSheet.Range("B42").Value = "Eintrag fehlt" Then ActiveSheet.Range("B42").EntireRow.Delete 'löscht Zeile als solche
'If ActiveSheet.Range("B42").Value = "Eintrag fehlt" Then ActiveSheet.Range("B42").EntireRow.Cells.Value = "" 'eliminiert nur Einträge in der Zeile!
End Sub
Anders als i'wo... würde ich im Kontextmenü des Blattnamens Code anzeigen wählen, dann im Menü einfügen MODUL wählen und in das neue Modul obigen Code einfügen.
Ins Arbeitsblatt dann i'eine Autoform (mit Beschriftungsmöglichkeit, kann auch Textfeld sein) bringen, sie beschriften und ihr das Makro zuweisen.
Die Autoform im Kreuz von eigens deswegen als Titel fixierten Zeilen und Spalten platzieren.
Ein Klick auf diese Autoform löst dann das Makro aus. Andernfalls verschwindet Dir die Zeile auch schon, wenn das Blatt noch nicht ausreichend ausgefüllt ist!
wie du schon richtig festgestellt hast geht das nur über Makros. was soll passieren wenn die Zelle B42 gelöscht wurde? Woher soll sie dann ihren Wert bekommen? Dein Aufbau bzw. was mit dieser Tabelle geschehen soll ist mir noch nicht ganz klar.
willst du die Tabelle nachdem das Makro gelaufen ist verschicken?
Du könntest den Filter beim öffnen der Tabelle über ein Makro starten dann fällt das manuelle auslösen weg.
Danke für die schneller Antwort.
In der Zelle B42 steht der Eintrag drin: "Eintrag fehlt". Dieser Eintrag ändert sich nur, wenn in einer anderen Tabelle ein Wert eingetragen wird.
Solange aber der Wert "Eintrag fehlt" in den 4 Zellen steht(B42,D42,F42 und G42) soll am besten die ganze Zeile nicht angezeigt werden.
Die Tabelle ist meistens den ganzen Tag offen, genauso wie die anderen Tabellen, wo der Wert herkommt. Am Ende des Tages wird die Tabelle geschlossen und per Mail(als pdf Format) verschickt. In den Pdf Format soll es aber nicht die ganzen leeren Zeilen geben. Das soll dann am besten alles recht gut zusammengefasst sein.
Weißt du es nun, wie Ich es meine?
Dann löse doch über ein Makro die Ausblendung der Zellen und gleichzeitig den PDF Versand aus.
schau dir hierzu mal entirerow.hidden=true an.
Ich möchte die Zeile löschen. Kannst du mir da Tipps geben, wie das mit VBA geht? Ich habe darin null Erfahrung :/