Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1536to1540
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Niedrigste Freie Zahl in Zahlenreie

Niedrigste Freie Zahl in Zahlenreie
31.01.2017 16:36:13
Chatzebuseli
Hallo Liebe VBA-Gemeinde.
Ich stehe wider mal etwas auf dem Schlauch.
Ich benötige in einem Projekt einen "Artikelnummer- Generator". Bis jetzt hat das Modul das Ihn beschreibt auch ganz gut funktioniert. Nun bin ich aber auf einen Problem gestossen. Wenn in der Artikelliste ein verkaufter Artikel rausgelösche, haut er nicht mehr hin.
Kurz zur Zusammensetzung der Artikelnummer:
Für den Benutzer sieht die z.B. so aus:
01-036-0004
Das "01" steht für die Art des Artikels.(Für uns hier nicht wirklich relevant da es gleichzeitig die Tabelle widerspiegelt. In diesem Fall eine Halskette. Halsketten = Tabelle 1.)
"036" bezeichnet das Mineral aus welchem der Artikel hergestellt ist.( Wird automatisch mit hilfe einer durchnummerierten Mineralienliste erstellt.)
Nun zum eigendlich Interresannten bzw. Problematischen Teil.
"0004" Ist eine fortlaufende nummerierung der Halsketten aus dem selben Mineral.
In einem Ersten Schritt schreibe ich die fortlaufende Nummer in eine extra Spalte in der Tabelle für alle Artikel des selben Minerals.
Code:
Do While Tabelle2.Cells(NZei, 2).Value Empty
VarSp2AktuellWert = Trim(CStr(Tabelle2.Cells(NZei, 2).Text))
If VarSp2AktuellWert = ArtnrTeil2 Then
AnzArt = AnzArt + 1
Tabelle2.Cells(A, 59).Value = Tabelle2.Cells(NZei, 3).Value
A = A + 1
End If
NZei = NZei + 1
Loop
Nun zur eigendlichen Frage:
Wie muss ich das anstellen das ich die KLEINSTE NICHTVORHANDENE ZAHL in dieser Provisorisch erstellten Spallte ermitteln kann auch wenn es immer wieder lerre zellen in dieser Spalte enthält?
Mein Bisheriger Code zum ermitteln der vortlaufender Nummer
For A = 1 To AnzArt
Do While Tabelle2.Cells(NZei, 59).Value Empty
VarSp3AktuellWert = Trim(CStr(Tabelle2.Cells(NZei, 59).Value))
If VarSp3AktuellWert = A Then
strEingabewertArtnr3 = strEingabewertArtnr3 + 1
NZei = NZei + 1
Exit Do
Else
strEingabewertArtnr3 = A
Exit For
End If
NZei = NZei + 1
Loop
Next
Das Problem an diesem Code ist das er nur solange funktioniert, solange die Zahlenrheie unterbruchslos weiter läuft.Wird aber ein Artikel gelöscht(Verkauft) so haut er nicht mehr hin. Wenn ich aber die Artikelnummer eines rausgelöschten artikels für einen Artikel nutzen möchte geht das so nicht.
Was muss ich ändern bzw.wie kann ich erreichen das er mir immer die kleinze freie Zahl als laufende Nummer ausgiebt?
Ich danke Euch jetzt schon im Voraus für eure Hilfe.
Griessli Chatzebuseli

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Niedrigste Freie Zahl in Zahlenreie
05.02.2017 17:41:39
onur
Hi,
Du drückst dich etwas seltsam aus. "KLEINSTE NICHTVORHANDENE ZAHL" heisst das kleinste Zeilennummer?
Was willst du - die erste leere Zeile finden und beschreiben oder sie überspringen und die unterste Zeile finden?
Gruß
Onur
AW: Niedrigste Freie Zahl in Zahlenreie
06.02.2017 06:26:36
Chatzebuseli
Hallo
Nein ich meine das folgendermassen:
Ich habe eine Spalte (BG) in welcher ich ab Zeile zwei, nummerische,ganze Werte stehen habe.
Diese Werte sind aber weder in der reihenfolge noch ist die Zahlenreie (von oben nach unten) vollständig.
Nun möchte ich in dieser Spalte (der bereich der Zeilenanzahl ist Dynamisch)den kleinsten nichtvorhandenen Wert ermitteln. Also es geht mir um den Inhalt der zellen nicht um eine Zeilenzahl.
Danke für deine Hilfe
Anzeige
AW: Niedrigste Freie Zahl in Zahlenreie
06.02.2017 07:46:10
Chatzebuseli
Hallo zusammen:
Ich bastle ja selber auch an diesem Problem rum.
Meine bisherigen Schritte und Lösungsansätze:
1.)
Ich vergleiche mit einer If-Then abfrage alle Werte im zweiten teil meiner Artikelnummer mit der Vorgabe die aus dem Mineral resultiert und schreibe den 3 Teil der Artikelnummer, bei übereinstimmung in Spalte("BG").
Code:
A = 2 'Steht für die Zeilen in Spalte BG
NZei = 2 'Allgemeiner Zeilenzähler
Do While Tabelle2.Cells(NZei, 2).Value Empty
VarSp2AktuellWert = Trim(CStr(Tabelle2.Cells(NZei, 2).Text))
If VarSp2AktuellWert = ArtnrTeil2 Then
AnzArt = AnzArt + 1
Tabelle2.Cells(A, 59).Value = Tabelle2.Cells(NZei, 3).Value
A = A + 1
End If
NZei = NZei + 1
Loop
2.) Nun sortiere ich die Spalte BG in eine aufsteigende Zahlenfolge. Das heisst aus 3,4,5,1,6,8 mache ich in der Spalte BG 1,3,4,5,6,8.
Code:(Mit Makro aufgenommen und nach bestem wissen und gewissen angepasst)
Range(Cells(2, 59), Cells(A, 59)).Select
With Tabelle2.Sort
.SortFields.Clear
.SortFields.Add Key:=Range(Cells(2, 59), Cells(A, 59)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range(Cells(2, 59), Cells(A, 59))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
3.)
Nun das eigendliche Problem!
Wie schaffe ich es aus der Zahlenreihe 1,3,4,5,6,8 die 2 zu ermitteln?
Anzeige
AW: Niedrigste Freie Zahl in Zahlenreie
06.02.2017 18:34:06
onur
Hi,
Schreibe dies in ein MODUL (notfalls eins hinzufügen):
Public Function KleinsteLuecke(ByVal ze1 As Variant, ByVal ze2 As Variant, ByVal sp As Variant)
Dim n, x As Long
Dim v()
Dim found As Boolean
v = Range(Cells(ze1, sp), Cells(ze2, sp)).Value
For x = 1 To 9999
found = False
For n = 1 To UBound(v)
If v(n, 1) = x Then
found = True
End If
Next n
If Not found Then
KleinsteLuecke = x
Exit Function
End If
Next x
End Function
Benutzung überall im code: XY=KleinsteLuecke(2, 10, 1) (Suche ab Zeile 2, bis Zeile 10,in Spalte 1)
Du brauchst nix mehr zu sortieren, einfach bereich eingeben und los.
Anzeige
AW: Niedrigste Freie Zahl in Zahlenreie
07.02.2017 05:58:55
Chatzebuseli
Hi Onur
Hezlichsten Dank für deine Hilfe.
Funktioniert einwandfrei und ist 5 mal weniger Code als mein versuch das Problem zu lösen.
Perfekt Danke
Griessli
Chatzebuseli

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige