Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

leere Zeile in variabler Range suchen | Herbers Excel-Forum


Betrifft: leere Zeile in variabler Range suchen von: meixner
Geschrieben am: 23.11.2009 16:53:37

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




  

Betrifft: AW: leere Zeile in variabler Range suchen von: fcs
Geschrieben am: 23.11.2009 20:38:33

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



  

Betrifft: AW: leere Zeile in variabler Range suchen von: meixner
Geschrieben am: 24.11.2009 09:09:42

Makro funktioniert super!

Vielen Dank.
Dani


Beiträge aus den Excel-Beispielen zum Thema "leere Zeile in variabler Range suchen"