Clever-Excel-Forum

Normale Version: Strukturierung der Funktion Autoausfüllen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe VBA Freunde,
ich habe eine kleines, voll funktionsfähiges Makro geschrieben. Es hat die einfache Aufgabe, die Spalte
A in Abhängigkeit der in Spalte B stehenden Einträge mit den Zahlen 1 bis X durchzunummerieren.
Stehen in Spalte B 50 Einträge, stehen in Spalte A die enstsprechenden Zeilennummern von 1 bis 50.

Die Formel Autoausfüllen habe ich selbst geschrieben, aber leider ist sie tierisch lang.
1. Wie strukturiere ich hier besser?
2. Falls es ein VBA Genie, der diese Aufgabe mit besseren Code erledigen kann, gerne!




Code:
vbstr = "Blatt1"

'Ausfüllen der Spalte A in Abhängigkeit der in Spalte B stehenden Zelleneinträge
Worksheets(vbstr).Columns(1).Clear
Worksheets(vbstr).Cells(1, 1).Value = 1
Worksheets(vbstr).Cells(2, 1).Value = 2
Worksheets(vbstr).Range("A1:A2").AutoFill Destination:=Worksheets(vbstr).Range("A1:A" & Worksheets(vbstr).Range("B" & _
Worksheets(vbstr).Columns(2).Cells.Count).End(xlUp).Row), Type:=xlFillDefault
Hallo Christa,

viel kann man bei einem so kurzen VBA-Code nicht erreichen.
Das wäre eine Alternative, getestet unter 2013 / 32 bit. Eventuell brauchst Du bei Deiner 64 bit Version bei der WorksheetFunction wieder die Application davor.

Code:
Sub Makro1()
'Variablendeklarationen
Dim vbStr As String, loAnz As Long
'Zuweisung Tabellenname
vbStr = "Tabelle1"
'Mit der Tabelle
With Worksheets(vbStr)
  'Anzahl Eintraege in Spalte B feststellen
  loAnz = WorksheetFunction.CountA(.Columns(2))
  'Spalte A leeren
  .Columns(1).Clear
  'Anfangswert 1 in A1 setzen
  .Cells(1, 1).Value = 1
  'Spalte A entsprechend Anzahl Eintraegen ausfuellen
  .Cells(1, 1).DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
        Step:=1, Stop:=loAnz, Trend:=False
'Ende Mit der Tabelle
End With
End Sub
Hallo André,
sehe gerade Deinen Code. Vielen Dank schon mal dafür.
Auf jeden Fall, interessant und werde ihn später am Tag
mal testen.
Hallo Christa,

die Zahl der Zeilen eines ist ja wohl nicht gemeint ... ;)

Angenommen, der Start der entsprechenden Werte ist nicht immer in Zeile 1, dann bietet sich erste Makro an:
Code:
Option Explicit

Sub AutoAusfuellen()
   Dim fRow As Integer, lRow As Integer
   Dim i As Integer, Diff As Integer
  
   With Sheets("Blatte1")
      .Columns(1).ClearContents
      fRow = 5 'Anpassen, erste Zeile mit Daten in Spalte_B
      lRow = .Cells(Rows.Count, 2).End(xlUp).Row
      Diff = fRow - 1
      For i = fRow To lRow
         .Cells(i, 1) = i - Diff
      Next i
   End With
End Sub

Sub AutoAusfuellenStartInZeile1()
   Dim lRow As Integer
   Dim i As Integer
  
   With Sheets("Blatt1")
      .Columns(1).ClearContents
      lRow = .Cells(Rows.Count, 2).End(xlUp).Row
      For i = 1 To lRow
         .Cells(i, 1) = i
      Next i
   End With
End Sub
Das zweite Makro ist etwas kürzer, dafür muss es aber immer A1 sein, wo die 1 hinein kommt. Alternativ kannst du natürlich auch Funktion ZEILE() einsetzen (in VBA: WorksheetFunction.Row() ).