Zahlen zählen
Hallo,
ich habe da ein Problem, wo ich mit sicher bin, daß Ihr mir weiterhelfen könnt.
Ich habe eine Tabelle, wo Artikel in Lagerorten stehen.
in Spalte A sind die Artikelnamen in Spalte B sind die Lagerorte.
Beispiel: ArtikelX Lagerort 225,226
ArtikelY Lagerort 312-314
ArtikelZ Lagerort 45,46
Nun habe ich ein Lagerortplan von 1 - 566. Um rauszufinden, welche Lagerort frei sind, bräuchte ich eine Formel, die aus den Werten in Tabelle 1 die Spuren in Tabelle 2 als belegt anzeigt.
Vielen dank im voraus.
Gruß
manzur
Antwort schreiben
Antwort 1 von rainberg vom 14.03.2021, 17:24 Options
Hallo manzur,
das wird Dir mit dieser Tabellenstruktur nicht gelingen, da diese nicht datenbankgerecht ist.
D.h. die Lagerorte dürfen nicht durch Komma getrennt oder als von-bis-Angabe in einer Zelle stehen, sondern gehören in getrennte Spalten der jeweils gleichen Zeile.
Gruß
Rainer
Antwort 2 von manzur1 vom 14.03.2021, 17:32 Options
Hallo Rainer,
leider sind die Lagerorte in dieser Form. Vielleicht kann man mit Hulfsspalten arbeiten, welches die Zahlen auseinandernimmt.
Danke nochmals.
Gruß
manzur1
Antwort 3 von rainberg vom 14.03.2021, 18:35 Options
Hakko manzur,
Die Lagerorte, welche durch Komma getrennt sind, in Hilfsspalten zu bringen, wäre zu machen aber die von-bis Angaben nur mit Akrobatik.
Ich frage mich, warum Du so einen Aufwand treiben willst, nur weil ein Datenerfasser zu faul ist, sich an die Normalitäten zu halten.
Tut mit leid, aber sowas werde ich nicht unterstützen.
Gruß
Rainer
Antwort 4 von RaHi vom 14.03.2021, 21:48 Options
Hallo Manzur1,
ich bin der Meinung, dass der Mensch sich nicht dem Computer anpassen soll, sondern umgekehrt, der Computer dem Menschen. Aus diesem Grund unterstütze ich das!
Ich gehe bei meinem Lösungsansatz davon aus, dass in Spalte A der Artikelname steht und in Spalte B die Lagerorte. Mit der folgenden Prozedur schreibe ich den Artikel in Spalte C und den einzelnen Artikelort in Spalte D. Die Prozedure erlaubt folgende Lagerortsyntax:
44,55,66
1-5,7-9
20-25
11
usw. Hier der Code.
Public Sub getLagerorte()
Dim a As Variant
Dim b As Variant
For i = 1 To 1000
Debug.Print Me.Cells(i, 2)
a = Split(Me.Cells(i, 2), ",")
For j = LBound(a) To UBound(a)
b = Split(a(j), "-")
If UBound(b) - LBound(b) = 1 Then
For k = b(0) To b(1)
Me.Cells(k, 4) = k
Me.Cells(k, 3) = Me.Cells(i, 1)
Next
Else
Me.Cells(a(j), 4) = a(j)
Me.Cells(a(j), 3) = Me.Cells(i, 1)
End If
Next
Next
End Sub
Wie gesagt, das ist nur ein Ansatz. Damit kannst du aber bestimmt weiter kommen. Du musst den Code in das Codemodul der Tabelle mit den Daten kopieren. Mit F5 kannst du die Prozedur ausführen (Cursor muss in der Prozedur stehen) oder mit F8 im Einzelschrittmodus ausführen. Dabei kannst du dir die Werte der Variablen ansehen (Cursor einfach über die Variable bewegen) und den Algorithmus analysieren. Viel Spass damit.
Gruß
Ralf
Gruß
Ralf
Antwort 5 von rainberg vom 15.03.2021, 13:24 Options
Hallo Ralf,
Zitat:
ich bin der Meinung, dass der Mensch sich nicht dem Computer anpassen soll, sondern umgekehrt, der Computer dem Menschen. Aus diesem Grund unterstütze ich das!
.....selbstverständlich akzeptiere ich auch Deine Meinung.
Trotzdem vertrete ich den Standpunkt, dass eine Datenerfassung nur dann optimal ist, wenn Auswertungen mit normalen Excel-Bordmitteln (Tabellenfunktionen, Filter, Pivot) möglich sind.
VBA zähle ich zu einer Erweiterung des Genannten.
Gruß
Rainer