Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA If Formel "" dann nichts, sonst Erg.

VBA If Formel "" dann nichts, sonst Erg.
14.03.2023 11:18:01
Daniel
Hallo zusammen,
ich suche schon eine Weile im Internet, allerdings ohne gewünschten Erfolg..
Ich habe im Bereich B5:B1000 Formeln stehen, die nur aktiv werden, wenn in der jeweiligen linken Nachbarzelle etwas eingetragen wird (Also z.B. Wenn in Zelle A35 Wert, Dann Ergebniswert in Zelle B35). Da das Ergebnis der Formel je nach Nutzer immer ein anderes ist, bräuchte ich eine Funktion, die mir das Ergebnis als solches in die jeweilige Zelle speichert, wenn mir die Formel einen Wert bringt, wenn die Formel allerdings keinen Wert bringt, da die Nachbarzelle ja leer ist, soll nichts passieren und die Formel weiterhin in der Zelle bleiben.
Also:
Wenn Ergebnis der Formel Leer " "
Dann Nichts machen, Formel stehen lassen
Wenn Formel einen Inhalt bringt
Dann Inhalt der Formel als fixen Wert ersetzen
Ich hab sowas ähnliches bereits schon im Einsatz, allerdings wird hier aus EINEM FIXEN Ergebnis einer Formel EIN FIXER Wert.
Sub ersetzen()
Dim Z As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
For Each Z In ThisWorkbook.Worksheets("Tabelle1").Range("E6:U3500")
If UCase(Z.Value) = "*" Then Z.Value = "X"
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Hoffe ihr könnt mir hier ein weiteres Mal weiterhelfen :)
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA If Formel "" dann nichts, sonst Erg.
14.03.2023 11:30:28
Daniel
Hi
vielleicht so:
Dim Bereich as Range
for each Bereich in Range("A5:A1000").SpecialCells(xlcelltypeconstants).Areas
    with Bereich.Offset(0, 1)
        .Formula = Bereich.value
    end with
next
next
die Schleife läuft hier über alle Zellen, die in Spalte A einen Wert haben (xlcelltypeconstants).
für diese wird dann in der nachbarzelle die die Formel durch den Wert ersetzt.
bei Zellen, die in Spalte A leer sind, passiert nichts.
damit das etwas schneller geht, läuft die Schleife nicht über die Einzelzellen, sondern über die lückenlosen Blöcke (Areas). Für so einen lückenlosen Block kann man das .Formula = .Value gemeinschaftlich ausführen
Gruß Daniel
Anzeige
AW: VBA If Formel "" dann nichts, sonst Erg.
14.03.2023 14:02:08
Daniel
Danke dir für deine Antwort!
Die Funktion funktioniert schon fast so, wie ich es haben wollte. Allerdings wird mir in der Spalte B nun der Wert aus A eingetragen..
Spalte A enthält bei mir immer ein Datum.
Spalte B wird mit dem jeweiligen Nachnamen des aktuellen Nutzers ausgefüllt. - Werte in Spalte B sollen aus Formel in Wert umgewandelt werden..
Anzeige
AW: VBA If Formel "" dann nichts, sonst Erg.
14.03.2023 12:20:30
Yal
Hallo Daniel,
ich verstehe nicht ganz: in der Zelle in Spalte B steht eine Formel. Solang A (gleiche Zeile) leer ist passiert nichts. Wird aber A befüllt, soll diese Formel berechnet werden und das Ergebnis fest sein, also nur noch das Ergebnis in der B-Zelle sein, und kein Formel mehr?
Wenn das so sein soll, dann ist es mit einer Formel nicht zu erreichen. Eine Formel ist eine Formel und bleibt eine Formel.
Was Du brauchst, ist die Änderung in der Zelle in Spalte A wahrzunehmen und eine VBA-Aktion anzustossen. Das nennt sich Ereignis-Prozedure (EP).
Komplizierter ist aber, dass diese EP nur bewirken soll, wenn vorher die Zelle leer war. Wäre eigentlich noch machbar. Aber ich gehe davon aus, dass Du vermeiden möchtest, dass der User die Zelle A vorher leert, um dann eine Aktualisierung der Zelle B zu erzwingen.
Daher folgende Mechanismus:
_ in Zelle B steht eine Formel
_ wenn eine Zelle A ausgewählt wird, wird geprüft, ob diese leer ist und diese Zustand zur Seite "gespeichert"
_ kommt eine Änderung in dieser Zelle, wird geprüft, ob diese davor leer war, wenn ja, prüfen ob in B eine Formel, wenn ja, Formel in B aktualisieren und Formel in B durch Wert ersetzen. (d.h. wenn in B eine Formel, dann ist A zum ersten Mal befüllt, wenn feste Werte, hat der User A zuerst geleert.)
Aber bevor ich damit anfange, hätte ich gern von Dir die Bestätigung, dass es so richtig ist.
VG
Yal
Anzeige
AW: VBA If Formel "" dann nichts, sonst Erg.
14.03.2023 13:49:21
Daniel
Auch dir schonmal danke für deine Antwort!
ich hoffe, dass ich dir zu deiner Zufriedenheit antworten kann und nicht an deiner Antwort vorbeirede..
_ in Zelle B steht eine Formel - Richtig.
_ wenn eine Zelle A ausgewählt wird, wird geprüft, ob diese leer ist und diese Zustand zur Seite "gespeichert" - Es wird hier nur geprüft, ob die Zelle nicht leer ist. In dieser Zelle (A) wird das Datum eingegeben. Wenn hier also ein Datum steht, wird meine Formel (in B) aktiviert und in der Nachname des jeweiligen Nutzers erscheint, welcher aus einem anderen Datenblatt gezogen wird.
_ kommt eine Änderung in dieser Zelle, wird geprüft, ob diese davor leer war, wenn ja, prüfen ob in B eine Formel, wenn ja, Formel in B aktualisieren und Formel in B durch Wert ersetzen. (d.h. wenn in B eine Formel, dann ist A zum ersten Mal befüllt, wenn feste Werte, hat der User A zuerst geleert.) - Ich glaube du meinst das Richtige. Nur als Abgleich nochmal:
Beispiel:
Zelle A10 ist aktuell leer
Nutzer gibt in Zelle A10 Datum / Inhalt / was auch immer ein -> Zelle ist nicht mehr leer -> Formel in B10 wird ausgeführt, da A10 nun nicht mehr leer
In B10 erscheint der Nachname des Nutzers, welcher nun als Wert in diese Zelle eingetragen werden soll, damit dieser bei einem anderen Nutzer nicht mehr geändert wird (Deswegen aus der Formel einen Wert machen)
Anzeige
AW: VBA If Formel "" dann nichts, sonst Erg.
14.03.2023 12:28:29
GerdL
Moin,
welche Formel steht im Bereich B5:B1000 ?
Gruß Gerd
AW: VBA If Formel "" dann nichts, sonst Erg.
14.03.2023 13:35:31
Daniel
Danke euch beiden schonmal für die Antworten / Reaktionen auf meiner Frage.
Ich würde bei Gerd anfangen, da diese glaube ich schneller zu beantworten ist.. aber bitte steinigt mich nicht, wenn die Formel euch die Formel erschlägt und einfacher zu gestalten wäre..
In A6:Axxxx wird ein Datum eingegeben
Wenn in Ax ein Datum steht, erscheint in Bx automatisch der Nachname des aktuellen Nutzers, das ganze funktioniert wie nachfolgend beschrieben:
Meine Formel frägt ab, ob - in diesem Fall - A6 - nicht leer ist. wenn dies der Fall ist, wird abgeglichen, ob der Nutzer in $B$3, mit $G$4 (Datenblatt "Dropdown_Sonstiges) übereinstimmt (1. Fall aus 17 weiteren Nutzern, die variabel eingegeben werden können) - wenn alles passt, erscheint in B6 der Nachname - bezogen aus "Daten $Y$3" des Nutzers. Das ganze wird hald dann über die ganze Spalte runtergezogen, damit, wie schon erwähnt z.B. A35 mit B35, A70 mit B70 usw... übereinstimmen.
=WENN(UND(Schichtübergabe!A6>"";B$1=Dropdown_Sonstiges!$Y$3);Daten!$G$4; WENN(UND(Schichtübergabe!A6>"";B$1=Dropdown_Sonstiges!$Y$5);Daten!$G$6; WENN(UND(Schichtübergabe!A6>"";B$1=Dropdown_Sonstiges!$Y$6);Daten!$G$7; WENN(UND(Schichtübergabe!A6>"";B$1=Dropdown_Sonstiges!$Y$7);Daten!$G$8; WENN(UND(Schichtübergabe!A6>"";B$1=Dropdown_Sonstiges!$Y$8);Daten!$G$9; WENN(UND(Schichtübergabe!A6>"";B$1=Dropdown_Sonstiges!$Y$9);Daten!$G$10; WENN(UND(Schichtübergabe!A6>"";B$1=Dropdown_Sonstiges!$Y$10);Daten!$G$11; WENN(UND(Schichtübergabe!A6>"";B$1=Dropdown_Sonstiges!$Y$11);Daten!$G$12; WENN(UND(Schichtübergabe!A6>"";B$1=Dropdown_Sonstiges!$Y$12);Daten!$G$13; WENN(UND(Schichtübergabe!A6>"";B$1=Dropdown_Sonstiges!$Y$14);Daten!$G$15; WENN(UND(Schichtübergabe!A6>"";B$1=Dropdown_Sonstiges!$Y$15);Daten!$G$16; WENN(UND(Schichtübergabe!A6>"";B$1=Dropdown_Sonstiges!$Y$16);Daten!$G$17; WENN(UND(Schichtübergabe!A6>"";B$1=Dropdown_Sonstiges!$Y$17);Daten!$G$18; WENN(UND(Schichtübergabe!A6>"";B$1=Dropdown_Sonstiges!$Y$18);Daten!$G$19; WENN(UND(Schichtübergabe!A6>"";B$1=Dropdown_Sonstiges!$Y$19);Daten!$G$20; WENN(UND(Schichtübergabe!A6>"";B$1=Dropdown_Sonstiges!$Y$20);Daten!$G$21; WENN(UND(Schichtübergabe!A6>"";B$1=Dropdown_Sonstiges!$Y$21);Daten!$G$22;"")))))))))))))))))
Kann natürlich auch sein, dass man das ganze einfacher gestalten hätte können.. aber die Abfrage und Funktion der Formel funktioniert soweit..
Fehlt mir hald nur noch, dass er die "leeren" Ergebnisse als Formeln lässt und die Werte aus den Formeln zu festen, unveränderbaren Werten macht..
Anzeige
AW: VBA If Formel "" dann nichts, sonst Erg.
14.03.2023 14:06:27
Yal
Hallo Daniel,
wir lachen zwar niemanden aus, aber wer sich als "Excel gut" einstufen möchte, sollte die Formel SVerweis kennen.
VG
Yal
AW: VBA If Formel "" dann nichts, sonst Erg.
14.03.2023 14:16:46
Yal
Hallo Daniel,
gehe auf dem Register (da wo der Name der Blatt angezeigt ist), rechtsklicke und wähle "Code anzeigen",
in diesem Blatt-Codepane, füge folgendes
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Name As Range
    Set Target = Target.Cells(1)
    If Target.Column = 1 Then
        Set Name = Worksheets("Dropdown_Sonstiges").Range("Y:Y").Find(Range("B1").Value)
        If Not Name Is Nothing Then
            Target.Offset(0, 1) = Worksheets("Daten").Cells(Name.Row + 1, "G").Value
        End If
    End If
End Sub
Wenn sich etwas in Spalte A ändert (es wird noch nicht geprüft, ob es ein Datum ist), wird der Name in B1 in der Spalte Y des Blattes "Dropdown_Sonstiges", daraus die Zeilennummer um in der Spalte G des Blattes "Daten" den passenden Eintrag zu finden und in der Zelle neben die Zelle, die geändert wurde, einzufügen.
VG
Yal
Anzeige
AW: VBA If Formel "" dann nichts, sonst Erg.
14.03.2023 15:27:35
GerdL
Hallo Daniel,
probier mal. Vielleicht ist deine Aktion so entbehrlich.
 =WENN(A6>"";WENNFEHLER(INDEX(Daten!$G$4:$G$22;VERGLEICH(B$1;Dropdown_Sonstiges!$Y$3:$Y$21;0);1);"");"")
Gruß Gerd
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA If Formel: Wenn Leer, dann Nichts – Sonst Wert


Schritt-für-Schritt-Anleitung

Um in Excel mit VBA eine Formel zu verwenden, die nur dann einen Wert setzt, wenn die benachbarte Zelle nicht leer ist, kannst du die folgende Vorgehensweise nutzen:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke im Projektfenster mit der rechten Maustaste auf dein Arbeitsblatt und wähle Einfügen -> Modul.

  3. Füge den Code ein: Kopiere den folgenden VBA-Code in das Modul:

    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim Name As Range
       Set Target = Target.Cells(1)
       If Target.Column = 1 Then
           Set Name = Worksheets("Dropdown_Sonstiges").Range("Y:Y").Find(Range("B1").Value)
           If Not Name Is Nothing Then
               Target.Offset(0, 1) = Worksheets("Daten").Cells(Name.Row + 1, "G").Value
           End If
       End If
    End Sub
  4. Schließe den VBA-Editor: Speichere deine Änderungen und schließe den Editor.

  5. Teste die Funktion: Gib in Spalte A einen Wert ein und überprüfe, ob die entsprechende Zelle in Spalte B das gewünschte Ergebnis anzeigt.


Häufige Fehler und Lösungen

  • Fehler: Die Zelle in Spalte B bleibt leer, obwohl in A ein Wert steht.

    • Lösung: Stelle sicher, dass die Formel in B korrekt eingegeben wurde und dass die Referenzen auf andere Blätter (z.B. "Dropdown_Sonstiges") stimmen.
  • Fehler: VBA funktioniert nicht, wenn A zuerst leer war und dann gefüllt wird.

    • Lösung: Überprüfe, ob die Ereignis-Prozedur (EP) richtig implementiert ist und dass die entsprechenden Bedingungen im Code korrekt formuliert sind.

Alternative Methoden

Falls du keine VBA-Lösungen nutzen möchtest, kannst du auch Formeln verwenden. Allerdings ist das Ersetzen von Formeln durch Werte nicht direkt möglich. Eine Möglichkeit wäre die Nutzung der WENN-Funktion in Kombination mit WENNFEHLER, um die Anzeige zu steuern, z.B.:

=WENN(A6>"";WENNFEHLER(INDEX(Daten!$G$4:$G$22;VERGLEICH(B$1;Dropdown_Sonstiges!$Y$3:$Y$21;0);"");"")

Diese Formel gibt nur dann einen Wert zurück, wenn A6 nicht leer ist.


Praktische Beispiele

  1. Beispiel 1: Wenn in Zelle A10 ein Datum eingetragen wird, soll in B10 der Nachname des Nutzers erscheinen, der aus einem anderen Datenblatt abgerufen wird.

    Wenn A10 <> "" Dann
       B10 = Nachname aus Datenblatt
    Ende Wenn
  2. Beispiel 2: Bei einer Schichtübergabe in Excel soll das Schichtübergabeprotokoll automatisch aktualisiert werden, wenn in Spalte A ein Datum eingegeben wird.


Tipps für Profis

  • Nutze Application.EnableEvents = False, um zu verhindern, dass die Ereignisprozedur sich selbst aufruft und somit eine Endlosschleife entsteht.
  • Überlege dir, ob du die VBA If Or-Bedingungen verwenden solltest, um mehrere Bedingungen gleichzeitig abzufragen.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die Formel in einer Zelle bleibt, wenn sie leer ist?
Eine Möglichkeit ist, die Formel in einer if-Bedingung zu überprüfen und nur unter bestimmten Umständen zu ersetzen. Verwende If ... Then in deiner VBA-Prozedur.

2. Was ist der Unterschied zwischen VBA If Or und VBA If And?
VBA If Or prüft, ob mindestens eine der Bedingungen wahr ist, während VBA If And sicherstellt, dass alle Bedingungen erfüllt sind, bevor die Aktion ausgeführt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige