Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1284to1288
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

Unikateproblem VBA-Lösung gesucht

Unikateproblem VBA-Lösung gesucht
13.11.2012 12:30:03
Sibylle
Guten Tag,
in Spalte A der Tabelle Eingabe sind Artikelnr gespeichert, die mehrfach vorkommen können. In A5 steht die Überschrift, ab A6 stehen die Nummern selbst.
In der Tabelle Auswertung sollen nun ab A6 die Artikalnummern nur einmal erscheinen, am besten aufsteigend sortiert.
Meine VBA-Kenntnisse ermöglichen es mir im Moment noch nicht die Lösung selbst zu erstellen.
Wer kann helfen?
Besten Dank im Voraus.
Gruß
Sibylle

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Unikateproblem VBA-Lösung gesucht
13.11.2012 12:36:27
Rudi
Hallo,
warum erstellst du die Liste nicht einfach per Spezialfilter?
Gruß
Rudi

AW: Unikateproblem VBA-Lösung gesucht
13.11.2012 13:39:45
Sibylle
Hallo Rudi,
der Ansatz mit dem Spezialfilter ist mir bekannt.
Es sind mehrere Gründe, die in diesem Fall eine VBA-Lösung nahe legen:
a. der Lerneffekt - die Kenntnisse in VBA sollen ergänzt, vertieft werden.
b. ein häufiger Aufruf eines funktionierenden Programmes
c. die Anzahl der Originaldaten verändert sich häufig
d. auf der Basis dieses Teils des Programms soll später das Programm ergänzt werden.
Wirst Du mir beim Ersatz des Spezialfilters durch ein VBA-Programm weiter helfen?
Besten Dank im Voraus.
Gruß
Sibylle

Anzeige
AW: Unikateproblem VBA-Lösung gesucht
13.11.2012 13:52:22
Rudi
Hallo,
a. der Lerneffekt - die Kenntnisse in VBA sollen ergänzt, vertieft werden.
sehr lobenswert!
kann man so machen:
Sub sibylle()
Dim rngC As Range, oArt As Object, arrArt
Set oArt = CreateObject("scripting.dictionary")
With Sheets("Eingabe")
For Each rngC In .Range(.Cells(6, 1), .Cells(Rows.Count, 1).End(xlUp))
oArt(rngC.Value) = 0
Next
End With
arrArt = oArt.keys
QuickSort arrArt
Sheets("Ausgabe").Cells(6, 1).Resize(oArt.Count) = WorksheetFunction.Transpose(arrArt)
End Sub
Sub QuickSort(ByRef DasArray, Optional ErsteZeile, Optional LetzteZeile)
On Error Resume Next
Dim UnterGrenze As Long, OberGrenze As Long
Dim AktuellerWert, GemerkterWert As Variant
If IsMissing(ErsteZeile) Then
ErsteZeile = LBound(DasArray)
End If
If IsMissing(LetzteZeile) Then
LetzteZeile = UBound(DasArray)
End If
UnterGrenze = ErsteZeile
OberGrenze = LetzteZeile
AktuellerWert = DasArray((ErsteZeile + LetzteZeile) / 2)
Do While (UnterGrenze  AktuellerWert And OberGrenze > ErsteZeile)
OberGrenze = OberGrenze - 1
Loop
If (UnterGrenze  ErsteZeile) Then Call QuickSort(DasArray, ErsteZeile, OberGrenze)
If (UnterGrenze 

Gruß
Rudi

Anzeige
AW: Unikateproblem VBA-Lösung gesucht
13.11.2012 15:14:19
Sibylle
Hallo Rudi,
vielen Dank für Dein Programm, das super funktioniert.
Natürlich habe ich als Anfängerin dazu Fragen um deren Beantwortung ich Dich bitten möchte:
Zu Zeile 1
arrArt ist das ein Array?
Zu Zeile 2
Gibt es dazu eine gute Nachschlagestelle, damit man diese Konstruktion auch richtig verstehen kann?
Zu Zeile 3:
Ist mir völlig unklar, da tun sich Welten der Unwissenheit auf
Zu Zeile 4:
Ist das ein Indexarray, der sortiert werden soll?
Besten Dank im Voraus.
Gruß
Sibylle
Sub sibylle()
1  Dim rngC As Range, oArt As Object, arrArt
2  Set oArt = CreateObject("scripting.dictionary")
With Sheets("Eingabe")
For Each rngC In .Range(.Cells(6, 1), .Cells(Rows.Count, 1).End(xlUp))
3      oArt(rngC.Value) = 0
Next
End With
4  arrArt = oArt.keys
QuickSort arrArt
Sheets("Ausgabe").Cells(6, 1).Resize(oArt.Count) = WorksheetFunction.Transpose(arrArt)
End Sub

Anzeige
AW: Unikateproblem VBA-Lösung gesucht
13.11.2012 16:26:19
Rudi
Hallo,
ich hätte deinen Wissensdurst nicht loben sollen ;-)
1. Ja, das brauchen wir später (4.)
2. VBA-Hilfe: Dictionary-Objekt.
Das Dictionary-Objekt kann beliebige Daten (Items) speichern. Diese werden mit einem eindeutigen Schlüssel (Key) verknüpft.
3. Dem Element mit dem Schlüssel 'Artikelnummer' wird der Wert 0 zugewiesen. Wir wollen ja nur die eindeutigen Schlüssel haben. Der Wert (Items) ist uns egal. oArt(rngC.Value) = "Sibylle" wäre genauso möglich.
4. Hier werden alle Schlüssel (Keys) in ein (eindimensionales) Array eingelesen. Das nur, damit man die ArtNr sortieren kann.
Gruß
Rudi

Anzeige
AW: Unikateproblem VBA-Lösung gesucht
13.11.2012 16:55:59
Sibylle
Hallo Rudi,
das Lob war wohl etwas verfrüht ausgesprochen, tat dennoch gut.
Vielen Dank für Deinen Beitrag.
Ich habe noch eine Verständnisfrage:
Wenn eine ArtikelNr zum ersten Mal erkannt wird, wird ein eindeutiger interner Key vergeben.
Taucht dieselbe ArtikelNr ein zweites Mal auf, dann wird die 0 vergeben, was zu einer Nichtaufnahme in das Objekt führt? Und die weitere Verarbeitung erfolgt dann nur noch mit den eindeutigen Keys?
Darf man sich das so vorstellen?
An der Klärung des Sachverhaltes bin ich sehr interessiert.
Für Deine Geduld besten Dank.
Gruß
Sibylle

Anzeige
AW: Unikateproblem VBA-Lösung gesucht
13.11.2012 17:09:06
Rudi
Hallo,
nicht ganz richtig.
Das schöne ist, dass ein Element automatisch angelegt wird, wenn es noch nicht vorhanden ist.
oArt(12345)=0 wird also entweder mit dem Wert 0 neu angelegt oder es wird ihm die 0 zugewiesen.
Somit hat man am Ende ein Datenfeld mit lauter einmaligen Werten.
Es gibt zwar auch eine Add-Methode, diese führt aber zu einem Fehler, wenn man sie mit einem bereits vorhandenen Schlüssel anwendet.
Weiteres:
Das Dictionary ist das schnellste Objekt, das in VBA zur Verfügung steht.
Man muss sich nicht um die Größe kümmern.
Es kann beliebige Daten aufnehmen.
Gruß
Rudi
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige