Index ausfüllen

Index-Spalte einfügen und ausfüllen

Die Auf­gabe: In eine beste­hende Liste, eine (nor­male) Tabelle soll eine Index-Spalte einge­fügt wer­den. Begin­nend in A2 mit der Index-Num­mer 1001 soll die Fol­gezeile den um 1 erhöht­en Wert enthal­ten, jew­eils bis hin­unter zur let­zten Zeile der Dat­en. Hier gibt es reich­lich Wege, von denen ich einen recht sub­op­ti­malen und ver­schiedene gute vorstelle.Grundsätzlich gilt für alle Vorge­hensweisen: Entwed­er eine Leerspalte vor den beste­hen­den Dat­en ein­fü­gen (die neue Spalte A) oder rechts der beste­hen­den Dat­en eine Indexs­palte erstellen und diese nach dem Erstellen ver­schieben. Und es gilt auch, dass in der ersten Zeile der entsprechen­den Spalte der Name Index (oder was auch immer) ste­ht. Und noch ein Hin­weis: Im Beschrei­bung­s­text werde ich immer die Spalte A als Adresse ver­wen­den, auch wenn es vor dem Ver­schieben eine andere Spalte sein kön­nte.

▲ nach oben …

Addition

Schreiben Sie in A2 den Start-Index, also 1001. In A3 kommt nun diese Formel: =A2+1. Diese Formel kopieren Sie nun per Dop­pelk­lick auf das Aus­fül­lkästchen nach unten. Alter­na­tiv ziehen Sie die Formel bis zur let­zten Zeile nach unten. Anschließend noch die Formeln durch Kopieren und Als Wert ein­fü­gen gegen Verän­derun­gen schützen.

▲ nach oben …

Addition ++

(Ergänzung vom 18.07.2016)
Prinzip­iell begin­nt das Ganze wie im Beispiel hierüber. Aber wenn Sie auss­chließlich einen Index gener­ieren wollen und in der direk­ten Spalte daneben ste­hen keine Dat­en, dann funk­tion­iert das mit dem Dop­pelk­lick nicht.

Angenom­men, Sie wollen den Index 1001 bis 1100 erstellen, also 100 Zeilen füllen. Dann geht das natür­lich mit dem herun­terziehen (noch) ganz gut; Sie sehen ja jew­eils den aktuellen Endw­ert in einem kleinem Fen­ster neben dem Mauszeiger.  Bei 1000 Zeilen wird das dann schon eine richtige Arbeit und wenn 48752 der Startwert ist und Sie wollen 863 Werte erzeu­gen, dann wird manch ein User zu Recht die Stirn run­zeln.

OK, um es bess­er und über­sichtlich­er zu demon­stri­eren, belassen Sie es beim Startwert von 48752, es sollen aber nur ins­ge­samt 14 Index-Werte erzeugt wer­den. Der let­zte Wert soll also 48765 sein. Und die let­zte Zeile ist naturgemäß Zeile 14, wenn der erste Wert in A1 ste­ht. Step by step hier die Vorge­hensweise:

  • Schreiben Sie in A1 den Startwert
  • In A2 kommt die Formel =A1+1
  • Kopieren Sie A2 in die Zwis­chen­ablage
  • Gehen Sie in das Adress-Feld und ergänzen Sie dort den bere­its dort ste­hen­den Wert oder über­schreiben sie ihn ‚damit dort anschließend A2:A14 ste­ht.
  • Drück­en Sie die Einga­betaste (Return).

Das war’s auch schon. Die Rei­he ist bis zum let­zten Wert in Ein­er­schrit­ten kor­rekt aus­ge­füllt. Und das geht natür­lich mit jed­er beliebi­gen Schrit­tweite.

Nutzen der ZEILE() – Funktion

Schreiben Sie in A2 die Formel =ZEILE()+999. Zur Verdeut­lichung: Die Zeile hat die Num­mer 2, durch die Addi­tion kom­men Sie auf automa­tisch auf 1001. Füllen Sie diese Formel bis zum Ende der Daten­Liste aus. Auch hier gilt, dass die Formeln gegen Werte aus­ge­tauscht wer­den müssen.

▲ nach oben …

ZEILE() die Zweite

Machen Sie aus den bish­eri­gen Dat­en eine Intel­li­gente Tabelle, beispiel­sweise über die Menüleiste oder per StrgT. Fügen Sie entwed­er eine neue Spalte ein (beispiel­sweise an der Posi­tion der Spalte C) oder ergänzen Sie durch Hinzufü­gen der Über­schrift direkt nach der let­zten Spalte die Tabelle. Schreiben Sie in die Zeile 2 dieser Spalte die Formel =ZEILE()+999 und der Rest wird automa­tisch nach unten aus­ge­füllt. Jet­zt muss diese Spalte nur noch nach ganz links ver­schoben wer­den. Die Umwand­lung in Werte ver­ste­ht sich von alleine. Und neue Zeilen müssen auf jeden Fall von Hand aus­ge­füllt wer­den. – Anschließend eventuell daran denken, die Formeln in Werte umzuwan­deln.

▲ nach oben …

Über Power Query

Falls Sie min­destens Excel 2010 ver­wen­den, kön­nen Sie Pow­er Query als Add-In ein­set­zen. Nach der Auswahl Pow­er Query wählen Sie in der Gruppe Excel-Dat­en den einzi­gen Punkt Von Tabelle. Im Abfrage-Edi­tor-Fen­ster Spalte1 markieren, Menüpunkt Spalte hinzufü­gen | Indexs­palte hinzufü­gen | Benutzerdefiniert. Als Startin­dex ver­wen­den Sie natür­lich 1001. Die Schrit­tweite ist vere­in­barungs­gemäß 1. Jet­zt nur noch die Spalte Index an die erste Stelle ver­schieben und über Start | Schließen und laden den Edi­tor been­den. – Über­raschung, hier sind es schon Werte und keine Formeln.

▲ nach oben …

1+1=2  🙂 

Die oft vergessene Meth­ode: Schreiben Sie in A2 die Zahl 1001. In A3 nun die 1002. Markieren Sie diese bei­den Zellen und ziehen Sie mit­tels des Aus­fül­lkästchens den Bere­ich nach unten. Und auch hier sind es schon Werte, die nicht angepasst wer­den müssen.

▲ nach oben …

VBA – Schleife (1)

Das ist die oben schon „ange­dro­hte“ Aus­nahme. Schleifen sind für solche Auf­gaben in den meis­ten Fällen nicht wirk­lich opti­mal, weil es schnellere Möglichkeit­en gibt. Ich muss mich schon fast anstren­gen, um so etwas zu fab­rizieren 😎 . Aber der Code tut seinen Dienst:

Sub IndexNeu_1()
   Dim Ze As Long, x As Long, lRow As Long
   
   x = 999
   lRow = Cells(Rows.Count, 2).End(xlUp).Row
   For Ze = 2 To lRow
      Cells(Ze, 1) = Ze + x
   Next Ze
   MsgBox "Fertig!"
End Sub

Etwas schneller (oder auch einiges mehr) geht es, wenn die Bild­schir­mak­tu­al­isierung aus­geschal­tet wird. Und auf jeden Fall stimmt das Ergeb­nis, und es sind auch alles Werte.

▲ nach oben …

VBA – Schleife (2)

Erhe­blich schneller ist solch eine Schleife, wenn sich alles nur im Arbeitsspe­ich­er abspielt. Fast unschlag­bar schnell dürfte dieser Code sein. Hier wird nur in einem Array hoch gezählt. Und um nicht allzu viele „Klim­mzüge” machen zu müssen, ist im Kopf des Moduls direkt nach der Anweisung Option Explic­it ein Option Base 1 einge­fügt. Damit ist gewährleis­tet, dass das Array nicht null- son­dern eins-basiert ist. Der erste Array-Ein­trag hat also den Array-Index 1:

Option Explicit
Option Base 1

Sub IndexNeu_2()
   Dim Idx As Long, aIdx, lRow As Long, x As Long
   
   x = 1000 'Weil Zähl-Index 1 ist
   lRow = Cells(Rows.Count, 2).End(xlUp).Row - 1
   Range("A2:A" & lRow + 1).ClearContents
   ReDim aIdx(lRow)
   
   For Idx = 1 To lRow
      aIdx(Idx) = Idx + x
   Next Idx
   
   Range("A2:A" & lRow + 1) = WorksheetFunction.Transpose(aIdx)
   MsgBox "Fertig!"
End Sub

▲ nach oben …

VBA mit ZEILE()-Funktion

Erstaunlich lange dauert hier die Ver­wen­dung der ZEILE()-Funk­tion in Verbindung mit dem auss­chal­ten der Bild­schir­mak­tu­al­isierung, obwohl im fol­gen­den Code sehr vieles für die Beschle­u­ni­gung getan wurde. Und natür­lich wird jed­er berech­nete Wert per VBA auch in einen fes­ten Wert umge­wan­delt:

Sub IndexNeu_3()
   Dim x As Integer, Ze As Long, lRow As Long
   Dim CalcStatus As Long

   On Error GoTo ErrorHandler
   With Application
      .ScreenUpdating = False
      CalcStatus = .Calculation
      .Calculation = xlCalculationManual
   End With
   x = 999
   lRow = Cells(Rows.Count, 2).End(xlUp).Row
   With Range("A2:A" & lRow)
      .ClearContents
      .Formula = "=Row()+" & x
      .Value = .Value
   End With

ErrorHandler:
   If Err.Number <> 0 Then MsgBox "Fehler Nr.: " & Err.Number _
      & vbCrLf & Err.Description
   With Application
      .Calculation = CalcStatus
      .Calculate
      .ScreenUpdating = True
   End With
   MsgBox "Fertig!"
End Sub

▲ nach oben …

Auffüllen lassen

Als let­zten Vorschlag empfehle ich Ihnen wiederum eine Plain Excel-Meth­ode: Aus­füllen. In A2 kommt (natür­lich) die 1001. Der ein­fach­ste Weg wäre hier nun fol­gen­der: In B1 Klick­en, dann Strg. Damit sind Sie in der let­zten Daten­zeile. Ein Mal nach links in die gle­iche Zeile, Spalte A. Jet­zt StrgShift, um den kom­plet­ten auszufül­len­den Bere­ich zu markieren. Menü Start, Gruppe Bear­beit­en, dort beim Aus­füllen-Sym­bol den Punkt Rei­he auswählen. Inkre­ment ist mit 1 vor­belegt und dabei kann es auch bleiben. OK und automa­tisch sind alle Zellen mit den Werten aus­ge­füllt.

Und hier genau diesen Vor­gang als VBA-Code, mein­er Mei­n­ung nach super schnell:

Sub IndexNeu_4()
   Dim lRow As Long
   Dim rngData As Range
 
   lRow = Cells(Rows.Count, 2).End(xlUp).Row
   Set rngData = Range("A2:A" & lRow)
   Range("A2") = 1001
   Range("A2").AutoFill Destination:=rngData, Type:=xlFillSeries
End Sub
[NachOben­Let­zte Verweis=„Wege nach Rom: Index”]
Dieser Beitrag wurde unter Mit VBA/Makro, Musterlösungen, Ohne Makro/VBA, Power Query, Tabelle und Zelle, Tipps und Tricks, Wege nach Rom abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.