Microsoft Excel

Herbers Excel/VBA-Archiv

Doppelte auflisten spezial

Betrifft: Doppelte auflisten spezial von: Gerd
Geschrieben am: 16.09.2004 21:08:15

Hallo Excellenzen,

ich muss von Blatt 1, Spalte A doppelt vorkommende Namen in Blatt 2, Spalte A
auflisten. In Spalte B vom Blatt 2 soll die Anzahl der jeweiligen Namen von
Blatt 1 ausgewiesen werden aber nur einmal.
Es geht um ca. 5000 Namen in Blatt 1.
Geht sowas mit Formeln und wenn ja, wie müssten diese aussehen?
Es ist auch eine VBA- Lösung willkommen.

Gruß Gerd

  


Betrifft: AW: Doppelte auflisten spezial von: K.Rola
Geschrieben am: 16.09.2004 21:53:35

Hallo,

ich hoffe, ich habe dich richtig verstanden. Der Code muss in ein Standardmodul:

Option Explicit
Sub Doppelte_spezial()
Dim ws1 As Worksheet, ws2 As Worksheet, z1 As Long, z2 As Long
Set ws1 = Sheets("Tabelle1")
Set ws2 = Sheets("Tabelle2")
For z1 = 1 To ws1.[A65536].End(-4162).Row
  If Application.CountIf(ws1.[A:A], ws1.Cells(z1, 1)) > 1 Then
    If Application.CountIf(ws2.[A:A], ws1.Cells(z1, 1)) = 0 Then
      z2 = ws2.[A65536].End(-4162).Row + 1
      ws2.Cells(z2, 1) = ws1.Cells(z1, 1)
      ws2.Cells(z2, 2) = Application.CountIf(ws1.[A:A], ws1.Cells(z1, 1))
    End If
  End If
Next
With ws2
 .[a1] = "Unikat"
 .[b1] = "Anzahl"
 .Rows(1).Font.Bold = True
 .[a:b].Columns.AutoFit
End With
End Sub


Gruß K.Rola


  


Betrifft: Danke, perfekt!!! OT von: Gerd
Geschrieben am: 17.09.2004 00:24:22

oT


  


Betrifft: Zwischen Frage von: Basti
Geschrieben am: 17.09.2004 09:36:20

Hi K.Rola

For z1 = 1 To ws1.[A65536].End(-4162).Row
....
next


kannste mir das mal erklären, bin ja immer Wissensbegierig und mich interessieren solche Lösungen die ich nicht kenne.

Was du machst, mach ich immer mit Cells(x,y) und Do while Schleifen, aber so is es natürlich besser, da die do while zimlich doll auf den Speicher Schlagen.

Gruß Basti


  


Betrifft: AW: Zwischen Frage von: Reinhard
Geschrieben am: 17.09.2004 10:39:28

Hi Basti,
ws1.[A65536].End(-4162).Row entspricht dem leichter lesbaren
ws1.[A65536].End(xlup).Row
Im Tabellenblatt wird auf die unterste Zelle in A (A65536) gegangen, dann durch das End(xlup) auf die von oben gesehen letzte beschriebene Zelle in A. Deren Zeilennummer wird dann zurückgegeben.
Problematik1:
wenn Zelle A65536 nicht leer ist wird ein falsches Ergebnis geliefert.
Problematik2:
egal ob Zelle A1 leer oder beschrieben ist, es wird immer eine 1 zurückgeliefert, wenn die Spalte leer ist oder nur A1 beschrieben. Dies führt dann bei zB.
ErsteFreieZelle=ws1.[A65536].End(xlup).Row + 1
zu einem Fehler wenn A1 leer ist.
Gruß
Reinhard


  


Betrifft: AW: Zwischen Frage von: K.Rola
Geschrieben am: 17.09.2004 12:50:01

Hallo,

.[A65536].End(-4162).Row entspricht .[A65536].End(xlUp).Row

Bei diesem kurzen Code spielt es keine Rolle, bei langen Codes sind die Long-Werte
deutlich schneller als die benannten Argumente/Konstanten.

Gruß K.Rola


  


Betrifft: AW: Zwischen Frage von: Basti
Geschrieben am: 17.09.2004 12:54:57

.[A65536].End(xlUp).Row

kenn ich allerdings auch nich, also was ich jetzt verstanden hab:
Der zählt von der letzte Zeile aus Spalte A, bis er eine beschriebene Zeile findet ja?

Is das nuetzlicher als mit einer
Do While Schleifen von oben nach unten zu gehen?

Gruß Basti


  


Betrifft: AW: Zwischen Frage von: K.Rola
Geschrieben am: 17.09.2004 21:22:08

Hallo,

nützlich kann beides sein, nur die Schleife ist um Längen langsamer.
Wann immer es geht, eingebaute Eigenschaften/Methoden verwenden, Schleifen
nur dann, wenns nicht anders möglich ist.

Gruß K.Rola


 

Beiträge aus den Excel-Beispielen zum Thema "Doppelte auflisten spezial"