Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
920to924
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
920to924
920to924
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Spalte auslesen, doppelte Einträge entfernen...

Spalte auslesen, doppelte Einträge entfernen...
03.11.2007 21:25:00
Gerhard
Hallo Leute...
Ich gebs auf... Ich hab null Durchblick mehr. Habe von Thomas Haß und Peter Feustel schon ne beachtliche Hilfe bekommen, da sie mir soetwas wie ich suche für meine Mappe schon geschrieben haben. Allerdings war da noch n bischen mehr dabei (Combobox in Abhängnigkeit)
Ich dachte das schauste dir an, baust es um und wendest es für deine weiteren Bedürfnisse an... Pustekuchen ich blick da ned wirklich durch, also bin ich wieder hier.
Was ich nun will ist keine Komplettlösung für meine Mappe sondern eher ne Allgemeinlösung, die ich "lesen" kann. (Und n Buch werde ich mir kaufen, sobald ich ma ein gutes gefunden habe, das auch so n geistiger Tiefflieger wie ich verstehe :D )
Hierzu die erforderlichen Daten:
In Tabelle 1 Spalte A stehen die eingebenen Daten und wird fortlaufend durch eine Userform erweitert. Diese sollen nun ausgelesen werden, doppelte Einträge entfernt werden und Alphabetisch sortiert in
Tabelle 2 Spalte A wieder aufgelistet werden.
Dann kommt noch die UserForm mit ComboBox1 die auf diese Daten als Auswahl zugreift.
Könnte einer von euch mir eine ganz allgemeine Lösung hierfür stricken? Klasse wären auch viele viel grünen Kommentare in dem VBA Script... :D
Und versprochen dann geb ich für heute :P Ruhe...
Schon mal Danke und nen Schönen Abend noch!!!
Gerhard

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalte auslesen, doppelte Einträge entfernen...
03.11.2007 21:42:00
{Boris}
Hi Gerhard,
das kannst Du alles mit dem Makrorecorder erledigen:
Ausgehend von Tabelle2 - Spezialfilter ohne Duplikate und anschließend sortieren
Ich hab das gerade mal aufgezeichnet - sieht dann so aus:

Sub Makro2()
' Makro2 Makro
' Makro am 03.11.2007 von {Boris} aufgezeichnet
Sheets("Tabelle1").Columns("A:A").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("A1"), Unique:=True
Columns("A:A").Select
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
End Sub


Und ohne die Selektiererei:


Sub Makro_bereinigt()
With Worksheets("Tabelle2")
Worksheets("Tabelle1").Columns("A:A").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=.Range("A1"), Unique:=True
.Columns("A:A").Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End With
End Sub


Grüße Boris

Anzeige
AW: Spalte auslesen, doppelte Einträge entfernen...
03.11.2007 21:45:00
Thomas
Hallo Gerhard,
nich den Kopf hängen lassen. Ist die Datei vom Peter heut die aktuelle an der weiter gearbeitet werden soll? Wenn nicht, schick mal das Aktuellste hierher. Dann schau ich mal was zu machen ist.
- DAS SOLL NIEMAND ANDEREN ABHALTEN ES AUCH ZU TUN! -
Also die komplette Tabelle 1 soll nach Tabelle 2 kopiert werden, nur dort nach Alphabeth sortiert sein?
Am besten den Punkt versuchen genauer zu erklären.
Gruß Thomas

AW: Spalte auslesen, doppelte Einträge entfernen...
03.11.2007 21:54:42
Gerhard
N Abend Thomas.
Nein, nicht die komplette Tabelle sondern nur die Spalte A aus Sheet 1 soll ausgelesen, sortiert und nach Sheet 2; Spalte A kopiert werden.
Und dann soll auf diese Spalte Sheet 2 Spalte A eine ComboBox zugreifen.
Bei der ComboBox auch wieder "dynamischer" Bereich keinen festen, da sich die Spalte ja verlängert.
Mir gehts hier bei diesem Beispiel eigentlich nur darum das ich den "Vorgang" begreife... Zusammenbauen möcht ich es selber, ich kann ja euch nicht alles machen lassen *imkreisgrins* Warte nur bis die "Suchfunktion" kommt... Du wirst deine super Hilfsbereitschaft noch bereuen... :D
Sorry wenn ich mich ned klar genug ausgedrückt hab... aber mir raucht der Kopf...
Gruß Gerhard der jetzt erst ma eine rauchen muss...

Anzeige
AW: Spalte auslesen, doppelte Einträge entfernen...
03.11.2007 22:00:12
Tino
Hallo,
hier mal eine Lösungvorschlag.

Sub Test_Lösche_Sortieren()
Dim a, b, anz As Long
'Lösche Ihnhalt Tabelle2 für die neuen Einträge
Sheets("Tabelle2").Range("A:A").ClearContents
'Sortiere Spalte A
Columns("A:A").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
'Zähle alle Einträge Für Schleife
For a = 1 To Application.WorksheetFunction.CountA(Range("A:A"))
'Zähle Einträge für Prüfung auf doppelte
anz = Application.WorksheetFunction.CountIf(Range("A:A"), Cells(a, 1))
'Eintrag in Tabelle2 schreiben
Sheets("Tabelle2").Range("A65000").End(xlUp).Offset(1, 0) = Cells(a, 1)
If anz > 1 Then
For b = 1 To anz - 1
Cells(a + b, 1).Clear 'Lösche doppelteen Eintrag
Next b
a = a + anz - 1
End If
Next a
'Sortiere Tabelle2
Sheets("Tabelle2").Columns("A:A").Sort Key1:=Sheets("Tabelle2").Range("A1"), Order1:= _
xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub


Gruss
Tino

Anzeige
AW: Spalte auslesen, doppelte Einträge entfernen...
03.11.2007 22:46:00
Gerhard
N Abend Tino!!!
Also ich hoff du hast n büschen Zeit und kannst mir ein wenig erklären...
'Sortiere Spalte A
Columns("A:A").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Das habe ich soweit verstanden, hier wird in Tabelle 1 die Spalte A Sortiert...
Meine Frage hierzu: Wenn eine Tabelle jetzt nicht wie in meinem Fall aus einer Spalte besteht, führt das Sortieren nicht zu Problemen, weil ja die Sortierten Daten in Spalte A nicht mehr zu den Daten in B, C, D etc. passen?
Ist dieses Sortieren nötig? Wenn ja warum?
'Zähle alle Einträge Für Schleife
For a = 1 To Application.WorksheetFunction.CountA(Range("A:A"))
Hier habe ich eine etwas vom Thema abweichende Frage:
Wenn diese Einträge nicht auf Tabellen Blatt 1 stehen, sondern auf einem Namens XYZ, wie muss dann diese Zeile heissen?
Sorry wenn ich dezent auf n Geist gehe... aber ich will das jetzt ein für alle mal kapieren :)
Gru? Gerhard

Anzeige
AW: Spalte auslesen, doppelte Einträge entfernen...
03.11.2007 22:51:25
Horst
Hi,
der Spezialfilter kommt auch mit nicht sortierten Listen klar, Sortierung einfach weglassen.
For a = 1 To Application.WorksheetFunction.CountA(Sheets("DeineTabelle").Range("A:A"))
mfg Horst

AW: Spalte auslesen, doppelte Einträge entfernen...
03.11.2007 23:04:48
Tino
Hallo,
dass sortieren kann in meinem Beispiel auch umgangen werden, in dem ich Spalte A erst in die zweite Tabelle kobiere.(siehe Code unten)
zu 2. Wenn diese Einträge nicht auf Tabellen Blatt 1 stehen, sondern auf einem Namens XYZ
For a = 1 To Application.WorksheetFunction.CountA(sheets("Mein Tabellenname").Range("A:A"))

Sub Neu_Lösche_Sortiere()
Dim a, b, anz As Long
Sheets("Tabelle2").Range("A:A").ClearContents
Sheets("Tabelle1").Columns("A:A").Copy
Sheets("Tabelle2").Range("A1").PasteSpecial
'Sortiere Tabelle2
Sheets("Tabelle2").Columns("A:A").Sort Key1:=Sheets("Tabelle2").Range("A1"), Order1:= _
xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
'Zähle alle Einträge Für Schleife
For a = 1 To Application.WorksheetFunction.CountA(Sheets("Tabelle2").Range("A:A"))
'Zähle Einträge für Prüfung auf doppelte
anz = Application.WorksheetFunction.CountIf(Sheets("Tabelle2").Range("A:A"), Cells(a, 1))
If anz > 1 Then
For b = 1 To anz - 1
Cells(a + b, 1).Clear 'Lösche doppelteen Eintrag
Next b
a = a + anz - 1
End If
Next a
'Sortiere Tabelle2
Sheets("Tabelle2").Columns("A:A").Sort Key1:=Sheets("Tabelle2").Range("A1"), Order1:= _
xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub


Gruss
Tino

Anzeige
AW: Spalte auslesen, doppelte Einträge entfernen...
03.11.2007 23:00:12
Thomas
Hallo Gerhard,
hab dir mal das Beispiel zusammen gebastelt. Hoffe so erkennst was hier passiert.
https://www.herber.de/bbs/user/47376.xls
Gute Nacht & Gruß Thomas

Danke @all ... aber
03.11.2007 23:16:00
Gerhard
Danke Thomas...
Aber... neee ich glaube ich geh auch besser ins Bett :D
Was ich verzweifelt Suche ist die Angabe der SPALTE aus der ausgelesen werden soll...
Zeilen sind ja genug drinne...
Ich glaub ich schau mir das morgen nochmals in aller aller Ruhe an...
Dieses VBA Zeuchs wird und bleibt ein Buch mit sieben Siegeln sein... :D
Trotzdem euch allen Danke für eure Mühe...

Anzeige
Danke @all und nix mehr aber !!! oT
03.11.2007 23:42:55
Gerhard
DANKE !!!!
Jetzt hab ich es kapiert!!!
Funzt einwandfrei...

AW: Danke @all ... aber
03.11.2007 23:45:18
Thomas
Bin dann doch nochmal hier...
also die Zeilen und Spalten werden als Zahlen angegeben. Bei den Zeilen is das ja klar, Zeile 1 = 1 usw. Bei den Spalten ist das ähnlich:
A=1
B=2...usw.
Wenn du suchst wo das drinsteht, z.B. hier:
Cells(1, 2) = Zelle mit der Zeile 1 und der Spalte 2(B), also B1
Erkennbar hier:
WkSh_Q.Cells(lZeile_Q, 1) = Sheets(1).Cells(1, 1) = Sheets(1).[A1] (wenn lZeile_Q = 1)
Die Zeilen und Spaltennummern werden oft in Variablen gepackt, vorallem wenn die Abfragen dynamisch sein solln.
War kein wissenschaftlicher Vortrag, aber sollte verständlich sein.
Tschüß Thomas

Anzeige
Nochmals zur ComboBox
04.11.2007 09:21:35
Gerhard
Sooo das hab ich jetzt also kapiert und kann es auch einigermaßen "lesen" was hier von statten geht.
Habe diesbezüglich aber noch eine Frage (Mappe habe ich mithochgeladen)
https://www.herber.de/bbs/user/47383.xls
Wenn ich nun über die Userform eine Bestellung eintrage auf CommandButton1 klicke (Bestellung eintragen) werden die Angaben in Sheet BPF eingetragen und alle Text und ComboBoxen geleert um weitere Bestellungen einzutragen.
Allerdings wird die Auswahl der ComboBoxen, wenn vorhergehend ein neuer Lieferant, Hersteller oder Artikelbezeichung mit eingegeben wird, nicht aktualisiert.
Ich müsste also wieder alles speichern, schliessen, neu öffen um den neuen Lieferant, Hersteller oder Artikelbezeichung in meiner Auswahl der ComboBox mit aufgeführt zu haben.
Gibt es hierfür ne Lösung, das das Aktualisieren sofort nach Klick auf "Bestellung eintragen" geschieht und die Auswahl aktualisiert für die nächste Eintragung erscheint?
LG Gerhard

Anzeige
AW: Nochmals zur ComboBox
04.11.2007 09:33:00
Thomas
Guten Morgen Gerhard,
trage diese Zeilen noch mit ans Ende vom Makro CommandButton1_Click:
Dim WkSh_Q As Worksheet
Dim lZeile As Long
Call Lieferanten
Set WkSh_Q = Worksheets("Hilfstabelle")
For lZeile = 3 To WkSh_Q.Cells(Rows.Count, 3).End(xlUp).Row
Me.ComboBox1.AddItem WkSh_Q.Cells(lZeile, 3).Value
Next lZeile
If Me.ComboBox1.ListCount > 0 Then ComboBox1.ListIndex = 0
Dadurch wird der neue Lieferant mit aufgenommen.
Gruß Thomas

AW: Nochmals zur ComboBox
04.11.2007 11:50:00
Gerhard
Super danke Thomas
Allerdings werden in der ComboBox die "alten" Einträge nicht gelöscht, sondern es werden nochmals die schon bestehenden Lieferanten + den neuen hinten angehängt :(
In der Hilfstabelle passt aber alles... Ich brauche also "irgendetwas" *grins* die mir die ComboBox auch nochmals "leert"
Des weiteren: Funktioniert das dann genauso mit der Artikelbezeichung (nur abgeänderte Spaltenaufrufe)?
Thx nochmal

Anzeige
AW: ComboBox1.Clear
04.11.2007 12:20:00
Thomas
Hallo Gerhard,
füge von Call Lieferanten noch ComboBox1.Clear hinzu. Dann werden alle Einträge erstmal gelöscht.
Das müßte dann auch mit den Artikelbezeichnungen klappen. Du mußt dann eben die Spalten im gesamten Makro anpassen.
Gruß Thomas

AW: ComboBox1.Clear
04.11.2007 12:39:51
Gerhard
Servus Thomas
Zitat:
Hallo Gerhard,
füge von Call Lieferanten noch ComboBox1.Clear hinzu.
Zitat Ende
öööhm... wie meinst du das: füge VON Call Lieferanten noch... ?
Ich glaube ich habe das ComboBox1.Clear jetzt schon an zig verschieden Stellen "eingefügt" irgendwie funzt des ned...
Bekomme ich bitte bitte ne genauere "Lagebeschreibeung... Der Newbie is total verwirrt :D
Gruß Gerhard

AW: ComboBox1.Clear
04.11.2007 12:47:00
Thomas
Hallo Gerhard,
Schreibfehler...VON soll VOR heißen. Hier mal nen "Lageplan" ;o)

Private Sub CommandButton1_Click()
Dim WkSh_Q   As Worksheet
Dim lZeile   As Long
ComboBox1.Clear
Call Lieferanten
Set WkSh_Q = Worksheets("Hilfstabelle")
For lZeile = 3 To WkSh_Q.Cells(Rows.Count, 3).End(xlUp).Row
Me.ComboBox1.AddItem WkSh_Q.Cells(lZeile, 3).Value
Next lZeile
If Me.ComboBox1.ListCount > 0 Then ComboBox1.ListIndex = 0
End Sub


Gruß Thomas

ComboBox1.Clear Hat sich erledigt!!! O.T.
04.11.2007 12:46:00
Gerhard
Dankeeeeeeeee Thomas ich habs selber rausgefunden!!!
Heurekaaa so langsam wird das doch noch was...
Dim WkSh_Q As Worksheet
Dim lZeile As Long
Call Lieferanten
ComboBox.Clear ' da gehört es rein!!!
Set WkSh_Q = Worksheets("Hilfstabelle")
For lZeile = 3 To WkSh_Q.Cells(Rows.Count, 3).End(xlUp).Row
Me.ComboBox1.AddItem WkSh_Q.Cells(lZeile, 3).Value
Next lZeile
If Me.ComboBox1.ListCount > 0 Then ComboBox1.ListIndex = 0
Nochmal Thx...

AW: Nochmals zur ComboBox
04.11.2007 13:17:48
Gerhard
Das war ja fast klar... *grmbl*
Jetzt bekomme ich folgenden Fehler nach dem ich das gleiche für die Artikelbezeichung eingefügt habe:
Laufzeitfehler '381'
Eigenschaft List konnte nicht gesetzt werden. Index des Eigenschaftfeldes ungültig.
Hääää? Was hab ich jetzt wieder für nen Mist gemacht? Was hab ich falsch gemacht / falsch gedacht?
Hier nochmals die Mappe mit meinem "Pfusch"
https://www.herber.de/bbs/user/47390.xls
Gruß Gerhard

AW: Nochmals zur ComboBox
04.11.2007 13:43:00
Thomas
Hallo Gerhard,
Du hast die Variable Artikelbezeichnung wie das Makro benannt. Das geht nicht. Außerdem befülle die Combobox besser so:
Call Artikelbezeichnung ' Makro ausführen um Hilfstabelle zu füllen!
For lZeile = 3 To Worksheets("Hilfstabelle").Cells(Rows.Count, 5).End(xlUp).Row
Me.ComboBox7.AddItem Worksheets("Hilfstabelle").Cells(lZeile, 5).Value
Next lZeile
If Me.ComboBox7.ListCount > 0 Then ComboBox7.ListIndex = 0
Lasse also Dim Artikelbezeichnung... und alles was dann kommt weg und trage das von oben ein.
Gruß Thomas

58 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige