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

Forumthread: Matrix automatisch füllen

Matrix automatisch füllen
03.11.2006 14:17:22
Thomas
Hallo,ich brauch mal eure Hilfe.
ich habe in einer Spalte( z.b. A:) Werte.Die Grösse dieser Matrix ist nicht immer gleich.
die nächste Spalte(also B:) soll automatisch mit den Mittelwerten aufgefüllt werden und zwar in der Form: in der vorletzten Zeile von B: steht der Mittelwert der letzten drei Werte von A:, darüber der Mittelwert der letzten 5 Werte von A: , in der darüber der Mittelwert der letzten 7 Werte von A: usw.
Bei z.B. 501 A:-Werten erhält man also 251 B:-Werte.
Es müsst also erst die Länge von Matrix A ermittelt werden und dann die automatische Füllung von B durchgeführt werden.
Vielleicht kann mir jemand bei dem VBA-code helfen
Danke Thomas
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Matrix automatisch füllen
03.11.2006 14:43:14
Ptonka
Hallo,
versuche es mal mit diesem Code:
Sub Mittelwerte() Anzahl = [A65536].End(xlUp).Row For i = Anzahl - 2 To 1 Step -2 Summe = 0 For j = i To Anzahl Summe = Summe + Cells(j, 1).Value Next j Cells(i + 1, 2).Value = Summe / (Anzahl - i + 1) Next i End Sub
Gruß,
Ptonka
P.S. Feedback wäre schön!!!
Anzeige
AW: Matrix automatisch füllen
03.11.2006 15:33:03
Thomas
Danke, prima Ptonka, dass hilft mir schon mal, allerdings überlege ich gerade wie ich deinen code verändern muss, um die Leerzellen wegzukriegen(alle erechneten B:-Zellen sollen direkt übereinander (ohne Leerfelder) ,da ich als nächstes die Korrelation der beiden Matrixen in C: berechnen will und zwar auch übereinander ,also auch letzten zwei Werte von A: und B:,dann die letzten drei Werte von A: und B: usw bis (meinen Beispiel folgend) die Korrelation der 251 A:und B:-Werte.Wäre schön ,wenn du mir nochmal helfen könntest.
Vielen dank jetzt schon Thomas
Anzeige
AW: Matrix automatisch füllen
04.11.2006 07:10:03
Erich
Hallo Thomas,
du kannst das auch mit Formeln erledigen:
 ABCD
11999
22121212
3416,333333316,333333316,3333333
47   
511   
616   
722   

Formeln der Tabelle
ZelleFormel
C1=WENN(ZEILE()>ANZAHL(A:A)/2;"";MITTELWERT(INDIREKT("A"&2*ZEILE()-1&":"&"a"&ANZAHL(A:A))))
D1=WENN(ZEILE()>(ANZAHL(A:A)-1)/2;"";MITTELWERT(INDIREKT("A"&2*ZEILE()-1+REST(ANZAHL(A:A)+1;2)&":"&"a"&ANZAHL(A:A))))
C2=WENN(ZEILE()>ANZAHL(A:A)/2;"";MITTELWERT(INDIREKT("A"&2*ZEILE()-1&":"&"a"&ANZAHL(A:A))))
D2=WENN(ZEILE()>(ANZAHL(A:A)-1)/2;"";MITTELWERT(INDIREKT("A"&2*ZEILE()-1+REST(ANZAHL(A:A)+1;2)&":"&"a"&ANZAHL(A:A))))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Spalte B wurde durch ein Makro ausgefüllt:
Option Explicit
Sub Mittelwerte2()
Dim Anz As Long, ii As Long, j As Long, zz As Long, nn As Long, sum As Double
Anz = [A65536].End(xlUp).Row ' sollte ungerade sein (sonst bleibt A1 unberücksichtigt)
sum = Cells(Anz, 1)
nn = 3
ii = Anz - 1
zz = ii / 2 - 0.1
Columns(2).ClearContents
While ii > 1
sum = sum + Cells(ii, 1) + Cells(ii - 1, 1)
Cells(zz, 2) = sum / nn
ii = ii - 2
nn = nn + 2
zz = zz - 1
Wend
End Sub
Was soll eigentlich passieren (mit A1), wenn in A eine gerade ANzahl Zellen gefüllt ist?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Matrix automatisch füllen
04.11.2006 11:01:58
Thomas
Hallo Erich und danke,
das sieht schon alles prima aus(vb-code), die Formel muss ich erst mal genauer anschauen) .Da ich aber noch damit weiterrechnen möchte(Korrelation) und dies alles graphisch darstellen möchte,sollte die Matrix B: mit deinem code an der vorletzten Stelle(der ermittelten Länge von A:) beginnen und die letzte (also unterste) hat den Wert vom letzten Wert von A:
Ich habe auch schon versucht deinen Code dahingehend zu verändern,doch da ich am Anfang des Lernprozesses mit VB stehe, will es nicht gelingen.Vielleicht schenkst du mir noch ein wenig Zeit.
Zu A1 und gerade:Je grösser Matrix A und damit Matrix B: desto geringer ist der Einfluss von A1, soll heissen , wenn A1 rausfällt ist es nicht so tragisch.
Danke Thomas
Anzeige
AW: Matrix automatisch füllen
04.11.2006 12:15:03
Erich
Hallo Thomas,
isses das?
 ABC
1115,714285715,7142857
2220,820,8
3423,666666723,6666667
4223333
511  
616  
722  
833  

Formeln der Tabelle
ZelleFormel
C1=WENN(ZEILE()>=ANZAHL(A:A)/2+1;"";WENN(ZEILE()=ANZAHL(A:A)/2+1; INDIREKT("A"&ANZAHL(A:A));MITTELWERT(INDIREKT("A"&2*ZEILE()-1+REST(ANZAHL(A:A)+1;2)&":"&"A"&ANZAHL(A:A)))))
C2=WENN(ZEILE()>=ANZAHL(A:A)/2+1;"";WENN(ZEILE()=ANZAHL(A:A)/2+1; INDIREKT("A"&ANZAHL(A:A));MITTELWERT(INDIREKT("A"&2*ZEILE()-1+REST(ANZAHL(A:A)+1;2)&":"&"A"&ANZAHL(A:A)))))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Spalte B kommt wieder aus
Option Explicit
Sub Mittelwerte3()
Dim Anz As Long, ii As Long, j As Long, zz As Long, nn As Long, sum As Double
Columns(2).ClearContents
Anz = [A65536].End(xlUp).Row ' sollte ungerade sein (sonst bleibt A1 unberücksichtigt)
sum = Cells(Anz, 1)
nn = 3
ii = Anz - 1
zz = ii / 2 - 0.1
Cells(zz + 1, 2) = Cells(Anz, 1)
While ii > 1
sum = sum + Cells(ii, 1) + Cells(ii - 1, 1)
Cells(zz, 2) = sum / nn
ii = ii - 2
nn = nn + 2
zz = zz - 1
Wend
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Matrix automatisch füllen
04.11.2006 13:56:42
Thomas
Hallo Erich und danke,
So ist das schon super, auch wenn die zweite Matrix nicht dort anfängt, wo der unterste A:-Wert ( für mich später der aktuellste,eingelesene Wert) ist. In deinem Beispiel oben würde also C8=33,C7=23,66666, C6=20,8 sein.
zwei Fragen hätte ich noch.Kannstdu mir sagen was die 0.1 in der codezeile zz=ii /2 -0.1
bedeutet bzw. warum man dies macht?
Kann ich deine Formel beim automatischen Auffüllen der nächsten Spalte nutzen;soll ja wie schon erwähnt eine "Korrelationsspalte" werden ,also korrel((letzte 3 Werte vonA:):(letzte 3 werte von B:)in der drittletzten Zeile von A: oder B: ,darüber korrel((letzte 4 Werte vonA:):(letzte 4 werte von B:) in der viertletzten Zeile von A: oder B:?
Einen VB-code für das automatische Auffüllen der neuen Spalte mit der Korrelation erscheint mir ziemlich schwierig.
Danke Thomas
Anzeige
AW: Matrix automatisch füllen
04.11.2006 18:30:22
Erich
Hallo Thomas,
jetzt fangen B und C in der letzten Zeile an:
 ABC
11  
22  
34  
4812,412,4
51618,666666718,6666667
6323232

Formeln der Tabelle
ZelleFormel
C1=WENN((ZEILE()<=ANZAHL($A:$A)/2)+(ZEILE()>ANZAHL($A:$A))>0;""; MITTELWERT(BEREICH.VERSCHIEBEN($A$1;2*(ZEILE()-ANZAHL($A:$A)/2)-1;;2*(ANZAHL($A:$A)-ZEILE())+1)))
C2=WENN((ZEILE()<=ANZAHL($A:$A)/2)+(ZEILE()>ANZAHL($A:$A))>0;""; MITTELWERT(BEREICH.VERSCHIEBEN($A$1;2*(ZEILE()-ANZAHL($A:$A)/2)-1;;2*(ANZAHL($A:$A)-ZEILE())+1)))

Und hier der Code für Spalte B:
Sub Mittelwerte4()
Dim Anz As Long, ii As Long, zz As Long, nn As Long, sum As Double
Columns(2).ClearContents
Anz = [A65536].End(xlUp).Row              ' wenn ungerade, bleibt A1 unberücksichtigt
nn = 1
ii = Anz
zz = Anz
While ii > 1
sum = sum + Cells(ii, 1) + Cells(ii + 1, 1)
Cells(zz, 2) = sum / nn
ii = ii - 2
nn = nn + 2
zz = zz - 1
Wend
End Sub
zz=ii/2-0.1 sollte die Rundung richtigstellen. VBA wandelt ii/2 in eine ganze Zahl um (wie per CLng())
und rundet dabei nicht so wie ich es brauchte.
Schau mal in der VBA-Hilfe bei CLng und probier mal (auf einem leeren Blatt) aus:
Sub rund()
Dim ii As Long, zz As Long
For ii = 1 To 11
zz = ii / 2 - 0.1
Cells(ii, 7) = zz
zz = ii / 2
Cells(ii, 8) = zz
zz = CLng(ii / 2)
Cells(ii, 9) = zz
Next
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Matrix automatisch füllen
04.11.2006 18:44:50
Erich
Hallo nochmal.
Sorry, bei dem Makro ist mir noch was durchgerutscht - also nochmal:
Sub Mittelwerte4()
Dim ii As Long, zz As Long, nn As Long, sum As Double
Columns(2).ClearContents
ii = [A65536].End(xlUp).Row              ' wenn ungerade, bleibt A1 unberücksichtigt
zz = ii
nn = 1
While ii > 0
sum = sum + Cells(ii, 1) + Cells(ii + 1, 1)
Cells(zz, 2) = sum / nn
ii = ii - 2
zz = zz - 1
nn = nn + 2
Wend
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Matrix automatisch füllen
05.11.2006 10:33:21
Thomas
Hallo Erich und Danke,
SUPER,genau so hatte ich es mir vorgestellt.Danke auch für die Erklärung des Code.Da du nichts zu der nächsten Spalte mit der Korrelation geschrieben hast ,stelle ich die Frage nochmal ins Netz.
Danke Thomas
;
Anzeige

Infobox / Tutorial

Matrix automatisch füllen in Excel


Schritt-für-Schritt-Anleitung

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

  2. Gib Deine Werte in Spalte A ein. Stelle sicher, dass die Anzahl der Werte variabel ist.

  3. Öffne den VBA-Editor, indem Du ALT + F11 drückst.

  4. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeinDateiname)" > Einfügen > Modul.

  5. Kopiere und füge den folgenden VBA-Code ein:

    Sub Mittelwerte()
       Dim Anzahl As Long, i As Long, Summe As Double
       Anzahl = [A65536].End(xlUp).Row
       For i = Anzahl - 2 To 1 Step -2
           Summe = 0
           For j = i To Anzahl
               Summe = Summe + Cells(j, 1).Value
           Next j
           Cells(i + 1, 2).Value = Summe / (Anzahl - i + 1)
       Next i
    End Sub
  6. Führe den Code aus: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle "Mittelwerte" und klicke auf "Ausführen".

  7. Überprüfe die Ergebnisse in Spalte B. Diese sollten jetzt die Mittelwerte der letzten Werte in Spalte A darstellen.


Häufige Fehler und Lösungen

  • Fehler: Keine Werte in Spalte A
    Lösung: Stelle sicher, dass Du Werte in Spalte A eingegeben hast, bevor Du das Makro ausführst.

  • Fehler: Makro läuft nicht
    Lösung: Überprüfe, ob Makros in Excel aktiviert sind. Gehe zu Datei > Optionen > Sicherheitscenter > Einstellungen für das Sicherheitscenter > Einstellungen für Makros und aktiviere die entsprechenden Optionen.

  • Fehler: Leerzellen in Spalte B
    Lösung: Ändere den Code so, dass die Ergebnisse ohne Leerzeilen in Spalte B ausgegeben werden. Hier ein Beispielcode:

    Sub Mittelwerte2()
       Dim Anzahl As Long, ii As Long, nn As Long, sum As Double
       Anzahl = [A65536].End(xlUp).Row
       nn = 3
       ii = Anzahl - 1
       While ii > 1
           sum = sum + Cells(ii, 1) + Cells(ii - 1, 1)
           Cells(ii / 2, 2) = sum / nn
           ii = ii - 2
           nn = nn + 2
       Wend
    End Sub

Alternative Methoden

  • Verwendung von Formeln: Du kannst auch Formeln nutzen, um die Mittelwerte zu berechnen. Beispielsweise könntest Du die Formel =MITTELWERT(A1:A3) in die Zelle B1 eingeben und diese nach unten ziehen, um den Mittelwert der letzten Werte zu berechnen.

  • Pivot-Tabellen: Wenn Du eine größere Datenmenge hast, könnte auch eine Pivot-Tabelle sinnvoll sein, um Mittelwerte und andere Statistiken zu aggregieren.


Praktische Beispiele

Angenommen, Du hast die folgenden Werte in Spalte A:

A
1
2
4
8
16
32
64

Nach dem Ausführen des VBA-Codes sollte Spalte B folgende Mittelwerte enthalten, basierend auf den letzten drei, fünf und sieben Werten von A:

A B
1 15,714
2 20,800
4 23,667
8 33,000
16
32
64

Tipps für Profis

  • Verwende dynamische Bereiche: Anstatt A65536 zu verwenden, kannst Du dynamische Bereiche wie A:A verwenden, um alle Werte in Spalte A zu berücksichtigen.

  • Dokumentiere Deinen Code: Füge Kommentare in Deinen VBA-Code ein, um den Zweck jeder Zeile zu erklären. Das ist besonders hilfreich, wenn Du später Änderungen vornehmen möchtest.

  • Nutze Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen in Deinem VBA-Code, um unerwartete Fehler elegant abzufangen.


FAQ: Häufige Fragen

1. Wie kann ich die Korrelation zwischen den Werten in Spalte A und B berechnen?
Du kannst die Korrelation zwischen den Mittelwerten in Spalte B und den Werten in Spalte A mit der Formel =KORREL(A1:A3, B1:B3) berechnen.

2. Was bedeutet die Zeile zz = ii / 2 - 0.1 im VBA-Code?
Diese Zeile hilft, die Rundung zu korrigieren, da VBA bei der Division in ganze Zahlen umwandelt. Das - 0.1 stellt sicher, dass die Berechnung korrekt bleibt und keine Werte verloren gehen.

3. Kann ich den VBA-Code anpassen, um andere Statistiken zu berechnen?
Ja, Du kannst den Code anpassen, um verschiedene Statistiken wie den Median oder die Standardabweichung zu berechnen, indem Du die entsprechenden VBA-Funktionen verwendest.

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