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

Rechnen mit Werten aus Array / Vektor

Forumthread: Rechnen mit Werten aus Array / Vektor

Rechnen mit Werten aus Array / Vektor
25.08.2013 19:27:14
Andi
Hallo zusammen,
ich habe verschiedene (variabel lange) Zeitreihen, auf deren Basis ich die tägliche Wertveränderung berechne und von diesen zum Beispiel den Mittelwert berechne.
Bis dato habe ich die Wertveränderungen separat berechnet und ausgegeben und dann den Mittelwert berechnet. Ich glaube aber, dass man das auch in einem array machen kann?!
Idee ist, die Ergebnisse für die täglichen Wertveränderungen in den array „zu schreiben“ und dann den array zu nutzen um zum Bsp. den Mittelwert oder die Varianz zu berechnen.
Habt ihr hierzu eine Idee?
Besten Dank und viele Grüße

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
tausend Vorschläge
25.08.2013 19:54:05
Christian
Hallo Andi,
wie wäre es denn, wenn Du Deine Datei zur Verfügung stellst?
Bei fast allen Helfern ist die Glaskugel noch im Wochenendmodus ;-)
MfG Christian

Ist viell nicht genau das, was du suchst, aber ...
25.08.2013 20:06:18
Luc:-?
…sicher wenigstens bsphaft nützlich, Andi … ;-]
UDF VectAr
Gruß Luc :-?

Anzeige
AW: Ist viell nicht genau das, was du suchst, aber ...
26.08.2013 13:37:49
Andi
Hallo,
vielen Dank!! Luc – das ist sicher ein tolles makro vielleicht steht sogar das drin, was ich suche aber leider steig ich da nicht durch...
Die Datei sieht beispielsweise so aus (jedoch mit bis zu 500? Werten je Reihe):
Userbild
Die Berechnung aus Spalte C wuerde ich gerne im array machen/ das Ergebnis dort ablegen und dann zum Beispiel den Mittelwert auf Basis des arrays bilden, der mir dann in „B1“ ausgegeben wird – aktuell habe ich das noch mit Formeln gemacht.
So nach dem Motto (auch wenn "etwas" einfach dargestellt)
Dim array
Array( d4 to D“letzteZeile“)
For x to letzteZeile
x(t)/x(t-1) – 1
next
B1= Mittelwert(array)
Besten Dank für Eure Hilfe

Anzeige
Da nutzt dir die UDF nicht viel, denn die ...
26.08.2013 15:52:12
Luc:-?
…wandelt entweder die Zeilen oder Spalten eines matrixförmigen Zellbereichs in Einzelvektoren um, die ebenfalls in einem Vektor zusammengefasst wdn (sog Variant mit einem Datenfeld). Das ist u.a. dann von Vorteil, wenn man zeilen- bzw spaltenorientierte Teilergebnisse bilden will. Du hast aber offensichtlich anderes vor.
Falls erforderlich melde ich mich im Laufe des Abends noch mal. Habe jetzt vorerst keine Zeit.
Gruß Luc :-?

Anzeige
Aber natürlich käme sie auch damit zurecht, ...
26.08.2013 21:37:38
Luc:-?
…Andi,
das kann MITTELWERT aber auch:
B1:{=MITTELWERT(B5:B32/B4:B31)}
Meine UDF liefert hier das gleiche Ergebnis:
B1:{=VectAr(B5:B32/B4:B31;1;1)}
Das könnte sie im Ggsatz zu den XlFktt TEILERGEBNIS und AGGREGAT auch für Teilergebnisse trotz des durch die Division entstehenden Datenfelds, das die beiden (neueren bis neuesten) XlFktt nicht mögen.
Damit könntest du auf Spalte C verzichten, was wohl der eigentliche Hintergrund für deinen VBA-Versuch ist.
Übrigens könntest du die beiden Fktt so nicht in einer VBA-Subprozedur einsetzen. Hier müsstest du tatsächlich erst das DivisionsDatenfeld (array) berechnen und dann diese Variable der jeweiligen Fkt als 1.Argument übergeben. Alternativ könntest du natürlich auch mit Cells(1, 2) = Evaluate("average(" & adBer1 & "/" & adBer2 & ")") (für Const adBer1$ = "B5:B32", adBer2$ = "B4:B31" ) in deinem Pgm arbeiten (fktt analog auch mit VectAr!), aber ein Pgm für nur einen Wert lohnt sich nicht, wenn man das auch mit einer Fml lösen kann.
Gruß Luc :-?

Anzeige
AW: Aber natürlich käme sie auch damit zurecht, ...
27.08.2013 17:10:11
Andi
Hallo Luc,
die Lösung über die Formel gefällt mir sehr gut!!
Gibt es hierfür auch die Möglichkeit den Bezug variabel zu gestalten? Die Reihe fängt immer in der gleichen Zeile an, kann aber unterschiedlich lang sein – hast du dafür noch eine Idee?
Besten Dank!!

Das kannst du ganz genau machen wollen, ...
27.08.2013 19:18:41
Luc:-?
…Andi,
oder dich einfach am größtmöglichen Zellbereich orientieren:
{=MITTELWERT(WENN(ISTLEER(B5:B132);"";B5:B132/B4:B131))}
Dann müssen aber alle der Endzeile folgenden Zeilen bis hier Zeile 132 leer bleiben!
Wolltest du die Endzeile ganz genau ermitteln, würde die Fml deutlich länger wdn (Konstrukte mit INDEX bzw INDIREKT).
Soll die ganze Spalte angegeben wdn, ginge das so:
{=MITTELWERT(WENN(ISTLEER(BEREICH.VERSCHIEBEN(B:B;4;0;99;1));"";BEREICH.VERSCHIEBEN(B:B;4;0;99;1) /BEREICH.VERSCHIEBEN(B:B;3;0;99;1))) }
(99 steht hier für die MaxAnzahl der Zeilen minus 1 Zeile) Aber das empfehle ich eher nicht (die Folgezeilen bis hier zur Zeile 103 müssen leer bleiben)!
Gruß Luc :-?
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Rechnen mit Werten aus Array und Vektor in Excel


Schritt-für-Schritt-Anleitung

  1. Daten vorbereiten: Stelle sicher, dass Deine Daten in einem Excel-Blatt organisiert sind. Zum Beispiel solltest Du die Werte in Spalte B und die vorherigen Werte in Spalte C haben.

  2. Array definieren: Verwende VBA oder eine Formel, um ein Array zu definieren. Beispiel für die Verwendung von VBA:

    Dim array() As Double
    ReDim array(1 To letzterWert) ' letzterWert ist die Anzahl der Werte
  3. Wertveränderungen berechnen: Implementiere eine Schleife, um die täglichen Wertveränderungen zu berechnen und diese in das Array zu schreiben:

    For x = 2 To letzterWert
        array(x) = (Cells(x, 2) / Cells(x - 1, 2)) - 1
    Next x
  4. Mittelwert berechnen: Berechne den Mittelwert des Arrays und schreibe das Ergebnis in eine Zelle, z.B. B1:

    Cells(1, 2).Value = Application.WorksheetFunction.Average(array)

Häufige Fehler und Lösungen

  • Fehler: "Typenunverträglichkeit" beim Arbeiten mit Arrays.

    • Lösung: Stelle sicher, dass Du das richtige Datentyp für das Array verwendest (z.B. Double für numerische Werte).
  • Fehler: "Bereich ist leer" beim Berechnen des Mittelwerts.

    • Lösung: Überprüfe, ob das Array tatsächlich Werte enthält, bevor Du den Mittelwert berechnest.

Alternative Methoden

  • Formeln nutzen: Anstelle von VBA kannst Du auch Excel-Formeln verwenden, um den Mittelwert direkt zu berechnen:

    =MITTELWERT(B5:B32/B4:B31)
  • Dynamische Bereiche: Um sicherzustellen, dass sich der Bereich automatisch anpasst, kannst Du die BEREICH.VERSCHIEBEN-Funktion verwenden:

    =MITTELWERT(WENN(ISTLEER(BEREICH.VERSCHIEBEN(B:B;4;0;99;1));"";BEREICH.VERSCHIEBEN(B:B;4;0;99;1) / BEREICH.VERSCHIEBEN(B:B;3;0;99;1)))

Praktische Beispiele

Angenommen, Du hast folgende Werte in Spalte B:

B
100
110
105
115

Die Formel zur Berechnung der täglichen Wertveränderung könnte so aussehen:

{=MITTELWERT(B5:B8/B4:B7)}

Dies würde den Mittelwert der prozentualen Veränderungen ausgeben.


Tipps für Profis

  • Verwende Named Ranges: Wenn Du oft mit bestimmten Daten arbeitest, kannst Du benutzerdefinierte Namen für Bereiche verwenden, um die Lesbarkeit der Formel zu verbessern.

  • Dynamische Arrays: Ab Excel 365 kannst Du dynamische Arrays direkt in Formeln verwenden, was die Berechnung vereinfacht.

  • Fehlerüberprüfung: Nutze die WENNFEHLER-Funktion, um potenzielle Fehler in Deinen Berechnungen elegant zu handhaben.


FAQ: Häufige Fragen

1. Frage Wie kann ich die Länge des Arrays dynamisch anpassen?

Antwort: Du kannst die ReDim-Anweisung in VBA verwenden, um die Größe des Arrays während der Ausführung anzupassen. Ein Beispiel wäre:

ReDim array(1 To Cells(Rows.Count, 2).End(xlUp).Row)

2. Frage Kann ich die Berechnung auch ohne VBA durchführen?

Antwort: Ja, Du kannst alle Berechnungen mit Excel-Formeln durchführen, wie in den oben genannten Beispielen gezeigt.

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