Thema Datum  Von Nutzer Rating
Antwort
11.09.2019 09:50:27 FreddyKrüger
NotSolved
11.09.2019 10:51:14 Torsten
NotSolved
11.09.2019 11:10:35 Gast58367
NotSolved
11.09.2019 11:11:34 FreddyKrüger
NotSolved
11.09.2019 14:10:29 Torsten
NotSolved
11.09.2019 15:29:03 FreddyKrüger
NotSolved
11.09.2019 15:47:52 Torsten
NotSolved
11.09.2019 16:40:49 FreddyKrüger
NotSolved
12.09.2019 06:58:40 Torsten
NotSolved
12.09.2019 07:01:47 Torsten
NotSolved
12.09.2019 08:08:23 Gast39949
NotSolved
Blau VBA schleife die Automatisch den Mittelwert anpasst
12.09.2019 08:53:27 Torsten
NotSolved
12.09.2019 10:22:04 Gast6056
NotSolved
12.09.2019 11:15:26 Torsten
NotSolved
12.09.2019 11:18:46 Gast41127
NotSolved
12.09.2019 11:41:36 Torsten
NotSolved
12.09.2019 14:33:14 Gast13425
NotSolved
12.09.2019 14:51:50 Gast23089
NotSolved
12.09.2019 14:59:28 Torsten
NotSolved
12.09.2019 16:00:29 Gast40650
NotSolved
13.09.2019 08:20:21 Torsten
NotSolved
13.09.2019 11:14:20 FreddyKrüger
NotSolved
14.09.2019 00:43:25 Gast86139
NotSolved
14.09.2019 12:19:48 FreddyKrüger
Solved

Ansicht des Beitrags:
Von:
Torsten
Datum:
12.09.2019 08:53:27
Views:
453
Rating: Antwort:
  Ja
Thema:
VBA schleife die Automatisch den Mittelwert anpasst

Hallo Freddy,

es gibt verschiedene Arten, eine solche Schleife aufzubauen. Meine Art ist eine For Next Schleife. Damit beantworte ich gleich die Frage, warum ich die letzte Zeile ermittle. Mit der For Next Schleife gebe ich an, wo gestartet und gestoppt werden soll. Die Startzeile gebe ich direkt an, die weiss ich ja. Irgendwo muss aber die Schleife auch aufhoeren. Und da kommt die letzte Zeile ins Spiel. Die ermittle ich, um der Schleife zu sagen, wenn du das Ende der Tabelle erreichst, dann stop. Mit der Variablen Anzahl habe ich der Berechnung uebergeben, wieviele Zeilen berechnet werden sollen. Das Weiterruecken um eine Zeile fuer die naechste Berechnung geht dann bei der For Next Schleife automatisch, weil die ohne extra Angabe immer eins weiterzaehlt. Also brauchst du keinen Zaehler, wie in deiner Do Loop Schleife. Wenn du die Schrittezahl veraendern willst, sagst du das der For Next Schleife einfach indem du den Step angibst. Z.B.

For i = 2 To letzteA Step 2

In dem Falle wuerde die Schleife immer 2 Zeilen weiterrutschen. Auch wieder bis zur letzten Zeile und dann stop.

Was du in deiner Do Loop Schleife getan hast, die mit dem Recorder aufgezeichnet ist: Du hast in A20 eine Formel eingetragen, um die Berechnung durchzufuehren. Auch eine Moeglichkeit. Aber ich meine immer, wenn ich schon mit VBA arbeite, dann mach ich auch die Berechnung direkt in VBA. Deshalb habe ich die Anweisung Application.WorksheetFunction.Average.... benutzt. Die macht das gleiche wie deine Formel, ist aber flexibler, was Variablenbenutzung angeht. Die Formel umzuschreiben, wie du es versucht hast, ist immer etwas schwierig und kompliziert. Ich habe da auch immer Probleme, deshalb mach ich das nicht gerne. Weil das zu fehleranfaellig ist. Ich meine, man kann zu viele Fehler machen und findet diese dann vielleicht nicht.

In deinem Versuch koenntest du also auch mit dieser Anweisung arbeiten. So:

Sub AverageHelp()
'
' AverageHelp Macro
'
 
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
Dim x As Variant
 
x = 1 'weil er in zeile 2 anfangen soll'
 
Do
    x = x + 1
    Range("A20") = Application.WorksheetFunction.Average(ws.Range("A" & x & ":A" & x + 4))
     
Loop Until x > 18 'In zeile 18 sind meine letzten werte'

End Sub

Uebrigens. Das Weiterruecken um eine Zeile ist gut geloest von dir mit dem Zaehler x.

Hier zur Erklaerung, wie ich die Range fuer die Berechnung zusammengesetzt habe. Eine Range Angabe muss immer so aussehen:

Range("A20") fuer eine einzelne Zelle. Range("A2:A6") fuer einen Bereich aus mehreren Zellen. Also die Angabe in Klammern ist immer ein Textstring. Das kannst du ausnutzen, um diesen String mit Variablen aufzubauen. Die festen Zeichen musst du hierbei in Anfuehrungszeichen setzen und die Variablen mit & oder + einfuegen. Also die Range, die im ersten Schleifendurchlauf berechnet wuerde, waere hier Range("A2:A6"), weil x = 2 ist. Die + 4 am Ende ist die Anzahl Zeilen, die berechnet werden sollen. Diese hatte ich in der variablen "Anzahl" gespeichert. Erinnerst du dich? Also koennte ich auch noch diese + 4 ersetzen mit der Variablen:

Range("A20") = Application.WorksheetFunction.Average(ws.Range("A" & x & ":A" & x + Anzahl))

Die muss natuerlich am Anfang noch deklariert und gefuellt werden.

Dein Loop Until x > 18 ist ja ok, wenn du immer weisst, wo deine letzte Zeile ist. Aber bei grossen und veraenderlichen Datenmengen nicht immer moeglich. Deshalb sollte man auch hier, wie ich, mit der Ermittlung der letzten befuellten Zeile arbeiten. Sonst kann es passieren, dass du die Schleife zu kurz oder zu lang machst, wenn sich die letzte Zeile veraendert. Ausserdem, wenn eine Veraenderung auftritt, muesstest du immer den Code aendern.

Ich hoffe, du verstehst manches etwas besser jetzt.

Gruss Torsten


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
11.09.2019 09:50:27 FreddyKrüger
NotSolved
11.09.2019 10:51:14 Torsten
NotSolved
11.09.2019 11:10:35 Gast58367
NotSolved
11.09.2019 11:11:34 FreddyKrüger
NotSolved
11.09.2019 14:10:29 Torsten
NotSolved
11.09.2019 15:29:03 FreddyKrüger
NotSolved
11.09.2019 15:47:52 Torsten
NotSolved
11.09.2019 16:40:49 FreddyKrüger
NotSolved
12.09.2019 06:58:40 Torsten
NotSolved
12.09.2019 07:01:47 Torsten
NotSolved
12.09.2019 08:08:23 Gast39949
NotSolved
Blau VBA schleife die Automatisch den Mittelwert anpasst
12.09.2019 08:53:27 Torsten
NotSolved
12.09.2019 10:22:04 Gast6056
NotSolved
12.09.2019 11:15:26 Torsten
NotSolved
12.09.2019 11:18:46 Gast41127
NotSolved
12.09.2019 11:41:36 Torsten
NotSolved
12.09.2019 14:33:14 Gast13425
NotSolved
12.09.2019 14:51:50 Gast23089
NotSolved
12.09.2019 14:59:28 Torsten
NotSolved
12.09.2019 16:00:29 Gast40650
NotSolved
13.09.2019 08:20:21 Torsten
NotSolved
13.09.2019 11:14:20 FreddyKrüger
NotSolved
14.09.2019 00:43:25 Gast86139
NotSolved
14.09.2019 12:19:48 FreddyKrüger
Solved