Hilfe bei Makros!

Guten Morgen, liebe Wissenden,

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:

Vor Makro - - - - - Nach Makro
5 - - - - - - - - - - - - - - - 5
2 - - - - - - - - - - - - - - - 2
7 - - - - - - - - - - - - - - - 7

                              • ->14231654SUMMESUMMESUMME

Makro1
Hallo Mike.

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

Viele Grüße
Carsten

Makro2
Hallo Mike.

Hier eine Möglichkeit für Makro2.

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

Viele Grüße
Carsten

Makro3
Hallo Mike.

Nun noch eine Möglichkeit für Makro3

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

Viele Grüße
Carsten

Hallo Mike.

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.

Viele Grüße
Carsten

DANKE!!!
Hi Carsten,

VIELEN DANK für Deine Hilfe - oder besser: für Deine Lösung. Funktioniert einwandfrei.

Viele Grüße,

Mike