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

Forumthread: VBA - Liste erstellen

VBA - Liste erstellen
10.03.2016 08:24:31
Brando
Hallo,
ich habe folgendes Makro. Es kopiert aus einer Tabelle 2 eine Liste in Tabelle 1 und sortiert dabei die doppelten aus. Funktioniert gut!
Problem bei dem Kopieren sollen neben den doppelt vorkommenden Texten und leeren Zellen, auch Zellen mit dem Text *tisch nicht berücksichtigt werden.
Da meine VBA Kenntnisse schwach sind, wäre ich hier für Hilfe dankbar!

Sub Makro1()
Dim test
Dim Dic As Object
Dim A As Long
Set Dic = CreateObject("Scripting.Dictionary")
Worksheets("Tabelle1").Range("B117:B150").ClearContents
'Tabellenname anpassen
With Sheets("Tabelle2")
'Komplette Spalte DN
test = .Range("DN2", IIf(IsEmpty(.Cells(.Rows.Count, 118)), .Cells(.Rows.Count, 118).End(  _
_xlUp), .Cells(.Rows.Count, 118)))
'Liste erstellen ohne doppelte
For A = 1 To UBound(test)
If test(A, 1)  "" Then
Dic(test(A, 1)) = 0
End If
Next A
'Daten einfügen
ActiveWorkbook.Sheets("Tabelle1").Range("B117").Resize(Dic.Count) = Application.Transpose(Dic. _
keys)
End With
End Sub

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Liste erstellen
10.03.2016 09:26:54
Daniel
Hi
die Prüfung kannst du so einbauen:
...
For A = 1 to Ubound(test, 1)
If test(A, 1)  "" Then
if Not test(A, 1) like "*tisch" Then
Dic(test(A, 1)) = 0
End If
End If
Next A
...

Gruß Daniel

AW: VBA - Liste erstellen
10.03.2016 10:45:23
Brando
Perfekt Danke!!!

AW: VBA - Liste erstellen für Excel-Profi
10.03.2016 09:41:02
Daniel
Bei deinem Level würde ich dir vielleicht folgende Programmierung vorschlagen:

With Sheets("Tabelle2")
.Range("DN2:DN" & .Cells(.Rows.Count, "DN").End(xlup).row).copy
End with
Sheets("Tabelle1").Select
ActiveSheet.Cells(117, 2).PasteSpecial xlpastevalues
With Selection
.Replace "*tisch", "", xlwhole
.RemoveDuplicates 1, xlno
on Error Resume Next
.SpecialCells(xlcelltypeblanks).Delete Shift:=xlup
on Error Goto 0
End With
Damit stellst du die Methode nach, mit der du das ganze ohne VBA von Hand lösen würdest, was für dich den Vorteil hätte, dass du die benötigten Befehle mit dem Recorder aufzeichnen kannst und nicht auf VBA-Spezialwissen zurückgreifen musst.
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA Liste erstellen: Schritt-für-Schritt-Anleitung


Schritt-für-Schritt-Anleitung

Um eine VBA Liste in Excel zu erstellen und dabei doppelte Einträge sowie bestimmte Texte wie "*tisch" zu ignorieren, folge diesen Schritten:

  1. Öffne Excel und erstelle ein neues Makro.

  2. Füge den folgenden Code in den VBA-Editor ein:

    Sub Makro1()
       Dim test
       Dim Dic As Object
       Dim A As Long
       Set Dic = CreateObject("Scripting.Dictionary")
       Worksheets("Tabelle1").Range("B117:B150").ClearContents
       'Tabellenname anpassen
       With Sheets("Tabelle2")
           'Komplette Spalte DN
           test = .Range("DN2", IIf(IsEmpty(.Cells(.Rows.Count, 118)), .Cells(.Rows.Count, 118).End(xlUp), .Cells(.Rows.Count, 118)))
           'Liste erstellen ohne doppelte
           For A = 1 To UBound(test)
               If test(A, 1) <> "" Then
                   If Not test(A, 1) Like "*tisch" Then
                       Dic(test(A, 1)) = 0
                   End If
               End If
           Next A
           'Daten einfügen
           ActiveWorkbook.Sheets("Tabelle1").Range("B117").Resize(Dic.Count) = Application.Transpose(Dic.keys)
       End With
    End Sub
  3. Starte das Makro, um die Excel VBA Liste zu generieren.


Häufige Fehler und Lösungen

  • Fehler: "Makro kann nicht ausgeführt werden"

    • Überprüfe, ob die Makros in den Excel-Optionen aktiviert sind.
  • Fehler: Doppelte Einträge werden nicht entfernt

    • Stelle sicher, dass die Zeile Dic(test(A, 1)) = 0 korrekt ausgeführt wird und dass die If-Bedingung die Zellen korrekt überprüft.
  • Fehler: Falsche Zellen werden kopiert

    • Überprüfe den Bereich, der in test = .Range("DN2", ...) festgelegt ist, um sicherzustellen, dass alle relevanten Daten erfasst werden.

Alternative Methoden

Falls du keine VBA-Lösungen verwenden möchtest, kannst du die Excel-Funktionen nutzen:

  1. Daten kopieren: Kopiere die Daten in "Tabelle2".
  2. Daten einfügen: Füge die Daten in "Tabelle1" ein.
  3. Duplikate entfernen: Gehe zu "Daten" > "Duplikate entfernen".
  4. Text ersetzen: Verwende "Suchen und Ersetzen" (Strg + H), um "*tisch" zu entfernen.

Diese manuelle Methode ist einfach, wenn du mit dem Excel VBA nicht vertraut bist.


Praktische Beispiele

Ein Beispiel für eine VBA Liste könnte folgendermassen aussehen:

Sub BeispielMakro()
    Dim dataRange As Range
    Dim uniqueList As Collection
    Set uniqueList = New Collection

    Set dataRange = Sheets("Tabelle2").Range("DN2:DN100")

    On Error Resume Next
    For Each cell In dataRange
        If cell.Value <> "" And Not cell.Value Like "*tisch" Then
            uniqueList.Add cell.Value, CStr(cell.Value) ' CStr verwandelt in String
        End If
    Next cell
    On Error GoTo 0

    ' Einfügen in Tabelle1
    For i = 1 To uniqueList.Count
        Sheets("Tabelle1").Cells(i + 116, 2).Value = uniqueList(i)
    Next i
End Sub

Tipps für Profis

  • Verwende Option Explicit, um sicherzustellen, dass alle Variablen deklariert werden, was Fehler verhindert.
  • Testen mit kleineren Datenmengen hilft, Fehler schneller zu identifizieren.
  • Nutze das Debugging im VBA-Editor, um den Code Schritt für Schritt zu überprüfen.
  • Speichere regelmäßig, um Datenverlust zu vermeiden, besonders bei umfangreichen VBA-Projekten.

FAQ: Häufige Fragen

1. Wie kann ich noch mehr Filterkriterien hinzufügen?
Du kannst weitere If-Bedingungen hinzufügen, um andere unerwünschte Texte zu ignorieren.

2. Funktioniert das auch in älteren Excel-Versionen?
Ja, das Beispiel funktioniert in Excel 2007 und späteren Versionen, solange VBA unterstützt wird.

3. Wie kann ich die Liste automatisch aktualisieren?
Du kannst das Makro so anpassen, dass es beim Öffnen der Datei oder bei Änderungen in den entsprechenden Zellen automatisch ausgeführt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige