Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Funktion rekursiv aufrufen ?

Forumthread: Funktion rekursiv aufrufen ?

Funktion rekursiv aufrufen ?
ing.grohn
Hallo Forum,
in einer Rechnungstabelle wird in Spalte B die "Artikelnummer" eingetragen. Drei benutzerdfinierte Funktionen holen den "Artikel"-Text (Spalte C), den Einheitspreis (Spalte G) und den Steuerschlüssel (Spalte E). Nun kommt es vor, dass eine Artikelnummer zwingend eine Folgeartikelnummer hat (wenn Abwesenheitsgeld berechnet wird, muss auch Kilometergeld gerechnet werden). Der Artikel Kilometergeld kann allerdings auch alleine gerechnet werden.
Wie mach ich das?
Ich habe hier eine Beispielfunktion:
Function Texte(Vergleich As String) As String
Dim Text As String
Dim EndeText As String
Dim Ende As Integer
EndeText = Sheets("Konstanten").Range("G3").Value
Ende = Val(Mid(EndeText, InStr(2, EndeText, "$") + 1))
Texte = Sheets("Konstanten").Range("G17").Value 'Text, falls Art-Nr nicht vorhanden
For I = 18 To Ende
Zeile = Format(I, "0")
Text = Sheets("Konstanten").Range("F" + Zeile).Value
If Text = Vergleich Then
Text = Sheets("Konstanten").Range("G" + Zeile).Value
Texte = Text
Exit Function
End If
Next I
End Function

Vielen Dank für die freundliche Unterstützung
Mit freundlichen Grüßen
Albrecht
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
mit VBA-Funktion?
12.05.2010 13:14:43
Erich
Hi Albrecht,
so wie du das vorhast, dürfte das kaum klappen. Mit "rekursiv" hat das wenig zu tun. :-(
Eine solche Fkt. liefert einen Wert. Sie ändert (außer ihrem eigenen Wert natürlich) nichts.
Probier es einfach aus: Schreib in eine Fkt mal testhalber eine Zeile Range("CC1")=1 (wenn CC1 leer ist)
Es wird einen Laufzeitfehler geben, wenn du die Fkt. in einer Formel aufrufst.
Du verwendest sie in einer Formel, die du in eine Zelle schreibst.
Der Wert der Zelle ist der Wert der Formel, der Wert der Formel hängt (auch) vom Wert der Fkt. ab.
In welcher Zelle steht deine Fkt.? In welchen weiteren Zellen sollte durch die Fkt. etwas geändert werden?
Was, wenn in diesen weiteren Zellen schon etwas steht? Das passt alles nicht.
Warum arbeitest du hier überhaupt mit VBA-Funktionen? Das kann Excel doch auch.
Hier mal eine Mappe mit ein paar Möglichkeiten:
https://www.herber.de/bbs/user/69558.xls
Was du möchtest, lässt sich aber sicher mit einer VBA-Prozedur erledigen,
die auch evtl. benötigte Zeilen oder Spalten einfügen kann.
Dazu wären aber weitere Infos nötig:
Wann und wie soll die Prozedur gestartet werden?
Wo und wie ist niedergelegt, welche Artikel welche Folgeartikel haben?
Wo sollen die Folgeartikel eingefügt werden?
Gut wäre sicher eine Beispielmappe (nicht XL2007ff).
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: mit VBA-Funktion?
13.05.2010 14:55:25
ing.grohn
Hallo Erich,
bin erst vorhin dazu gekommen, die Nachricht zu lesen.
Ich bin eigentlich schon weg, wahrscheinlich Montag zurück und würd mich dann melden.
Vielen Dank für die ANtwort.
Mit freundlichen Grüßen
Albrecht
;
Anzeige
Anzeige

Infobox / Tutorial

Rekursive Funktionen in Excel richtig anwenden


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und erstelle eine neue Arbeitsmappe oder öffne eine bestehende Tabelle.

  2. Gehe zum VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Füge ein neues Modul hinzu: Klicke im linken Bereich auf „Einfügen“ und wähle „Modul“.

  4. Schreibe deine rekursive Funktion: Hier ist ein einfaches Beispiel, das zeigt, wie man eine rekursive Funktion erstellt:

    Function Fibonacci(n As Integer) As Long
       If n <= 1 Then
           Fibonacci = n
       Else
           Fibonacci = Fibonacci(n - 1) + Fibonacci(n - 2)
       End If
    End Function
  5. Schließe den VBA-Editor und kehre zu deiner Excel-Tabelle zurück.

  6. Verwende die Funktion in einer Zelle, indem du =Fibonacci(5) eingibst, um die 5. Fibonacci-Zahl zu berechnen.


Häufige Fehler und Lösungen

  • Laufzeitfehler beim Aufruf der Funktion: Überprüfe, ob du die Funktion in einer Zelle aufrufst, die von anderen Zellen abhängig ist. Das kann zu Problemen führen, da Excel nicht mit rekursiven Formeln in Zellen umgehen kann.

  • Funktion liefert unerwartete Werte: Achte darauf, dass die Basisbedingungen in deiner rekursiven Funktion korrekt definiert sind, um Endlosschleifen zu vermeiden.


Alternative Methoden

Wenn du eine rekursive Formel in Excel nicht verwenden kannst, gibt es alternative Methoden, um ähnliche Ergebnisse zu erzielen. Eine Möglichkeit ist die Verwendung von Schleifen in VBA:

Function SummeBisN(n As Integer) As Long
    Dim Summe As Long
    Dim i As Integer
    For i = 1 To n
        Summe = Summe + i
    Next i
    SummeBisN = Summe
End Function

Diese Funktion summiert alle Zahlen von 1 bis n ohne Rekursion und ist oft einfacher zu handhaben.


Praktische Beispiele

  1. Berechnung von Artikelnummern: Angenommen, du hast eine Tabelle, in der Artikelnummern eingegeben werden. Mit einer rekursiven Funktion kannst du automatisch die zugehörigen Folgeartikelnummern abrufen.

    Function Folgeartikel(ArtikelNr As String) As String
       ' Logik zur Bestimmung der Folgeartikelnummer
    End Function
  2. Steuerberechnung basierend auf Artikelnummern: Diese Methode kann auch verwendet werden, um Steuerschlüssel auf Basis der Artikelnummer zu berechnen.


Tipps für Profis

  • Vermeide komplexe rekursive Formeln: Halte deine Funktionen so einfach wie möglich, um die Lesbarkeit und Wartbarkeit zu erhöhen.
  • Testen der Funktion: Teste jede Funktion gründlich mit verschiedenen Eingabewerten, um sicherzustellen, dass sie wie erwartet funktioniert.
  • Verwende Kommentare: Kommentiere deinen Code, um die Logik hinter der rekursiven Funktion zu erläutern.

FAQ: Häufige Fragen

1. Kann ich rekursive Formeln in Excel verwenden? Ja, aber sei vorsichtig, da Excel nicht immer gut mit rekursiven Formeln umgehen kann. Oft ist eine VBA-Funktion die bessere Wahl.

2. Was sind die Vorteile von rekursiven Funktionen? Rekursive Funktionen können komplexe Probleme elegant lösen, indem sie das Problem in kleinere Teilprobleme zerlegen.

3. Wie kann ich Laufzeitfehler in meinem VBA-Code vermeiden? Stelle sicher, dass deine Basisbedingungen korrekt sind und dass die Funktion nicht in eine Endlosschleife gerät. Debugging ist auch ein wichtiger Schritt zur Fehlerbehebung.

4. In welcher Excel-Version sind diese Funktionen verfügbar? Die beschriebenen Methoden sind in Excel 2010 und höheren Versionen verfügbar.

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