Die Excel Wühlkiste

Freie oder fehlende Nummern einer Liste ermitteln

Hat man eine fortlaufende Liste mit Nummern und es soll festgestellt werden, wellche Nummern fehlen, oder anders ausgedrückt, welche Nummern noch frei sind, kann das folgende Makro angewandt werden.
Um zu verdeutlichen, was hier erreicht werden soll, mag folgendes Beispiel aus der Praxis dienen:
In einem Warenwirtschaftssystem werden Artikelnummern vergeben, die mit weiteren Artikeldaten verknüpft sind. Werden nun diverse Artikel im Laufe der Zeit wieder gelöscht, sind diese Nummern wieder frei zur erneuten Vergabe. Dies ist insbesondere dann sinnvoll, wenn die Artikelnummern gruppiert sind. Das heisst, dass eine Gruppe von Artikelnummern von X bis Y einer bestimmten Warengruppe entsprechen.
Sind nun bereits so viele Artikelnummern belegt, dass eine weitere Vergabe durch Erhöhen der Nummer diese in eine andere Warengruppe hereinreicht, hat man ein Problem. Denn bei Überschneidung können die Artikel nicht mehr der Warengruppe zugeordnet werden.
Hier wird nun die Möglichkeit, durch Artikellöschung freigewordene Nummern wieder zu verwenden, interessant. Ein manuelles Auszählen scheidet hier wegen der Menge von meistens mehreren 1000 angelegten Artikeln in einer Gruppe aus.

 

Dass die Liste der belegten Nummern durch eine geeignete Abfrage des Warenwirtschaftssystemes ermittelt wird, ist sicher soweit klar. Meistens wird dazu ein Datenbankprogramm, wie z. B. Access oder ähnliches verwendet. Dies soll jedoch hier nicht näher behandelt werden.

Sub Nummauffuellen()
' hier wird eine Liste von nicht mehr als
' 9999 Zeilen angenommen. Man kann natürlich auch
' anders vorgehen, indem man ohne feste Listengrösse
' auskommt, dann weiss man aber nicht, wie gross die
' Variable "W" dimensioniert werden muss. Entweder vergrössert
' man sie dann durch "Redim", oder setzt sie gleich zu
' Anfang auf eine bestimmte Grösse. Dann kann man aber
' auch gleich dieses Makro hier ungeändert verwenden.
' Eine weitere Möglichkeit besteht darin, die errechneten
' freien Zahlen direkt in die entsprechenden Zellen zu
' schreiben. In diesem Falle müsste eine "Zeilenvariable"
' hochgezählt werden, was sicherlich zugunsten des
' Arbeitsspeichers wäre. Aber davon haben wir ja alle
' genug. :-)

Dim i As Integer
Dim Ende As Integer
Dim W(1 To 9999) As Integer
Dim Y As Integer
Dim x As Integer

Range("A2").Select
Ende = Application.WorksheetFunction.Max(ActiveCell.EntireColumn)
Zähler = 0
Y = 0

For i = 2 To Ende
If Cells(i, 1).Value = "" Then
Exit For
End If
Y = Cells(i - 1, 1).Value + 1
If Cells(i, 1).Value <> Y Then
Do
Zähler = Zähler + 1
W(Zähler) = Y
Y = Y + 1
Loop Until Y = Cells(i, 1).Value
End If
Next i

' Jetzt werden die freien Nummern in Spalte "B" geschrieben:
Range("B2").Select
For x = 1 To Zähler
Cells(x + 1, 2).Value = W(x)
Next

End Sub
Die Excel Wühlkiste
Valid HTML 4.01 Strict
letzte Aktualisierung: 13.02.2009
Autor: Hubert Scheidgen / 04.02.2009
W3C CSS-Validierungsservice