Monatszahlensummierung

Hallöchen,
ich habe Excel 2002.
Ich habe ein Programm erhalten welches noch nicht ganz auf meine Bedürfnisse abgestimmt ist. Ich habe schon ein paar Sachen verändert, aber hier komm ich nicht weiter. Es ist so: Bei dem folgenden Code werden die Zahlen pro Monat in die dafür vorgesehenen Zellen eingefügt. Allerdings bräuchte ich immer die Summe vom Januar bis zum jeweiligen Monat, d.h. im Januar brauche ich nur die Zahl vom Januar, im Februar die Zahl vom Januar plus Februar usw. Jetzt habe ich mir überlegt dass da eine Schleife rein muss, bin mir aber nicht im klaren wie das Aussehen soll. Das Problem ist nämlich dass nicht jeder Monat eine Zahl hat, das bedeutet das Programm muss die letzte eingetragene Zahl suchen, allerdings ist die Spalte nicht unbegränzt nach oben offen, da dort schon die anderen Tabellen anfangen. Zwischen den Tabellen gibt es immer eine grauunterlegte Zeile, kann man dies als Stoppsignal nehmen? Wenn ja, wie stell ich das an?
Damit es euch ein wenig verständlicher wird ist unten der Code.

Sub AddKstToJahresdiagramm(ByVal kst As Integer, ByVal wert As Integer, ByVal month As Integer)
 ' Finden des Projekts zu der Kostenstelle
 Dim projektName As String

 If wert = 0 Then
 Exit Sub
 End If

 With Tabelle3
 ' finde das projekt zu der kst
 Dim currZeile As Integer
 currZeile = 7
 Do While (.Cells(currZeile, 4).Value "" Or .Cells(currZeile, 5).Value "" Or .Cells(currZeile, 6).Value "")
 If .Cells(currZeile, 4).Value = kst Then
 projektName = .Cells(currZeile, 8).Value
 Exit Do
 End If
 currZeile = currZeile + 1
 Loop

 If projektName = "" Then
 MsgBox "Kein Projektname für Kostenstelle " & kst & " gefunden"
 Exit Sub
 End If

 ' Finden der Tabelle für dieses Projekt in der Jahresübersicht
 currZeile = jahresdiagrammZeile
 Do While (.Cells(currZeile, 1).Value "ENDE DER TABELLE")
 If .Cells(currZeile, 1).Value = projektName Then
 ' Suche den passenden monat
 Dim i As Integer

 For i = 1 To 24
 If .Cells(currZeile + i, 1).Value = month Then
 ' Finden der Kostenstelle-Spalte
 Dim j As Integer
 j = 1
 Do While (.Cells(jahresdiagrammZeile, j).Value "")
 If .Cells(jahresdiagrammZeile, j).Value = kst Then
 ' Gibt es bereits einen Wert für diese Konstelation?
 Dim neuerWert As Integer
 If .Cells(currZeile + i, j).Value "" Then
 neuerWert = .Cells(currZeile + i, j).Value + wert
 Else
 neuerWert = wert
 End If

 ' den neuen Wert eintragen
 .Cells(currZeile + i, j).Value = neuerWert
 End If
 j = j + 1
 Loop
 End If
 Next i
 End If
 currZeile = currZeile + 1
 Loop

 End With
End Sub

[MOD] - Pre-Tag eingefügt

Hi Christine,

wie soll ich denn erraten wo da graue zellen sind in deinem Tabellenblatt, wie da die tabellen strukturiert sind u.v.m.?

Kannst du bitte mal eine Beispielmappe erstellen mit der gleichen tabellenstruktur und die mal hochladen, am besten mit zwei Blättern, im ersten wie es vor dem Code aussieht und im zweiten manuell eintragen wie es nach dem Code aussehen soll.
Zum Hochladen, schau mal hier: FAQ:2861

Zum Code, setz mal alle DIMs zu Anfang des Moduls, mitten im Code bringt dir das nur Nachteile, keinen Vorteil.

Und, wenn du einen Schreibfehler bei kst drin hast greisft du irgendwann auf Zelle D65537 zu und das mag Excel nicht so bei XL2002 :smile:

Hier zum beispiel:

 Dim currZeile As Integer
 currZeile = 7
 Do While (.Cells(currZeile, 4).Value "" Or .Cells(currZeile, 5).Value "" Or .Cells(currZeile, 6).Value "")
 If .Cells(currZeile, 4).Value = kst Then
 projektName = .Cells(currZeile, 8).Value
 Exit Do
 End If
 currZeile = currZeile + 1
 Loop

Aber ich sehe gerade, ich habe mich getäuscht, der Fehler mit D65537 kommt gar nicht weil der Code gar nicht so weit kommt, es knallt schon vorher bei D32xxx *gg*

Schau dir mal dein
Dim currZeile As Integer
an und dann in der Hilfe wie weit Integer nur geht…

Also Zeilen immer als Long deklarieren und, kannst du nicht wissen oder erahnen, Spalten auch immer! bei Interesse kann ich dir auch das mit den Spalten erläutern, hängt mit „Cells“ zusammen, ist aber nicht so wichtig bei kleinen Datenmengen.

Nochwas zum Code, Excels eingebaute Funktionen sind bis zu 10.000 mal schneller als VBa, gerade dann wenn du mit einer Schleife viele Zellen einer Spalte abklappern müßtest.

Probier mal dieses:

If Application.WorksheetFunction.CountIf(kst, .Range("D7:smiley:" & Rows.Count), 0) \> 0 Then
 Zei = Application.WorksheetFunction.Match(Range("D7:smiley:" & Rows.Count), kst)
 projektName = .Cells(Zei, 8).Value
Else
 MsgBox " nicht gefunden"
 Exit Sub
End If

Match ist identisch mit Vergleich in Excel und Countif udentisch mit Vergleich, schau mal in der normalen Excel-Hilfe nach ob ich die richtige Parameterreihenfolge erwischt haeb, da verwechsle ich die gerne.

Gruß
Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke für die Tipps,

Grüße Christine