ich bitte Euch um Eure Hilfe bei der Erstellung von drei Makros – komme einfach nicht weiter.
Ich habe eine recht große Excel-Datei mit rund 20.000 Datensätzen (Zeilen). Bevor ich diese weiter in Access nutze, will ich die Daten ein wenig aufarbeiten und komprimieren.
Hab nach einer Suche im Netz ein Makro gefunden, welches die einzelnen Zellen einer Spalte in dem Arbeitsblatt durchgeht, und eine leere Zeile einfügt, sobald sich in einer Spalte ein Wert ändert:
SUB Leerzeile_einfügen()
Dim x, i, y
x = Range(„A2“)
For i = 3 To 65535
y = Range(„A“ & i)
If y x Then
Worksheets(„Tabelle1“).Rows(i).Insert
x = y
End If
Next i
END Sub
Makro 1:
Nun bräuchte ich ein Makro, dass rückwärts (also beim letzten Datensatz beginnend - „For i = 65535 To 3“) bis zum Beginn im Datenblatt alle Zellen in einer Spalte durchgeht. Sobald eine Leerzelle in der Spalte gefunden wird, soll in dieser Leerzelle eine Summe gebildet werden. Die Summe besteht dabei aus dem Bereich oberhalb der Leerzelle bis zur Zelle eins unterhalb der nächsten Leerzelle in der Spalte (=SUMME([Leerzelle + 1] : [nächste Leerzelle in Spalte - 1]). Beispiel:
Hier habe ich mal eine Möglichkeit für Makro1. Es läuft allerdings von oben nach unten und müßte etwas geändert werden, sofern es denn von unten nach oben laufen muß.
Private Sub Makro1()
Dim tmpZeile As Long
Dim ErsteZeile As Long
Dim LetzteZeile As Long
Dim DeineDatenspalte As Long
Dim Summe As Double
DeineDatenspalte = 1 'SpalteA
ErsteZeile = 3
LetzteZeile = ActiveSheet.UsedRange.Rows.Count + ErsteZeile
For tmpZeile = 3 To LetzteZeile
If ActiveSheet.Cells(tmpZeile, DeineDatenspalte) "" Then
Summe = Summe + CDbl(ActiveSheet.Cells(tmpZeile, DeineDatenspalte))
Else
ActiveSheet.Cells(tmpZeile, DeineDatenspalte) = Summe
Summe = 0
End If
Next
End Sub
Private Sub Makro2()
Dim tmpZeile As Long
Dim ErsteZeile As Long
Dim LetzteZeile As Long
Dim DeineDatenspalte As Long
Dim Summe As Double
DeineDatenspalte = 1 'SpalteA
ErsteZeile = 3
LetzteZeile = ActiveSheet.UsedRange.Rows.Count + ErsteZeile - 1
For tmpZeile = ErsteZeile To LetzteZeile
If ActiveSheet.Cells(tmpZeile, DeineDatenspalte) = "" Then
ActiveSheet.Cells(tmpZeile, DeineDatenspalte) = ActiveSheet.Cells(tmpZeile + 1, DeineDatenspalte)
End If
Next
End Sub
Private Sub Makro3()
Dim tmpZeile As Long
Dim ErsteZeile As Long
Dim LetzteZeile As Long
Dim DeineDatenspalte As Long
Dim Summe As Double
DeineDatenspalte = 1 'SpalteA
ErsteZeile = 3
LetzteZeile = ActiveSheet.UsedRange.Rows.Count + ErsteZeile
For tmpZeile = 3 To LetzteZeile
If ActiveSheet.Cells(tmpZeile, DeineDatenspalte) = "" Then
ActiveSheet.Cells(tmpZeile, DeineDatenspalte) = "SUMME"
End If
Next
End Sub
Mit ganz wenig Aufwand kannst Du alle drei Makros zu einem einzigen umschreiben und dann die gewünschten Funktionen „gleichzeitig“ erzielen. Aber das solltest Du vorerst allein probieren.