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

Summe von Arrayzeile

Forumthread: Summe von Arrayzeile

Summe von Arrayzeile
20.03.2009 18:04:45
Arrayzeile
Hallo
Ich habe eigentlich zwei Fragen.
1. Wenn ich ein Array in vba habe, wie kann ich jeweils die Summe der Zeilen herausfinden, ohne den Weg über Excel machen zu müssen?
Ich wollte es so probieren, das funktionierte jedoch nicht (Matrix ist dabei ein Array):
Dim Vektor As String
Dim i As Integer
For i = 1 To 10
Vektor(i) = Application.WorksheetFunction.Sum(Matrix.Rows(i))
Next i
2. Um den Programmcode etwas übersichlich zu machen, wollte ich mehrere subs für einzelne Teile _
des Programms erstellen. Ich glaube jedoch, dass wenn ich in "

Sub test()" als Resultat eine Matrix M erhalte ich nicht einfach im nächsten 

Sub dieses M verwenden kann, ist das richtig? Gehen die Bezeichnungen nach "End Sub

" verloren?
Wie kann ich das besser lösen?
Alles in ein


Sub zu schmeissen wird auch mühsam, da insgesamt etwa 20 schleifen vorhanden sind und es eine   _
_
Fehlermeldung gibt bei Mehfachverwendung von Variablen.
Ich hoffe Ihr versteht meine Fragen ;-)
PS: Das ganze MUSS in VBA geschrieben sein.
Gruss
Helmi


		
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Summe von Arrayzeile
20.03.2009 18:24:00
Arrayzeile
Hallo Helmi,
deinen Array hast nicht vorgestellt. Die Begriffe werden hierzu etwas uneinheitlich genutzt.

Sub t()
Dim df(0 To 2, 0 To 1) As Long
Dim su As Long
df(0, 0) = 1
df(1, 0) = 2
df(2, 0) = 3
df(0, 1) = 10
df(1, 1) = 20
df(2, 1) = 30
su = Application.WorksheetFunction.Sum(df)
End Sub


Gruß Gerd

Anzeige
AW: Summe von Arrayzeile
20.03.2009 18:30:36
Arrayzeile
Hallo Gerd
Danke für deine Antwort. Das habe ich auch rausgefunden wie es funktioniert.
Als Resultat deines Besipieles erhalte ich 66.
Ich möchte (bei Deinem Besipiel) folgendes Resultat:
11
22
33
D.h. jeweils die Summe einer Zeile. Verstehst Du was ich meine?
Gruss
Helmi
Anzeige
AW: Summe von Arrayzeile
20.03.2009 20:37:31
Arrayzeile
Hallo Helmi!

Sub t2()
Dim df(0 To 2, 0 To 1) As Long
Dim su(0 To 2) As Long
Dim zeile As Long
Dim zähler As Long
df(0, 0) = 1
df(1, 0) = 2
df(2, 0) = 3
df(0, 1) = 10
df(1, 1) = 20
df(2, 1) = 30
For zeile = LBound(df, 1) To UBound(df, 1)
For zähler = LBound(df, 2) To UBound(df, 2)
su(zeile) = su(zeile) + df(zeile, zähler)
Next
Next
For zeile = LBound(su) To UBound(su)
MsgBox su(zeile)
Next
End Sub


Gruß Gerd

Anzeige
AW: Summe von Arrayzeile
20.03.2009 18:26:19
Arrayzeile
Hallo,
hier mal ein Beispiel um die Summe einzelner Spalten zu erhalten.
Sub Test()
Dim Wert1 As Double, Wert2 As Double, Wert3 As Double
Dim myAr(500, 2)
Dim A As Long

'Area für Demo befüllen 
For A = Lbound(myAr) To Ubound(myAr)
 myAr(A, 0) = A + 2
 myAr(A, 1) = A + 5
 myAr(A, 2) = A + 9
Next A

'Summe der Spalten ermitteln 
For A = Lbound(myAr) To Ubound(myAr)
 Wert1 = Wert1 + myAr(A, 0)
 Wert2 = Wert2 + myAr(A, 1)
 Wert3 = Wert3 + myAr(A, 2)
Next A

MsgBox "Summe Spalte 1: " & Wert1 & Chr(13) & _
        "Summe Spalte 2: " & Wert2 & Chr(13) & _
        "Summe Spalte 3: " & Wert3

End Sub


Gruß Tino

Anzeige
AW: Summe von Arrayzeile
20.03.2009 18:42:58
Arrayzeile
Danke Tino
Ich weiss nicht, ob mein Problem einfach zu lösen ist, da die Spaltenanzahl 70bis 100 sein wird und die Zeilenanzahl wird 30'000 sicher übersteigen.
Ich habe mich erst seit ein paar Tage mit vba beschäftigt und bin daher um jede Hilfe dankbar ;-)
Gruss
Helmi
AW: Summe von Arrayzeile
20.03.2009 18:50:47
Arrayzeile
Hallo,
Du brauchst doch nur die entsprechende Spalte einzusetzen von der Du die Summe haben möchtest.
Welche Spalte das ist, musst Du wissen.
Gruß Tino
Anzeige
AW: Summe von Arrayzeile
20.03.2009 19:14:04
Arrayzeile
Ich verstehe nicht ganz was Du meinst mit "entsprechende Spalte einsetzen".
Ich habe z.B. eine 30'000 x 90 Matrix, welche bereits als Array gegeben ist und möchte die Summe die 30'000 Zeilen bilden.
Mein Resultat soll danach ein 30'000 x 1 Vektor sein (Spaltenvektor).
Kann es sein, dass ich einfach noch eine zusätzliche Schlaufe einbauen muss, so dass ich nicht 3 (wie bei dir) sondern (for i=1 to 30000) 30000 Zeilen habe?
Gruss
Helmi
Anzeige
AW: Summe von Arrayzeile
20.03.2009 19:31:03
Arrayzeile
Hallo,
mit LBound und Ubound ermittelst Du die min und max Anzahl der Zeilen.
In der Schleife gibst Du nur als zweiten Parameter die Spalte an, von der Du die Werte haben möchtest.
Wie in meinem Beispiel zuvor habe ich die Spalte mit
0 für Spalte 1,
1 für Spalte 2
2 für Spalte 3
angegeben, wobei dies auf den Aufbau der Matrix ankommt mit welcher Spalte die 1. Spalte beginnt.
Bei mir ist es eben die 0.
For A = LBound(myAr) To UBound(myAr)
Wert1 = Wert1 + myAr(A, 0) '= Spalte 1
Wert2 = Wert2 + myAr(A, 1) '= Spalte 2
Wert3 = Wert3 + myAr(A, 2) '= Spalte 3
Next A
Bei Dir wäre es die Spalte 60 oder 70 oder sonst irgendeine Spalte.
Versuch Dir einfach nur vorzustellen,
die Matrix ist ein Zellbereich mit Zeilen und Spalten in dem Du mittels Schleife alle Zeilen durchgehst und den Wert aus einer bestimmten Spalte herausfischst.
Gruß Tino
Anzeige
;
Anzeige

Infobox / Tutorial

Summe von Arrayzeilen in VBA


Schritt-für-Schritt-Anleitung

Um die Summe von Arrayzeilen in VBA zu berechnen, kannst Du die folgenden Schritte befolgen:

  1. Erstelle ein Array: Definiere ein mehrdimensionales Array, das die Werte enthält, deren Zeilen-Summen Du berechnen möchtest.

    Dim df(0 To 2, 0 To 1) As Long
    df(0, 0) = 1
    df(0, 1) = 10
    df(1, 0) = 2
    df(1, 1) = 20
    df(2, 0) = 3
    df(2, 1) = 30
  2. Initialisiere ein Ergebnis-Array: Erstelle ein Array, um die Summen der einzelnen Zeilen zu speichern.

    Dim su(0 To 2) As Long
  3. Berechne die Zeilen-Summen: Nutze Schleifen, um die Summe jeder Zeile zu berechnen.

    Dim zeile As Long, zähler As Long
    For zeile = LBound(df, 1) To UBound(df, 1)
       For zähler = LBound(df, 2) To UBound(df, 2)
           su(zeile) = su(zeile) + df(zeile, zähler)
       Next zähler
    Next zeile
  4. Gib das Ergebnis aus: Verwende eine Schleife, um die Summen anzuzeigen.

    For zeile = LBound(su) To UBound(su)
       MsgBox su(zeile)
    Next zeile

Häufige Fehler und Lösungen

  • Fehler beim Zugriff auf Array-Elemente: Stelle sicher, dass Du die richtigen Indizes verwendest. Achte auf die Grenzen des Arrays (LBound und UBound).

  • Falsche Datentypen: Verwende die richtigen Datentypen für Deine Variablen. Zum Beispiel, wenn Du mit langen Ganzzahlen arbeitest, stelle sicher, dass Deine Variablen als Long deklariert sind.

  • Variablen-Sichtbarkeit: Wenn Du mehrere Subs verwendest, überlege, ob Du Deine Variablen als globale Variablen deklarierst, um sie in verschiedenen Subs nutzen zu können.


Alternative Methoden

Wenn Du die Summe von Arrayzeilen berechnen möchtest, gibt es auch andere Ansätze:

  1. Verwendung von Excel-Funktionen: Du kannst auch die Application.WorksheetFunction.Sum-Funktion verwenden, um die Summe einer gesamten Zeile direkt in Excel zu berechnen, bevor Du die Werte in VBA importierst.

  2. Array-Formeln: In Excel kannst Du auch Array-Formeln verwenden, um bestimmte Berechnungen durchzuführen, ohne VBA zu verwenden.


Praktische Beispiele

Hier ist ein Beispiel, wie Du die Summe einer Spalte in einem großen Array (z.B. 30.000 x 90) berechnen kannst:

Sub SummeVonGrossemArray()
    Dim myAr(0 To 29999, 0 To 89) As Double
    Dim spalte As Long
    Dim summe As Double

    ' Beispiel: Fülle das Array mit Werten
    For i = LBound(myAr, 1) To UBound(myAr, 1)
        For j = LBound(myAr, 2) To UBound(myAr, 2)
            myAr(i, j) = Rnd() * 100 ' Zufallswerte
        Next j
    Next i

    ' Summe der 1. Spalte
    spalte = 0 ' oder die gewünschte Spalte
    For i = LBound(myAr, 1) To UBound(myAr, 1)
        summe = summe + myAr(i, spalte)
    Next i

    MsgBox "Die Summe der Spalte " & spalte + 1 & " ist: " & summe
End Sub

Tipps für Profis

  • Nutze Application.Transpose: Wenn Du mit großen Datenmengen arbeitest, kann Application.Transpose hilfreich sein, um Daten schnell zu konvertieren.

  • Verwende Debugging-Tools: Setze Breakpoints und verwende das Debugging-Werkzeug in VBA, um Probleme effizienter zu identifizieren und zu beheben.

  • Optimiere Schleifen: Bei sehr großen Arrays kann es sinnvoll sein, die Schleifen zu optimieren, um die Ausführungszeit zu verkürzen.


FAQ: Häufige Fragen

1. Kann ich die Summe einer Zeile auch ohne VBA berechnen?
Ja, Du kannst die SUMME-Funktion in Excel verwenden, um die Summe einer Zeile zu berechnen.

2. Was mache ich, wenn mein Array zu groß ist?
In solchen Fällen ist es empfehlenswert, die Daten in kleinere Gruppen zu unterteilen oder nur die benötigten Daten in den Speicher zu laden.

3. Wie kann ich auf Elemente in einem mehrdimensionalen Array zugreifen?
Du kannst auf Elemente zugreifen, indem Du die Indizes in Klammern angibst, z.B. myAr(i, j) für das Element in der i-ten Zeile und j-ten Spalte.

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