Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: leere Zeile in variabler Range suchen

leere Zeile in variabler Range suchen
meixner
Hallo zusammen,
wenn eine leere Zelle in einem variablen Bereich gefunden wird, dann nehme den Wert aus der vorherigen Zelle und schreibe diesen Wert in die leere Zelle.
Mit unterem Makro komme ich nicht weiter, da der Bereich fix angegeben ist, während der Bereich eigentlich variabel ist.
Beispiel
1. Durchlauf Makro
gefundene Werte werden eingetragen in dem BEREICH (A8:Q15).
Anhand eines Makros soll jetzt in P8:P15 (Bereich variabel, beim zweiten Durchlauf des Makros kann es ein anderer Bereich sein) nach leeren Zellen gesucht werden. P8 wird als leere Zelle gefunden. In diese leere Zelle soll dann die Formel aus P9 eingetragen werden.
2. Durchlauf Makro
gefundene Werte werden eingetragen in dem BEREICH (A16:Q24 ).
Anhand eines Makros soll jetzt in P16:P24 (Bereich variabel, beim zweiten Durchlauf des Makros kann es ein anderer Bereich sein) nach leeren Zellen gesucht werden. P16 wird als leere Zelle gefunden. In diese leere Zelle soll dann die Formel aus P17eingetragen werden.
Kann mir jmd. einen Tip geben. Für einen festen Bereich habe ich kein Problem eine leere Zeile zu finden und auszufüllen, aber für variablen Bereich schon. Anbei unten das Makro.
Vielen Dank für die Unterstützung.
Dani
Sub special_dividend()
Dim strRIC As String, rngSuch As Range                         'Variablen deklarieren
Dim rngF As Range, lngZ As Long, lngErst As Long
Dim specialdividend As Double
Dim AS_Geschäft As Range
Dim rngRange As Range
specialdividend = Application.InputBox("Bitte Betrag der special Dividend " & _
"oder Capital Return eingeben:", "Dateneingabe:", , , , , , 1)
If specialdividend = False Then Exit Sub
' RIC wird gesucht in AlleBestände_alleFonds in Spalte C;
' Eingabe von RIC für das erste Bezugsrecht in A35, C8
strRIC = InputBox("Bitte RIC Aktie eingeben:", "Dateneingabe:")
With Workbooks("Template_alle_Kapitalmaßnahmen in Arbeit.xls")
Set rngSuch = .Worksheets(2).Columns(3)
Set rngF = rngSuch.Find(What:=strRIC, LookAt:=xlPart)
If Not rngF Is Nothing Then
lngErst = rngF.Row
With .Worksheets(1)
lngZ = .Cells(.Rows.Count, 3).End(xlUp).Row  'letzte in Sp.C belegte Zeile
Do
Sheets(5).Range("B5").Value = strRIC
lngZ = lngZ + 1            ' nächste (leere) Zeile
.Cells(lngZ, 1) = rngF.Offset(0, -2)               ' a
.Cells(lngZ, 2) = rngF.Offset(0, -1)               ' b
.Cells(lngZ, 3) = strRIC                           ' C
.Cells(lngZ, 4) = rngF.Offset(0, 1)                ' d
.Cells(lngZ, 5) = rngF.Offset(0, 2)                ' e
.Cells(lngZ, 6) = rngF.Offset(0, 3)                ' f
.Cells(lngZ, 17) = rngF.Offset(0, 7)               ' Q
.Cells(lngZ, 12) = rngF.Offset(0, 5)               ' L
.Cells(lngZ, 20) = rngF.Offset(0, 13).FormulaR1C1  ' T
.Cells(lngZ, 18) = rngF.Offset(0, 12).FormulaR1C1  ' R
If .Cells(lngZ, 5) = .Cells(lngZ - 1, 5) Then _
.Cells(lngZ, 21) = specialdividend  ' schreibe in Spalte U
If .Cells(lngZ, 5) = .Cells(lngZ - 1, 5) Then _
.Cells(lngZ, 16) = Sheets("Parameter").Range("h8").FormulaR1C1  ' schreibe  _
in Spalte U
Set rngF = rngSuch.FindNext(rngF)
Loop While Not rngF Is Nothing And rngF.Row  lngErst
End With
Else
MsgBox "Die Aktie ist nicht vorhanden bzw. die Eingabe wurde abgebrochen!", _
vbCritical, "Nur Zahlen eingeben!"
End If
End With
For Each Zelle In Range("F8:F40")
last_trade_Aktie = Sheets("Parameter").Range("b3").FormulaR1C1
If Zelle  "" Then Zelle.Offset(0, 1) = last_trade_Aktie
Next Zelle
'sucht leere Zeele in Spalte U und füllt diese mit Zelle unterhalb. Bedeutet, dass Betrag  _
special Dividend in leere Zelle auch eingetragen wird. For Each rngRange In Sheets(1).Range("p8:p110") (HIER LIEGT DAS PROBLEM!!!!!!!!!!!!!!!!!!!)
If IsEmpty(rngRange) Then rngRange = rngRange.Offset(1, 0).FormulaR1C1
Next rngRange
End Sub

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: leere Zeile in variabler Range suchen
23.11.2009 20:38:33
fcs
Hallo Meixner,
dann muss du die 1. Zeile die ausgefüllt wird in einer Variablen speichern. So kannst du dann zum Schluss einen entsprechenden Range definieren in dem die leeren Zellen ausgefüllt werden sollen.
Die angepassten Zeilen in deinem Code hab ich markiert.
Gruß
Franz

Sub special_dividend()
Dim strRIC As String, rngSuch As Range                    'Variablen deklarieren
Dim rngF As Range, lngZ As Long, lngErst As Long
Dim ZeileStart As Long                                     '#### fcs
Dim specialdividend As Double
Dim AS_Geschäft As Range
Dim rngRange As Range
specialdividend = Application.InputBox("Bitte Betrag der special Dividend " & _
"oder Capital Return eingeben:", "Dateneingabe:", , , , , , 1)
If specialdividend = False Then Exit Sub
' RIC wird gesucht in AlleBestände_alleFonds in Spalte C;
' Eingabe von RIC für das erste Bezugsrecht in A35, C8
strRIC = InputBox("Bitte RIC Aktie eingeben:", "Dateneingabe:")
With Workbooks("Template_alle_Kapitalmaßnahmen in Arbeit.xls")
Set rngSuch = .Worksheets(2).Columns(3)
Set rngF = rngSuch.Find(What:=strRIC, LookAt:=xlPart)
If Not rngF Is Nothing Then
lngErst = rngF.Row
With .Worksheets(1)
lngZ = .Cells(.Rows.Count, 3).End(xlUp).Row  'letzte in Sp.C belegte Zeile
ZeileStart = lngZ + 1                        'Startzeile merken #### fcs
Do
Sheets(5).Range("B5").Value = strRIC
lngZ = lngZ + 1            ' nächste (leere) Zeile
.Cells(lngZ, 1) = rngF.Offset(0, -2)               ' a
.Cells(lngZ, 2) = rngF.Offset(0, -1)               ' b
.Cells(lngZ, 3) = strRIC                           ' C
.Cells(lngZ, 4) = rngF.Offset(0, 1)                ' d
.Cells(lngZ, 5) = rngF.Offset(0, 2)                ' e
.Cells(lngZ, 6) = rngF.Offset(0, 3)                ' f
.Cells(lngZ, 17) = rngF.Offset(0, 7)               ' Q
.Cells(lngZ, 12) = rngF.Offset(0, 5)               ' L
.Cells(lngZ, 20) = rngF.Offset(0, 13).FormulaR1C1  ' T
.Cells(lngZ, 18) = rngF.Offset(0, 12).FormulaR1C1  ' R
If .Cells(lngZ, 5) = .Cells(lngZ - 1, 5) Then _
.Cells(lngZ, 21) = specialdividend  ' schreibe in Spalte U
If .Cells(lngZ, 5) = .Cells(lngZ - 1, 5) Then _
.Cells(lngZ, 16) = Sheets("Parameter").Range("h8").FormulaR1C1 _
' schreibe in Spalte U
Set rngF = rngSuch.FindNext(rngF)
Loop While Not rngF Is Nothing And rngF.Row  lngErst
End With
Else
MsgBox "Die Aktie ist nicht vorhanden bzw. die Eingabe wurde abgebrochen!", _
vbCritical, "Nur Zahlen eingeben!"
End If
End With
For Each Zelle In Range("F8:F40")
last_trade_Aktie = Sheets("Parameter").Range("b3").FormulaR1C1
If Zelle  "" Then Zelle.Offset(0, 1) = last_trade_Aktie
Next Zelle
'sucht leere Zeele in Spalte U und füllt diese mit Zelle unterhalb. Bedeutet, _
dass Betrag special Dividend in leere Zelle auch eingetragen wird.
'in Spalte 16 (P) leere Zellen auffüllen                            '####fcs
With Worksheets(1)                                                  '####fcs
For Each rngRange In .Range(.Cells(ZeileStart, 16), .Cells(lngZ, 16)) '####fcs
If IsEmpty(rngRange) Then rngRange = rngRange.Offset(1, 0).FormulaR1C1
Next rngRange
End With                                                              '####fcs
End Sub

Anzeige
AW: leere Zeile in variabler Range suchen
24.11.2009 09:09:42
meixner
Makro funktioniert super!
Vielen Dank.
Dani
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

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