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

Forumthread: Formel Trend in VBA Code

Formel Trend in VBA Code
19.08.2005 11:06:38
Thomas
Trendbrechnungen in VBA
Ich habe folgendes Problem.
Jeden Monat möchte ich Trendberechnungen durchführen.
Die Werte für den Trend sollen aus einer anderen Tabelle (Tabelle39) bezogen werden. Gebe ich nun in Tabelle40 Zeile A3 den Functionsnamen MTrend(E1)
Dazu habe folgende Funktion geschrieben:

Function MTrend(r)
Dim a As Double
a = Application.WorksheetFunction.Trend(Tabelle39.Range("G16:I16;;4"))
Application.Volatile
Select Case r.Value
Case Is = 8: MTrend = a
End Select
End Function

Gebe ich nun in Tabelle40 Zeile A3 den Functionsnamen MTrend(E1)und in er
Zeile E1 8 ein (Case Is = 8), so soll mit Hilfe der

Function der Trend
für August berechnet werden. Stattdessen kommt die Fehlermeldung #Wert.
Wo liegt in obiger Funktion der Fehler?
Leo konnte mir leider nicht helfen, darum stelle ich das Problem nochmal
aktuell ins Forum.
Natürlich könnte ich das Problem mit einem CommandoButton lösen, damit
die Formel in die entsprechende Zelle geschrieben wird. Aber ich möchte
gerne die elegantere Lösung.
Damit die Funktion jederzeit automatisch den richtigen Wert liefert, wenn
sich der Monat ändert, habe ich die Methode Volatile benutzt.
Das Argument r habe ich für einen Zellbezug übergeben.
Wer kann mir helfen?
Danke
Thomas

		
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ergänzung von Haas Thomas
19.08.2005 11:14:33
Haas
Ergänzend möchte ich noch hinzufügen, daß diese Formel Excelformel in VBA-Code
dargestellt werden soll.
TREND(Tabelle39!G16:I16;;4)
AW: Formel Trend in VBA Code
19.08.2005 11:20:35
Ramses
Hallo
"...Dazu habe folgende Funktion geschrieben..."
Hast du die normale Trend-Funktion in einem Arbeitsblatt schon mal verwendet ?
Wahrscheinlich sicher nicht, weil deine Syntax mit der Übergabe NUR eines Bereiches völlig falsch ist.
Sie dir mal die Syntax dazu in der EXCEL Online-Hilfe an (NICHT VBA Online-Hilfe
Ausserdem dürfen in einer Funktion keine Semikola vorkommen, sondern sind durch "Komma" zu ersetzen
a = Application.WorksheetFunction.Trend(Worksheets("Tabelle39").Range("G16:G25"),Worksheets("Tabelle39").Range("H16:H25"),Worksheets("Tabelle39").Range("I16:I25"),WAHR))
heissen.
Wobei ich das nun nicht geprüft habe.
Aber der Funktionsaufbau und die Parameterübergabe müssen natürlich gleich sein, wie in der normalen Tabellenfunktion.
Gruss Rainer
Anzeige
AW: Formel Trend in VBA Code
19.08.2005 12:27:27
Thomas
Hallo Ramses!
Funktioniert leider nicht.
1. eine Klammer zuviel. Hab ich weggemacht.
2. dann kommt die Meldung "Variable nicht definiert". WAHR ist markiert, d. h. nicht
definiert.
Würde mich freuen, wenn du helfen könntest.
Danke
Thomas
AW: Formel Trend in VBA Code
19.08.2005 12:42:16
Ramses
Hallo
Englisch :-)
Schreibe TRUE statt WAHR
Die Bereiche müssen natürlich ALLE gefüllt sein
Gruss Rainer
Anzeige
AW: Funktioniert auch nicht
19.08.2005 13:49:44
Thomas
Hallo Rainer!
a = Application.WorksheetFunction.Trend(Worksheets("Tabelle39").Range("G16:G25"), Worksheets("Tabelle39").Range("H16:H25"), Worksheets("Tabelle39").Range("I16:I25"), True)
Auch hier kommt wieder die Rückmeldung #WERT
Kannst Du mir weiterhelfen?
Thomas
Sorry,...
19.08.2005 14:03:05
Ramses
Hallo
..tut mir leid, das kann ich nicht nachvollziehen
Das ist meine Tabelle ...
GHIJ
155.59701493
16154
17245
18336
19447
20553
21664
22775
23834
24923
251045
26

...der Wert in G15 wurde mit folgendem Code eingefügt
Range("G15")= Application.WorksheetFunction.Trend(Range("G16:G25"), Range("h16:h25"), Range("i16:i25"), True)
Gruss Rainer
Anzeige
AW: Sorry,...
19.08.2005 15:13:57
Thomas
Hallo Rainer
Lade dir mal das hoch https://www.herber.de/bbs/user/25767.xls
die Werte befinden sich in Tabelle1 horizontal. Der Wert für August soll
in Tabelle2 errechnet werden.
die Formel dazu lautet: =TREND(Tabelle1!A2:G2;;4)
Ich hoffe, du kannst dir nun besser ein Bild davon machen.
Kannst Du mir nun wieder helfen?
Thomas
Anzeige
AW: Sorry,...
19.08.2005 15:51:09
Ramses
Hallo
Also ich sehe da kein Problem
 
 ABCDEFGHI
1JanuarFebruarMärzAprilMaiJuniJuliAugustSeptember
2         
31250014520121001520017250178501695012500 
4         
 

und der Wert wird damit geschrieben
Range("H3")=Application.WorksheetFunction.Trend(worksheets("Tabelle1").Range("A3:G3"),,,4)
Gruss Rainer
Anzeige
AW: Fast korrekt
19.08.2005 16:44:11
Thomas
Hallo Rainer!
Vielen Dank für deine Bemühungen. Aber es ist noch nicht ganz richtig.
Du hast dir sicher meine Tabelle runtergeladen.
Darin siehst Du in Tabelle1 die Zellen A1 - L1 die Monate.
Darunter stehen die Werte, die jeden Monat erreicht wurden.
A2 - L2.
Bis jetzt liegen aber nur die Werte Jan - Jul. vor. (A2 - G2) (Tabelle1)
In Tabelle2 soll nun in der Zelle A5 der Trend für August berechnet werden.
Gebe ich nun in Feld E1 der Tabelle2 die Zahl 8 ein, so soll in der Zelle A5 in
Tabelle2 der Trend für August angegeben werden.
In deinem Lösungsvorschlag muß ich das in Tabelle1 machen.
Die Excelformel dazu lautet =TREND(Tabelle1!A3:G3;;8).
Diese möchte ich nun durch eine VBA-Formel ersetzten. Ich möchte es so programmieren,
daß, wenn ich in der Tabelle2 Zelle E1 die Zahl 9 eingebe, der Trend für September
berechnet wird.

Function MTrend(r)
Dim a As Double
a = Application.WorksheetFunction.Trend(Tabelle1.Range("A3:G3,,,8"))
b = Application.WorksheetFunction.Trend(Tabelle1.Range("A3:H3,,,9"))
Application.Volatile
Select Case r.Value
Case Is = 8: MTrend = a
Case Is = 9: MTrend = b
End Select
End Function

wie gesagt, ich bekomme immer die Rückmeldung #WERT
Kannst Du mir nochmal helfen?
Wenn es geht, so gib den ganzen Quellcode an.
Danke
Thomas
Ich gebe dir ein Beispiel das funktionier:
In einer Arbeitsmappe ist folgende

Function erstellt.

Function SOLLEL(r)
Dim a As Double
Dim b As Double
Dim c As Double
Dim d As Double
Dim e As Double
Dim f As Double
Dim g As Double
Dim h As Double
Dim i As Double
Dim j As Double
Dim k As Double
Dim l As Double
a = Application.WorksheetFunction.Sum(Tabelle35.Range("C19"))
b = Application.WorksheetFunction.Sum(Tabelle35.Range("C19:D19"))
c = Application.WorksheetFunction.Sum(Tabelle35.Range("C19:E19"))
d = Application.WorksheetFunction.Sum(Tabelle35.Range("C19:F19"))
e = Application.WorksheetFunction.Sum(Tabelle35.Range("C19:G19"))
f = Application.WorksheetFunction.Sum(Tabelle35.Range("C19:H19"))
g = Application.WorksheetFunction.Sum(Tabelle35.Range("C19:I19"))
h = Application.WorksheetFunction.Sum(Tabelle35.Range("C19:J19"))
i = Application.WorksheetFunction.Sum(Tabelle35.Range("C19:K19"))
j = Application.WorksheetFunction.Sum(Tabelle35.Range("C19:L19"))
k = Application.WorksheetFunction.Sum(Tabelle35.Range("C19:M19"))
l = Application.WorksheetFunction.Sum(Tabelle35.Range("C19:N19"))
Application.Volatile
Select Case r.Value
Case Is = 1: SOLLEL = a
Case Is = 2: SOLLEL = b
Case Is = 3: SOLLEL = c
Case Is = 4: SOLLEL = d
Case Is = 5: SOLLEL = e
Case Is = 6: SOLLEL = f
Case Is = 7: SOLLEL = g
Case Is = 8: SOLLEL = h
Case Is = 9: SOLLEL = i
Case Is = 10: SOLLEL = j
Case Is = 11: SOLLEL = k
Case Is = 12: SOLLEL = l
End Select
End Function

Wie du siehst werden hier Monatszahlen aufaddiert.
Gebe ich in einer Zelle die Funktion =SOLLEL(E1)ein, und in der Zelle E1 die
Zahl 7, so erhalte ich die Summe von Jan - Jul.
Die Berechnung des Trends soll nach dem gleichen Schema funktionieren.
Wie gesagt. In Tabelle2 Zelle A3 soll dann der Trend für August berechnet werden,
wenn ich in der Zelle z.B. E1 der Tabelle2 den Wert 8 eingebe. (Case Is = 8: MTrend = a)
Ich hoffe du kannst mir weiterhelfen!
Anzeige
AW: Hilfe Reiner
19.08.2005 23:45:10
Thomas
Hallo Reiner!
Kannst Du mir bei meinem Problem noch helfen.
Auch ich sitze fast schon 12 Std am PC.
Aber gelöst habe ich es noch nicht.
Bitte gib mir bescheid.
Thomas
AW: Hilfe Reiner
20.08.2005 09:43:28
Ramses
Hallo
"...Auch ich sitze fast schon 12 Std am PC...."
Nur du machst das beruflich um dein Problem zu lösen, und ich mache es lauter Langeweile um anderen zu helfen.
Ich habe die Antwort von dir erst heute morgen gesehen.
Ich weiss nicht warum das unbedingt VBA sein muss, aber eben.
Diese Formel funktioniert so wie du willst. Das umsetzen in VBA ist ja kein Problem.
Du musst bloss die Bezüge anpassen.
 
 ABCDEF
1Trend für Monat : August  Bezug auf Monat8 
2      
316450     
4      
Formeln der Tabelle
A1 : ="Trend für Monat : " & WAHL(E1;"Januar";"Februar";"März";"April";"Mai";"Juni";"Juli";"August";"September";"Oktober";"November";"Dezember")
A3 : =TREND(Tabelle1!E3:G3;;E1)
 

Gruss Rainer
Anzeige
AW: Danke!!
20.08.2005 15:17:30
Thomas
Hallo Rainer!
Zuerst vielen Dank für deine Bemühungen.
Ich ziehe die VBA-Lösung vor, weil ich dann die Parameterwerte
für die anderen Trendberechnungen nicht mehr manuel ändern muß.
Ich werde das Problem mit einem CommandoButton beheben, der dann
die entsprechende Formel einspiel.
Sicherlich da nur einen Knopf drücken (CommandButton-Lösung) dort
muß ich nur den entsprechenden Monat als Zahl eingeben.
Aber trotzdem hätte ich die Functions-Lösung vorgezogen.
Vielen Dank und schönes Wochenende
Thomas
:-)!!
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

VBA zur Berechnung von Trends in Excel


Schritt-für-Schritt-Anleitung

Um eine Trendberechnung in Excel mit VBA durchzuführen, befolge diese Schritte:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul:

    • Klicke mit der rechten Maustaste auf "VBAProject (dein Arbeitsbuch)" und wähle Einfügen > Modul.
  3. Füge den folgenden Code ein:

    Function MTrend(r As Range) As Double
       Dim a As Double
       Dim b As Double
    
       ' Berechnung des Trends für August
       a = Application.WorksheetFunction.Trend(Worksheets("Tabelle1").Range("A3:G3"), , , r.Value)
       ' Berechnung des Trends für September
       b = Application.WorksheetFunction.Trend(Worksheets("Tabelle1").Range("A3:H3"), , , r.Value + 1)
    
       Application.Volatile
    
       Select Case r.Value
           Case 8: MTrend = a
           Case 9: MTrend = b
       End Select
    End Function
  4. Verwende die Funktion in Excel:

    • Gebe in Zelle E1 den Monat (z.B. 8 für August) ein.
    • In Zelle A5 schreibe die Formel =MTrend(E1), um den Trend für den angegebenen Monat zu berechnen.

Häufige Fehler und Lösungen

  • Fehler: #WERT!
    Lösung: Überprüfe, ob die Zellen in den angegebenen Bereichen (z.B. A3:G3) korrekt gefüllt sind. Alle Bereiche müssen Werte enthalten.

  • Fehler: Variable nicht definiert
    Lösung: Stelle sicher, dass alle Variablen im Code korrekt deklariert sind. Insbesondere der Bezug auf r sollte als Range deklariert werden.

  • Fehler: Falsche Syntax
    Lösung: Verwende Kommas anstelle von Semikolons in der Funktion Trend. Die korrekte Syntax lautet:

    Application.WorksheetFunction.Trend(Range, , , r.Value)

Alternative Methoden

  1. Verwendung von Excel-Formeln direkt:

    • Du kannst die TREND-Funktion direkt in Excel verwenden, ohne VBA:
      =TREND(Tabelle1!A3:G3,,E1)
  2. CommandButton-Lösung:

    • Implementiere einen CommandButton, der beim Klicken die Trendwerte automatisch in die entsprechenden Zellen einfügt. Dies erfordert jedoch zusätzliche Programmierung.

Praktische Beispiele

  • Beispiel für die Trendberechnung: Wenn du die Werte für Januar bis Juli in den Zellen A3:G3 hast und in E1 die Zahl 8 eingibst, wird die Formel =MTrend(E1) den Trend für August berechnen.

  • Benutzerdefinierte Trendberechnungen: Du kannst die VBA-Funktion so anpassen, dass sie auch für andere Monate funktioniert, indem du die Select Case-Anweisung erweiterst.


Tipps für Profis

  • Verwende Application.Volatile: Dies stellt sicher, dass die Funktion immer aktualisiert wird, wenn sich die Eingabewerte ändern.

  • Fehlerbehandlung einfügen: Implementiere eine Fehlerbehandlung in deinen Funktionen, um unerwartete Fehler elegant zu handhaben:

    On Error GoTo ErrorHandler
    ' Dein Code hier
    Exit Function
    
    ErrorHandler:
      MTrend = "Fehler aufgetreten"
  • Dokumentiere deinen Code: Füge Kommentare hinzu, um die Funktionalität und den Zweck deiner Funktionen zu erläutern.


FAQ: Häufige Fragen

1. Wie kann ich die Funktion für andere Monate anpassen?
Du kannst die Select Case-Anweisung erweitern, indem du zusätzliche Case-Bedingungen für die Monate hinzufügst.

2. Funktioniert dies in Excel 2016?
Ja, dieses VBA-Skript ist mit Excel 2016 sowie neueren Versionen kompatibel.

3. Was mache ich, wenn ich die Formel in mehreren Zellen verwenden möchte?
Du kannst die Funktion MTrend in verschiedenen Zellen verwenden, indem du den Bezug auf E1 entsprechend änderst.

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