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

Forumthread: VBA-Funktion: WECHSELN für Formeln

VBA-Funktion: WECHSELN für Formeln
09.03.2022 20:46:17
Ben.Blake
Hallo,
ich habe mal wieder ein Problem, mit dem ich nicht weiterkomme...
Ich habe öfter mal den Fall, daß ich lange Teilfunktionen in langen Formeln benötige und das auch gern 5 mal oder so, was die Formel dann natürlich ungeheuer aufbläht. Also dachte ich mir, das wäre doch der perfekte Anwendungsfall, um mal eine Funktion zu bauen, welche es quasi ermöglicht, in einer Formel Variablen für diese Teilfunktionen zu nutzen. Es über Namen zu machen mag manchmal funktionieren, wenn es aber dann darum geht verschiedene Bereiche zu nutzen, artet das dann auch gern mal in Änderungsorgien für die Übertragung aus (z.B. habe ich eine umfangreiche Formel, die ich in vier Bereichen mit absoluten Bezügen benötige, was kein Problem ist, wenn ich die Formel auf den ersten Bereich verteile, dann die $ lösche und dann in die anderen Bereiche kopiere, da sind dann die Relationen wieder die gleichen). Was so richtig passen würde, wäre eine WECHSELN-Funktion für Formeln.
Da habe ich also was in VBA zusammengeschrieben:

Public Function WECHSELN_F(Formel As String, Variable As String, Ersatz_Formel)
Dim Fx$, V$, nFx$, Str As String
Dim i As Long
Fx = Formel
V = Variable
nFx = Ersatz_Formel
'Str = "="
Str = ""
For i = 1 To Len(Fx) - Len(V) + 1
If Mid(Fx, i, Len(V)) = V Then
Str = Str & nFx
Else
Str = Str & Mid(Fx, i, 1)
End If
Next i
WECHSELN_F = Evaluate(Str)
'WECHSELN_F = Str
End Function
Dabei gibt es nun leider ein paar Probleme:
1. Die fertige Formel wird nur als String ausgegeben und nicht berechnet - deshalb der Versuch mit dem Evaluate
2. für die Evaluate-Methode ist die String-Länge auf 256 Zeichen begrenzt
3. Die Formel muß mit " eingegeben werden, sonst beschwert sich Excel über unbekannte Namen, noch bevor die Function ausgeführt wird - das ist natürlich blöd, weil die Stringlänge ja wieder auf 256 Zeichen beschränkt ist und ich deshalb dann eine Formel x-fach zerstückeln muß
Gibt es keine Möglichkeit, die Berechnung der Formel im VBA zu übernehmen und den fertigen Wert auszuspucken? Und wenn es sich vermeiden ließe, die Formel als String eingeben zu müssen, wäre das auch hilfreich, aber da glaube ich schon, daß das nicht geht, weil Excel alles auswertet, was geht, bevor es die VBA-Funktion startet...
Es wäre wirklich schön, wenn da jemand eine Lösung für die Berechnung wüßte, ich hab da jetzt einige Zeit herumgesucht und nix gefunden...
Vielen Dank schonmal!
Ben
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-Funktion: WECHSELN für Formeln
09.03.2022 20:51:40
Daniel
HI
"Ich habe öfter mal den Fall, daß ich lange Teilfunktionen in langen Formeln benötige und das auch gern 5 mal oder so, was die Formel dann natürlich ungeheuer aufbläht."
schau dir mal die neue Funktion LET an. die ist für genau diesen Fall gedacht, dass man innerhalb einer Formel öfters verwendete Teilformeln oder Bezüge durch Variablen ersetzen kann.
Gruß Daniel
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

WECHSELN-Funktion in Excel VBA effektiv nutzen


Schritt-für-Schritt-Anleitung

  1. Öffne die Excel-Datei: Starte Excel und öffne die Datei, in der du die WECHSELN-Funktion nutzen möchtest.
  2. Öffne den VBA-Editor: Drücke Alt + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  3. Füge ein neues Modul hinzu: Klicke im Menü auf Einfügen und wähle Modul.
  4. Kopiere den Code: Füge den bereitgestellten VBA-Code in das Modul ein:

    Public Function WECHSELN_F(Formel As String, Variable As String, Ersatz_Formel)
        Dim Fx$, V$, nFx$, Str As String
        Dim i As Long
        Fx = Formel
        V = Variable
        nFx = Ersatz_Formel
        Str = ""
        For i = 1 To Len(Fx) - Len(V) + 1
            If Mid(Fx, i, Len(V)) = V Then
                Str = Str & nFx
            Else
                Str = Str & Mid(Fx, i, 1)
            End If
        Next i
        WECHSELN_F = Evaluate(Str)
    End Function
  5. Schließe den VBA-Editor: Speichere deine Arbeit und schließe den Editor.
  6. Verwende die Funktion in Excel: Du kannst die Funktion jetzt in einer Zelle wie folgt aufrufen:

    =WECHSELN_F("deine Formel", "Variable", "Ersatz_Formel")

Häufige Fehler und Lösungen

  • Fehler: Die Formel wird nur als String ausgegeben.
    Lösung: Stelle sicher, dass du die Evaluate-Funktion in deinem VBA-Code verwendest, um die Formel zu berechnen.

  • Fehler: „Unbekannter Name“-Fehlermeldung.
    Lösung: Überprüfe, ob du die Formel korrekt mit Anführungszeichen eingegeben hast.

  • Problem mit der Zeichenlänge: Wenn die Zeichenlänge der Formel 256 Zeichen überschreitet.
    Lösung: Teile die Formel in mehrere Teile auf und rufe die WECHSELN_F-Funktion mehrmals auf.


Alternative Methoden

  • LET-Funktion: In neueren Excel-Versionen kannst du die LET-Funktion nutzen, um Variablen innerhalb einer Formel zu definieren. Dies kann helfen, die Lesbarkeit und Effizienz deiner Formeln zu verbessern.

  • Name-Manager: Verwende den Namen-Manager, um häufig verwendete Formelteile zu speichern, sodass du sie einfacher wiederverwenden kannst, ohne die WECHSELN-Funktion.


Praktische Beispiele

Beispiel 1: Angenommen, du hast eine Formel wie =A1+B1+C1, und du möchtest B1 durch D1 ersetzen.

=WECHSELN_F("=A1+B1+C1", "B1", "D1")

Beispiel 2: Wenn du eine komplexe Formel hast, die mehrere Male den gleichen Teil verwendet, kannst du diesen Teil durch eine Variable ersetzen.

=WECHSELN_F("=SUM(A1:B1)+SUM(B1:C1)", "B1", "D1")

Tipps für Profis

  • Code optimieren: Achte darauf, dass dein VBA-Code so effizient wie möglich ist, insbesondere wenn du mit langen Formeln arbeitest.
  • Dokumentation: Kommentiere deinen Code, um die Verwendung der WECHSELN-Funktion für andere (oder dich selbst in der Zukunft) verständlicher zu machen.
  • Teste verschiedene Szenarien: Experimentiere mit verschiedenen Formeln und Variablen, um die Flexibilität der Funktion voll auszuschöpfen.

FAQ: Häufige Fragen

1. Wie kann ich die WECHSELN-Funktion in mehreren Zellen verwenden?
Du kannst die Funktion in einer Zelle definieren und dann die Formel einfach nach unten oder zur Seite ziehen, um sie auf andere Zellen anzuwenden.

2. Gibt es eine Begrenzung für die Anzahl der Ersetzungen?
Die Funktion kann theoretisch beliebig oft verwendet werden, aber die Zeichenlängenbeschränkung von 256 Zeichen in der Evaluate-Methode kann eine Einschränkung darstellen.

3. Kann ich die Funktion auch in anderen VBA-Projekten verwenden?
Ja, du kannst die Funktion in jedes VBA-Projekt kopieren und dort verwenden. Achte darauf, die entsprechenden Anpassungen vorzunehmen.

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