Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
652to656
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
652to656
652to656
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
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

		

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
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
Anzeige
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
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
:-)!!

314 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige