Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Werte in vba sortieren und doppelte löschen

Werte in vba sortieren und doppelte löschen
09.07.2013 15:36:52
Rene
Hallo,
ich weiß, so ähnliche Beiträge sind schon mal gepostet wurden. Aber ich bin leider aus den Archivbeiträgen nicht schlau geworden .... leider.
Ich habe folgendes Problem: Ich habe eine Liste, die auch dynamisch gefüllt wird.
Die Werte aus der Liste (Zelle A3, A4, A5, .... ) möchte ich als Listenwerte in eine bestimmte Zelle eingeben.
Die Listenwerte bestimme ich mit:
Sub Makro4()
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
Formula1:="Wert1,Wert2,Wert3"
End With
End Sub

Für mich ist jetzt nur die Frage, wie bekomme ich die Werte aus meiner ursprünglichen Liste da rein. Achtung: die Werte aus der Ursprungsliste können doppelt vorkommen und sind unsortiert.
Es sind auch nicht allzu vielle Werte (maximal 1.000), so dass selbst ein bisschen umständlicher Allgorhytmus das seine tun sollte. Ich will / muss ihn halt nur verstehen.
Vielen Dank für alle Tipps.

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte in vba sortieren und doppelte löschen
09.07.2013 16:40:48
Rudi
Hallo,
Option Explicit
Sub aaa()
Dim objList As Object, arrList, rngC As Range
Set objList = CreateObject("Scripting.dictionary")
For Each rngC In Range(Cells(3, 1), Cells(Rows.Count, 1).End(xlUp))
objList(rngC.Value) = 0
Next
arrList = objList.keys
QuickSort arrList
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
Formula1:=Join(arrList, ",")
End With
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, 1)
End If
If IsMissing(LetzteZeile) Then
LetzteZeile = UBound(DasArray, 1)
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: Werte in vba sortieren und doppelte löschen
10.07.2013 06:42:23
Rene
Vielen Dank für den Code. Der funktioniert bei mir Super.
Allerdings ist meine Liste (jetzt etwa 500 Einträge) für die Aufnahme in das Listenfeld zu lang. Komisch. Wenn ich es 'per Hand' mache, dann klappt es nämlich. Gibt es hier per vba Beschränkungen?

AW: Werte in vba sortieren und doppelte löschen
09.07.2013 17:06:48
UweD
Hallo
Da der Ort deiner Liste ja scheinbar bekannt ist, kannst du dort doch bereits die Duplikate entfernen und sortieren Oder?
Ich habe mal angenommen die Daten stehen in Tabelle1 in Spalte K
Sub DUPP_raus()
Dim WB, Liste As Range
Set WB = ActiveWorkbook.Sheets("Tabelle1") 'anpassen
Set Liste = WB.Columns("K:K") 'anpassen
Liste.RemoveDuplicates Columns:=1, Header:=xlNo
With WB.Sort
.SortFields.Clear
.SortFields.Add Key:=Liste, SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.SetRange Liste
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
Formula1:="=" & Liste.Address
End With
End Sub
Gruß UweD

Anzeige
AW: Werte in vba sortieren und doppelte löschen
10.07.2013 06:43:10
Rene
vielen Dank für die Antwort. Hat bei mir aber nicht richtig funktioniert. Der zweite Beitrag aber sofort. Warum weiß ich nicht, aber ich konnte jetzt mal weiterarbeiten. Vielen Dank dennoch für die Mühe.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Werte in VBA sortieren und Duplikate entfernen


Schritt-für-Schritt-Anleitung

Um Werte in Excel mit VBA zu sortieren und Duplikate zu entfernen, kannst du folgende Schritte durchführen:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu starten.
  2. Erstelle ein neues Modul:

    • Rechtsklicke im Projektfenster auf "VBAProject (DeineDatei.xlsx)".
    • Wähle Einfügen > Modul.
  3. Füge den folgenden Code ein:

    Option Explicit
    
    Sub WerteSortierenUndDuplikateEntfernen()
       Dim objList As Object, arrList, rngC As Range
       Set objList = CreateObject("Scripting.Dictionary")
    
       ' Durchlaufe die Liste und füge Werte hinzu
       For Each rngC In Range(Cells(3, 1), Cells(Rows.Count, 1).End(xlUp))
           objList(rngC.Value) = 0
       Next
    
       ' Sortiere die Liste
       arrList = objList.keys
       QuickSort arrList
    
       ' Setze die Validierung für die Auswahl
       With Selection.Validation
           .Delete
           .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
           Formula1:=Join(arrList, ",")
       End With
    End Sub
    
    Sub QuickSort(ByRef DasArray, Optional ErsteZeile, Optional LetzteZeile)
       ' ... (Hier sollte der QuickSort-Algorithmus eingefügt werden)
    End Sub
  4. Führe das Makro aus:

    • Schließe den VBA-Editor und gehe zurück zu Excel.
    • Wähle die Zelle aus, in der du die Liste anzeigen möchtest.
    • Drücke ALT + F8, wähle WerteSortierenUndDuplikateEntfernen und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: "Der Bereich ist zu groß"

    • Möglicherweise überschreitest du die maximale Anzahl an Einträgen für die Datenüberprüfung. Stelle sicher, dass die Liste nicht mehr als 32.767 Zeichen enthält.
  • Fehler: "Kein gültiger Wert" bei der Validierung

    • Überprüfe, ob die Liste in der Zelle korrekt gesetzt wurde. Möglicherweise sind Duplikate oder leere Werte vorhanden.

Alternative Methoden

Eine andere Methode, um Duplikate zu entfernen und die Liste zu sortieren, ist die Verwendung von RemoveDuplicates und Sort. Hier ist ein Beispiel:

Sub DuplikateEntfernenUndSortieren()
    Dim WB As Worksheet
    Set WB = ActiveWorkbook.Sheets("Tabelle1") 'Passe den Blattnamen an
    Dim Liste As Range
    Set Liste = WB.Columns("K:K") 'Passe den Bereich an

    ' Duplikate entfernen
    Liste.RemoveDuplicates Columns:=1, Header:=xlNo

    ' Sortierung anwenden
    With WB.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Liste, SortOn:=xlSortOnValues, _
        Order:=xlAscending, DataOption:=xlSortTextAsNumbers
        .SetRange Liste
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .Apply
    End With
End Sub

Praktische Beispiele

  • Beispiel: Duplikate aus einer dynamischen Liste entfernen

    Angenommen, deine Daten befinden sich in den Zellen A3 bis A1000. Der folgende Code entfernt Duplikate und sortiert sie:

    Sub EntfernenUndSortieren()
      Dim rng As Range
      Set rng = Range("A3:A1000")
      rng.RemoveDuplicates Columns:=1, Header:=xlNo
      rng.Sort Key1:=rng, Order1:=xlAscending, Header:=xlNo
    End Sub
  • Beispiel: Duplikate mit SQL in VBA löschen

    Du kannst auch SQL verwenden, um doppelte Einträge in einer Datenbank zu löschen. Hier ist ein Beispiel:

    Sub SQLDuplikateLoeschen()
      ' Verbindung zur Datenbank und SQL-Befehl hier einfügen
      ' Beispiel: "DELETE FROM Tabelle WHERE ... "
    End Sub

Tipps für Profis

  • Nutze Scripting.Dictionary, um die Performance zu verbessern, wenn du mit großen Datenmengen arbeitest.
  • Achte darauf, dass die Zellen in der Liste keine Leerzeichen oder unsichtbare Zeichen enthalten, um Probleme beim Entfernen von Duplikaten zu vermeiden.
  • Setze die Werte in einer benannten Liste, um die Verwaltung der Daten zu erleichtern.

FAQ: Häufige Fragen

1. Frage Wie kann ich die Sortierung in Excel entfernen?

Antwort: Du kannst die Sortierung in Excel entfernen, indem du die Daten ohne eine spezifische Sortierung zurücksetzt oder die Liste erneut importierst.

2. Frage Gibt es eine Begrenzung für die Anzahl der Einträge in einer Datenüberprüfung?

Antwort: Ja, die maximale Zeichenanzahl für die Datenüberprüfung in Excel beträgt 32.767 Zeichen, was die Anzahl der Einträge beeinflussen kann.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige