225 Aufrufe
Gefragt in Tabellenkalkulation von addeguddi Experte (2.5k Punkte)
Hallo zusammen,

möchte gerne wissen ob es möglich ist ein Makro mit einer Formel zu erstellen?

Habe mir gedacht, wie es aussehen könnte.

Beispiel.

=wenn(ij2=1;danngehezuLR3;wenn(ij2=2 danngehezuLY3 usw.

Das funktioniert leider nicht.

Wer kann mir einen Vorschlag machen?

Für eine Antwort wäre ich dankbar.

Gruß Adde

4 Antworten

+1 Punkt
Beantwortet von

Hallo Adde,

Ja das ist möglich, hätte ich nicht gedacht.

Wie entsteht denn der Wert in IJ2. Durch manuelle Eingabe oder durch Formel?

Möglichkeit 1 - Manuelle Eingabe (übliche Vorgehensweise)

Gib folgenden Code in das entsprechende Tabellenmodul ein wo die Springerei stattfinden soll.

Private Sub Worksheet_Change(ByVal Target As Range)
  
  If Not Intersect(Target, Range("IJ2")) Is Nothing Then
    Select Case Target
    Case 1
      Range("LR3").Select
    Case 2
      Range("LY3").Select
    End Select
  End If

End Sub

Solltest du schon ein Worksheet_Change-Event in diesem Arbeitsblatt haben, dann füge nur den gesamten IF-Block vor End Sub hinzu. Du kannst dabei natürlich auch gern weitere Cases anlegen.

Möglichkeit 2 - per Formel berechneter Wert (Dein Wunsch, unüblich aber möglich!)

Vergiss den Code aus Möglichkeit 1 und mache stattdessen folgendes:

Füge ein neues Standardmodul ein (z.B. Modul5) und gib dort diesen Code ein:

Public Ziel As Range
Public Aufruf As Range
Public Function SprungZu(Sprungziel As Range)
  
  Set Aufruf = Application.Caller
  Set Ziel = Sprungziel
  SprungZu = "SprungZu" & Sprungziel.Address(False, False)
  
End Function

Anschließend fügst du in dem Tabellenmodul wo die Springerei stattfinden soll (z.B. Tabelle1) diesen Code ein:

Private Sub Worksheet_Calculate()
  
  If Not Aufruf Is Nothing Then
    If Aufruf.Address(False, False) = "IK2" Then
      Ziel.Select
      Set Ziel = Nothing
      Set Aufruf = Nothing
    End If
  End If

End Sub

Solltest du bereits ein Calculate Ereignis in diesem Modul haben, dann füge nur den großen If-Block vor End Sub ein. Achte dabei darauf, dass im Code statt IK2 die Adresse der Zelle steht, wo du die folgende Formel einträgst.

Trage nun also in eine beliebige Zelle (hier IK2) diese Formel ein:

=WENN(IJ2=1;SprungZu(LR3);WENN(IJ2=2;SprungZu(LY3);"KeinSprung"))

Fertig! Wenn nun der Wert in IJ2 neu berechnet wird, wird davon abhängig auch die Formel in IK2 neu berechnet und führt den Sprung aus.

Gruß Mr. K.

0 Punkte
Beantwortet von addeguddi Experte (2.5k Punkte)
Hallo Mr. K.

Dies wird durch

Private Sub SpinButton1_Change()
ActiveSheet.Unprotect
If SpinButton1.Value < 1 Then SpinButton1.Value = ActiveSheet.Range("f1")
If SpinButton1.Value > ActiveSheet.Range("f1") Then SpinButton1.Value = 1

ActiveSheet.Range("g1") = SpinButton1.Value

End Sub

erzeugt:

Gruß Adde
+1 Punkt
Beantwortet von
Hallo Adde,

was willst du mir damit sagen? Ich dachte es geht um Zelle IJ2, nicht um G1. Wenn sich der Wert natürlich aus G1 geholt wird, dann kannst du in Abhängigkeit von G1 Möglichkeit 1 verwenden. Oder du nimmst die Formelvariante. Beides ist in diesem Fall möglich. Aber du solltest nur eine der beiden Möglichkeiten nutzen.

Gruß Mr. K.
0 Punkte
Beantwortet von addeguddi Experte (2.5k Punkte)
Guten Morgen Mr. K.

vielen Dank für deine Unterstützung. Klappt wunderbar.

Der Wert der in Zelle IJ2 steht, wird aus g1 übernommen. =G1

Gruß Adde
...