2013-05-31 15:52:45 +0000 2013-05-31 15:52:45 +0000
8
8

Wie schreibt man eine Excel-Formel, die einen bestimmten Wert in eine andere Zelle einfügt?

Ich möchte also eine Formel schreiben, die eine Bedingung überprüft, und wenn diese Bedingung erfüllt ist, möchte ich eine bestimmte Textzeile in eine andere Zelle einfügen. Ich sollte anmerken, dass ich nicht möchte, dass die Formel in der Zelle existiert, in die ich einen Wert einfügen möchte. Wenn ich also zum Beispiel einen Wert in B5 einfügen möchte, möchte ich nicht, dass die Formel in Zelle B5 steht…

Antworten (4)

7
7
7
2013-06-02 23:43:38 +0000

Der folgende Ansatz nutzt den hier und hier beschriebenen Workaround, um eine in VBA definierte Arbeitsblattfunktion in die Lage zu versetzen, den Wert einer anderen Zelle zu setzen.

Die benutzerdefinierte Funktion speichert in globalen Variablen die Adresse der Zielzelle und den Wert, auf den diese Zelle gesetzt werden soll. Dann liest ein Makro, das bei der Neuberechnung des Arbeitsblatts ausgelöst wird, die globalen Variablen und setzt die Zielzelle auf den angegebenen Wert.

Die Verwendung der benutzerdefinierten Funktion ist einfach:

=SetCellValue(target_cell, value)

, wobei target_cell eine String-Referenz auf eine Zelle im Arbeitsblatt (z. B. “A1”) oder ein Ausdruck ist, der zu einer solchen Referenz ausgewertet wird. Dies schließt einen Ausdruck wie =B14 ein, wobei der Wert von B14 “A1” ist. Die Funktion kann in jedem gültigen Ausdruck verwendet werden.

SetCellValue gibt 1 zurück, wenn der Wert erfolgreich in die Zielzelle geschrieben wurde, und ansonsten 0. Ein eventuell vorheriger Inhalt der Zielzelle wird überschrieben.

Es werden drei Codeteile benötigt:

  • der Code, der SetCellValue selbst definiert,
  • das Makro, das durch das Arbeitsblattberechnungsereignis ausgelöst wird, und
  • eine Hilfsfunktion IsCellAddress, um sicherzustellen, dass target_cell eine gültige Zelladresse ist.

Code für SetCellValue-Funktion

Dieser Code muss in ein Standardmodul eingefügt werden, das in die Arbeitsmappe eingefügt wird. Das Modul kann über das Menü für den Visual Basic-Editor eingefügt werden, das durch Auswahl von Visual Basic auf der Registerkarte Developer des Menübandes aufgerufen wird.

Option Explicit

  Public triggerIt As Boolean
  Public theTarget As String
  Public theValue As Variant

  Function SetCellValue(aCellAddress As String, aValue As Variant) As Long

      If (IsCellAddress(aCellAddress)) And _
             (Replace(Application.Caller.Address, "$", "") <> _
              Replace(UCase(aCellAddress), "$", "")) Then
          triggerIt = True
          theTarget = aCellAddress
          theValue = aValue
          SetCellValue = 1
      Else
          triggerIt = False
          SetCellValue = 0
      End If

  End Function

Worksheet_Calculate Macro Code

Dieser Code muss in den spezifischen Code des Arbeitsblatts eingefügt werden, in dem Sie SetCellValue verwenden werden. Am einfachsten geht das, indem Sie in der Home-Ansicht mit der rechten Maustaste auf die Registerkarte des Arbeitsblatts klicken, View Code auswählen und dann den Code in das sich öffnende Editorfenster einfügen.

Private Sub Worksheet_Calculate()

      If Not triggerIt Then
          Exit Sub
      End If
      triggerIt = False
      On Error GoTo CleanUp
      Application.EnableEvents = False
      Range(theTarget).Value = theValue
  CleanUp:
      Application.EnableEvents = True
      Application.Calculate

  End Sub

Code für IsCellAddress Funktion

Dieser Code kann in das gleiche Modul wie der SetCellValue Code eingefügt werden.

Function IsCellAddress(aValue As Variant) As Boolean

      IsCellAddress = False

      Dim rng As Range ' Input is valid cell reference if it can be
      On Error GoTo GetOut ' assigned to range variable
      Set rng = Range(aValue)
      On Error GoTo 0

      Dim colonPos As Long 'convert single cell "range" address to
      colonPos = InStr(aValue, ":") 'single cell reference ("A1:A1" -> "A1")
      If (colonPos <> 0) Then
          If (Left(aValue, colonPos - 1) = _
                Right(aValue, Len(aValue) - colonPos)) Then
              aValue = Left(aValue, colonPos - 1)
          End If
      End If

      If (rng.Rows.Count = 1) And _
          (rng.Columns.Count = 1) And _
          (InStr(aValue, "!") = 0) And _
          (InStr(aValue, ":") = 0) Then
          IsCellAddress = True
      End If 'must be single cell address in this worksheet
      Exit Function

  GetOut:

  End Function
2
2
2
2013-06-02 05:30:07 +0000

Angenommen, Sie möchten, dass der Text “Text A’ in Zelle C5 angezeigt wird, wenn die Zelle B5 den Wert "grün” enthält.

Sie können einen Formelansatz verwenden, aber da Formeln keine Werte in anderen Zellen ändern können, muss die Formel in Zelle C5 eingegeben werden.

=IF(ISNUMBER(FIND("green",B5)),"Text A","")

In Zelle C5 wird nun nur noch “Text A” angezeigt, wenn in B5 das Wort “grün” steht.

Eine Formel wie diese kann so aufgebaut werden, dass sie mit vielen Bedingungen funktioniert. Sie müssen Ihre Anforderungen definieren, um Hilfe für Ihre spezielle Situation zu erhalten.

Wenn Sie nicht wollen, dass C5 eine Formel hat, können Sie auch einen VBA-Ansatz verwenden. Sie können ein Arbeitsblattänderungsereignis ausführen, das immer dann ausgeführt wird, wenn die Zelle B5 geändert wird, entweder durch manuelles Bearbeiten des Wertes oder durch Einfügen von etwas in diese Zelle.

Ein Beispiel für ein solches Makro könnte sein:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B5")) Is Nothing Then
    If InStr(1, Target, "green", vbTextCompare) Then
        Target.Offset(0, 1) = "Text A"
    End If
End If
End Sub

Die Bedingungen und die Platzierung der Ausgabe sind natürlich nur ein Beispiel und müssen an Ihre Bedürfnisse angepasst werden.

Der Unterschied zwischen dem Formel- und dem Makro-Ansatz ist

  • beim Formel-Ansatz wird die Zelle C5 eine Formel enthalten. Wenn der Benutzer versehentlich die Formel löscht, wird auch die Funktionalität, die sie liefert, gelöscht. (Es gibt jedoch Möglichkeiten, dies zu umgehen)
  • mit dem VBA-Makro wird in Zelle C5 keine Formel angezeigt, sondern der wortwörtliche Text als Wert, aber das Ändern der Einstellung erfordert Kenntnisse in Excel VBA. Außerdem muss bei einem VBA-Ansatz die Arbeitsmappe als makroaktivierte Arbeitsmappe gespeichert werden und der Benutzer muss Makros zulassen oder die Datei zu einer vertrauenswürdigen Datei machen.

Hinweis: Das obige ist nur ein Beispiel. Sie müssen Ihre Anforderungen definieren, ob Zahlen oder Text ausgewertet werden sollen, ob bei der Auswertung zwischen Groß- und Kleinschreibung unterschieden wird, wie die Auswertungsregeln lauten, wo das Ergebnis platziert werden soll usw.

1
1
1
2019-10-06 11:03:17 +0000

Um zu prüfen, ob eine Bedingung erfüllt ist, schreiben Sie eine WENN-Formel in eine Zelle, um “eine bestimmte Textzeile in einer anderen Zelle” zu aktualisieren. Die Ergebniszelle enthält nur den Wert der Formel, NICHT die Formel, die diesen Wert erzeugt hat, etwa so:

Arbeitszelle (z. B. J5) =IF(A1="yes","Specific line of text","") Ergebniszelle (z. B. B5) =J5

Wenn also die Bedingung erfüllt ist (A1=“ja”), enthält B5 “Bestimmte Textzeile”. Ansonsten bleibt sie leer.

Hinweise: Zellen, die variable Werte haben, enthalten normalerweise eine Art Formel, um ihre Werte zu aktualisieren.

Wenn Sie nicht möchten, dass jemand die eigentliche Formel kennt, die den Wert erzeugt, kann die Formel in einer anderen Zelle stehen, um den Wert zu erzeugen, der dann in die Ergebniszelle kopiert wird, z. B. in B5.

Um die Formel auszublenden, die den Wert erzeugt hat, oder um die Zelle auszublenden, auf die sich B5 bezieht (um zu prüfen, ob der Wert aktualisiert werden muss), siehe: https://support.office.com/en-us/article/display-or-hide-formulas-f7f5ab4e-bf24-4efc-8fc9-0c1b77a5356f

Andere Funktionen, die denselben Effekt erzielen können, sind CHOOSE, HLOOKUP, LOOKUP, VLOOKUP.

-1
-1
-1
2020-01-17 07:27:23 +0000

=Wert(Zelle)

Geradeaus Formel zu verwenden, hatte das gleiche Problem und es funktioniert.