Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1504to1508
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

Wie oft ? vba

Wie oft ? vba
12.07.2016 19:28:29
Hans
Guten Abend.
Ich bin auf der Suche nach einen vba Code.
Tabelle 1 sind in der Spalte C Artikelnummer vorhanden diese können mehr mal vorkommen.
Ich möchte die gerne per VBA in der Tabelle 2 ab der A3 untereinander aufgelistet haben ohne die doppelten.
Kann mir jemand helfen.
Danke
Hans

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Warum VBA? Und nicht das Spezialfilter? o.T.
12.07.2016 20:04:34
JoWE

AW: Warum VBA? Und nicht das Spezialfilter? o.T.
12.07.2016 20:12:00
Hajo_Zi
wie kopiert man da Doppelte?

AW: Warum VBA? Und nicht das Spezialfilter? o.T.
12.07.2016 20:14:06
JoWE
?.er will doch ohne doppelte...

AW: Warum VBA? Und nicht das Spezialfilter? o.T.
12.07.2016 20:24:03
Hajo_Zi
er hat Tabelle 1 und
"Ich möchte die gerne per VBA in der Tabelle 2 ab der A3 untereinander aufgelistet haben ohne die doppelten."
Ich hätte vermutet das sind 2 Tabellen?
Bei Deinem Vorschlag müsste alles in Tabelle2 kopiert werden und dann Spezialfilter.
Gruß Hajo

AW: Wie oft ? vba
12.07.2016 20:28:50
Matthias
Hallo! Also falls sich noch eine Variante mit Formeln (ohne Hilfsspalte) oder Filter finden lässt, wäre diese mE zu bevorzugen. Ansonsten wäre das glaube ich eine Variante in VBA. Schönen Abend noch

Option Explicit
Sub vorkommen()
Dim ende As Long
Dim zeile As Long
Dim eintrag As Long
Dim werte()
ReDim werte(0)
Worksheets(2).Columns(1).ClearContents
ende = Worksheets(1).Cells(Rows.Count, 3).End(xlUp).Row
eintrag = 3
For zeile = 1 To ende
If UBound(Filter(werte, "xyz" & Worksheets(1).Cells(zeile, 3) _
& "zyx", , vbTextCompare)) = -1 And Worksheets(1).Cells(zeile, 3)  "" Then
Worksheets(2).Cells(eintrag, 1) = Worksheets(1).Cells(zeile, 3)
eintrag = eintrag + 1
ReDim Preserve werte(UBound(werte) + 1)
werte(UBound(werte)) = "xyz" & Worksheets(1).Cells(zeile, 3) & "zyx"
End If
Next zeile
End Sub

Anzeige
AW: Wie oft ? vba
12.07.2016 20:37:55
ransi
Hallo,
Da gibt eineig Möglichkeiten.
Pivotabelle geht, Spezialfilter ohne Duplikate geht, Formellösung geht...
Die brauchen aber bei vielen Unikaten möchtig viel Zeit.
Richtig schnell ist sowas:
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Sub machs()
    Dim L As Long
    Dim myDic As Object
    Dim Arr As Variant
    Dim Element As Variant
    Set myDic = CreateObject("Scripting.Dictionary")
    With Sheets("Tabelle1")
        Arr = .Range("A1:A100000").Value 'Anpassen
        'unikate sammeln
        For L = LBound(Arr) To UBound(Arr)
            myDic(Arr(L, 1)) = 0
        Next
        'Ausgabearray dimnsionieren
        Redim out(1 To myDic.Count, 1 To 1)
        L = 1
        'Umschaufeln
        For Each Element In myDic.keys
            out(L, 1) = Element
            L = L + 1
        Next
        'ausgeben
        .Range("B1").Resize(myDic.Count, 1) = out 'Anpassen
    End With
End Sub


ransi

Anzeige
AW: Wie oft ? vba
12.07.2016 23:06:57
Christian
Hallo Ransi,
könntest du vielleicht ein paar erläuternde Worte zu der folgend Passage aus dem Code
sagen:
   'unikate sammeln
For L = LBound(Arr) To UBound(Arr)
myDic(Arr(L, 1)) = 0
Next

Was hier passiert ist mir vom Resultat ungefähr klar, die Umsetzung kann ich leider nicht nachvollziehen Es wird ja komplett auf die Add und Exists Methode verzichtet und trotzdem erreicht, dass nur Unikate in das dictionary-Object aufgenommen werden.
Danke und Gruß
Christian

AW: Wie oft ? vba
13.07.2016 19:07:05
ransi
Hallo Christian,
myDic(Arr(L, 1)) = 0
Nehmen wir mal an Arr(L,1) ist noch nicht im Dictionary.
Dann ist der Key =Arr(L,1) und das Item=0
Kommt Arr(L,1) nochmal vor dann ist der Key immer noch Arr(L,1), aber zugehörige das Item wird einfach mit 0 überschrieben.
Sowas ist sauschnell und ausbaufähig.
Schau mal hier:
http://www.office-loesung.de/ftopic217191_0_0_asc.php
ransi

Anzeige
AW: Wie oft ? vba
14.07.2016 06:56:50
JoWE
Hallo,
habe Deinen Code soeben mal mit einer meiner Datentabellen getestet.
Bin total von den Socken, "sauschnell" ist bei 50000 Zeilen extrem untertrieben!!
Danke für dafür!
Gruß mit "Hut ab"
Jochen

AW: Wie oft ? vba
12.07.2016 20:50:30
Werner
Hallo Hans,
ein bisschen wenig Infos, aber versuche mal folgendes. Code in ein allgemeines Modul, eine Schaltfläche auf den Blatt und der Schaltfläche das Makro zuweisen.
Option Explicit
Public Sub Hans()
Dim loLetzte As Long
Dim loLetzte1 As Long
loLetzte = Sheets("Tabelle1").Cells(Rows.Count, 3).End(xlUp).Row
loLetzte1 = Sheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row
With Sheets("Tabelle1")
Sheets("Tabelle2").Range(Sheets("Tabelle2").Cells(3, 1), Sheets("Tabelle2").Cells(loLetzte1, 1)) _
.ClearContents
.Range(.Cells(2, 3), .Cells(loLetzte, 3)).Copy Sheets("Tabelle2").Range("A3")
End With
With Sheets("Tabelle2").Range("A:A")
.RemoveDuplicates Columns:=1, Header:=xlYes
End With
End Sub
Ich bin mal davon ausgegangen, dass die Daten im Blatt1 ab Zelle A2 beginnen (A1 Überschrift). Bei Ausführen des Makros werden die Daten in Blatt 2 A3-A? gelöscht, dann aus Blatt 1 in Blatt 2 kopiert und dann die Doppler entfernt.
Gruß Werner

Anzeige
AW: Wie oft ? vba
12.07.2016 21:28:55
snb

Sub M_snb()
tabelle1.columns(3).advancedfilter 2,,Tabelle2.cells(3,1),true
End Sub

AW: Wie oft ? vba
13.07.2016 07:11:14
Hans
Guten morgen.
sorry das ich jetzt erst schreibe.
Meine Tabelle haben wir abgeändert.
tabelle1 sind Artikelnummern Ab G4 aufgelistet.
Jetzt möchte ich in der Tabelle 2 ab A3 untereinander aufgelistet so das keine doppelte vorhanden sind.
Die Werte in der Tabelle 1 dürfen nicht gelöscht werden.
Ich benötige dafür Vba weil ich es über Schaltfläche und weiteren Code benötige.
Besten danke
Hans

AW: Wie oft ? vba
13.07.2016 07:39:16
Werner
Hallo Hans,
dann so:
Option Explicit
Public Sub Hans()
Dim loLetzte As Long
Dim loLetzte1 As Long
loLetzte = Sheets("Tabelle1").Cells(Rows.Count, 7).End(xlUp).Row
loLetzte1 = Sheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row
With Sheets("Tabelle1")
Sheets("Tabelle2").Range(Sheets("Tabelle2").Cells(3, 1), Sheets("Tabelle2").Cells(loLetzte1, 1)) _
.ClearContents
.Range(.Cells(4, 7), .Cells(loLetzte, 7)).Copy Sheets("Tabelle2").Range("A3")
End With
With Sheets("Tabelle2").Range("A:A")
.RemoveDuplicates Columns:=1, Header:=xlYes
End With
End Sub
Auch hier ist es so, dass jeweils erst die Daten in Spalte ab A3 vom Blatt 2 gelöscht werden, dann werden die Daten von Blatt 1, ab G4 nach Blatt 2 A3 kopiert und dann die Doppler entfernt.
Wenn die Daten im Blatt 2 erhalten bleiben sollen und jeweils unten angefügt werden sollen, dann musst du dich nochmal melden. Die Infos sind schon ein wenig dürftig.
Gruß Werner

Anzeige
Nachfrage an Werner
13.07.2016 15:35:24
Hans
Hallo Werner,
dein Code funktion super aber nicht wenn in der Tabelle 1 G4:G eine Formel hinterlegt ist. Da die Artikel über eine Formel her kommen.
Kann man den Code ändern?
Danke Hans

Nachfrage an Werner
13.07.2016 16:04:16
Hans
Hallo Werner,
dein Code funktion super aber nicht wenn in der Tabelle 1 G4:G eine Formel hinterlegt ist. Da die Artikel über eine Formel her kommen.
Kann man den Code ändern?
Danke Hans

Nachfrage an Werner
13.07.2016 17:33:35
Hans
Hallo Werner,
dein Code funktion super aber nicht wenn in der Tabelle 1 G4:G eine Formel hinterlegt ist. Da die Artikel über eine Formel her kommen.
Kann man den Code ändern?
Danke Hans

Anzeige
AW: Nachfrage an Werner
13.07.2016 18:50:25
Werner
Hallo Hans,
warum eigentlich immer nur häppchenweise?
Die Zeile aus dem Code raus
.Range(.Cells(4, 7), .Cells(loLetzte, 7)).Copy Sheets("Tabelle2").Range("A3")
Und die hier an gleicher Stelle rein. Aber so lassen, das sind drei Zeilen und müssen auch drei Zeilen bleiben.
.Range(.Cells(4, 7), .Cells(loLetzte, 7)).Copy
Sheets("Tabelle2").Range("A3").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Gruß Werner
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige