Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1232to1236
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
nur Doppelte aus einem Array anzeigen...
KLE
Morgen,
...ich habe 3 Spalten (Spalte 1 = PLZ, Spalte2 = Ort, Spalte3 = Land in ein Array wie folgt gepackt:
2 Spalten im Array = 1.Spalte: PLZ & 2.Spalte: Ort & Land [zusammengesetzt]
Jetzt brauche ich aber für eine andere Auswertung nur die "doppelten" Einträge der Spalte2!
WIE kann ich die "Doppelten" Einträge der Spalte2 in ein anderes packen, wo "NUR" die DOPPELTEN Einträge vorkommen?
Finde da keinen funktionierenden Ansatz ?!?
Gruß und Danke
Kay
AW: nur Doppelte aus einem Array anzeigen...
19.10.2011 09:22:07
Rudi
Hallo,
etwa so:

Sub yyy(arr)
Dim i As Long, j As Long, oDbl As Object, arrDbl
Set oDbl = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(arr) - 1
For j = i + 1 To UBound(arr)
If arr(i, 2) = arr(j, 2) Then oDbl(arr(i, 2)) = 0
Next
Next
arrDbl = oDbl.keys
End Sub

Gruß
Rudi
AW: verstehe da was nicht ...
19.10.2011 10:12:21
KLE
Hi Rudi,
danke für Deine Antwort, habe versucht es bei mir zu platzieren. Leider ohne Erfolg, es werden keine Doppelten angezeigt.
Hier meine Code: - Worin liegt der Fehler?
' Prozedur zum Laden der 3 Listboxen im Frame doppelte

Private Sub DPLaden()
ReDim arrDP(wksDB.Cells(Rows.Count, 1).End(xlUp).Row, 2)
' Array erstellen
With wksDB
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
arrDP(i - 2, 0) = .Cells(i, 2).Value ' PLZ
arrDP(i - 2, 1) = .Cells(i, 8).Value & ", " & .Cells(i, 7).Value ' Ort + Land
Next i
End With
' mein Versuch - Deines Codes... (objDic ist als Dim objDic unter Option Explicit deklariert)
a = 0
Set objDic = CreateObject("Scripting.Dictionary")
For a = 1 To UBound(arrDP) - 1
For j = i + 1 To UBound(arrDP)
If arrDP(a, 1) = arrDP(j, 1) Then objDic(arrDP(a, 1)) = 0
Next
Next
objLBDPame.List = objDic.keys ' Listbox mit Doppelten Einträgen füllen
Set objDic = Nothing
' WICHTIG: Es müssen alle Doppelten angezeigt werden, d.h. z.Bsp: Berlin - Deutschland mit den  _
_
' PLZs 13156, 13158 etc. müssen aufgeführt werden...wenn Berlin-Deutschland eben mehrfach _
' vorkommt  (aufgrund der verschiedenen PLZs in Berlin)...
'''' ### >>> Frage: das macht objDic ... = 0 nicht, oder ? Oder wofür steht hier die = 0 ?!?
End Sub

Frage:
Ich hätte gern in der Liste auch wieder 2 Spalten der doppelten, d.h. die PLZ & Ort+Land...
Wie kann ich das machen ?
Gruß und Danke!
Kay
Anzeige
AW: verstehe da was nicht ...
19.10.2011 10:32:41
Rudi
Hallo,
2 Spalten der doppelten, d.h. die PLZ & Ort+Land...
Ein Ort kann doch mehrere PLZ haben. Wie also die doppelten? Vllt. PLZ+Ort+Land?
Bau mal eine Beispielmappe.
Gruß
Rudi
AW Musterdatei hochgeladen...
19.10.2011 11:02:32
KLE
...weitere Erläuterungen sind in der Userform.
https://www.herber.de/bbs/user/77091.xlsm
Vielen Dank für Deine / Eure Hilfe ;o) ...
Muss es heut bis 16Uhr fertig stellen...
Hoffe ihr könnt mir helfen ?!?
Gruß, Euer zu Dank verpflichteter Kay
AW: AW Musterdatei hochgeladen...
19.10.2011 12:26:11
Rudi
Hallo,

Private Sub DPLaden()
Dim arrKeys, arrItems
' Liste neu einlesen, falls es Änderungen gab...
ReDim arrDP(wksDB.Cells(Rows.Count, 1).End(xlUp).Row - 2, 1)
' Array erstellen
With wksDB
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
arrDP(i - 2, 0) = .Cells(i, 2).Value ' PLZ
arrDP(i - 2, 1) = .Cells(i, 8).Value & ", " & .Cells(i, 7).Value ' Ort + Land
Next i
End With
' >>>>>>>>>>>>>>>>>>>>>>>>>>Kein PROBLEM  0 Then
arrKeys = objDic.keys
arrItems = objDic.items
ReDim arrDP(UBound(arrKeys), 1)
'Array für doppelte
For a = 0 To UBound(arrKeys)
arrDP(a, 0) = arrKeys(a)    'PLZ
arrDP(a, 1) = arrItems(a)   'Ort, Land
Next
ListBox1.List = arrDP ' Listbox mit Doppelten Einträgen füllen
End If
Set objDic = Nothing
End Sub
Und schau mal auf die Dimensionierung von arrDP.
Gruß
Rudi
Anzeige
AW: Danke, wie kann ich ggf. noch weitere Spalten
19.10.2011 14:30:19
KLE
mit reinnehmen.
D.h. Der Vergleich bleibt weiterhin auf Ort-Land, aber wie kann ich z.B. neben der PLZ noch eine weitere Spalte mit nehmen...?!?
Ansonten klappt es soweit, weiß nur nicht mit dem
For a = 0 To UBound(arrKeys)
arrDP(a, 0) = arrKeys(a) 'PLZ
arrDP(a, 1) = arrItems(a) 'Ort, Land
Next
weiter, bezüglich einer weiteren Spalte ?!?
Danke udn Gruß
AW: Danke, wie kann ich ggf. noch weitere Spalten
19.10.2011 14:51:47
Rudi
Hallo,
kommt darauf an, was du willst.
Die Kombination PLZ-Ort-Land ist ja eindeutig. Wenn du jetzt aber z.B. den Kunden mit reinnehmen willst, kann es ja auch mehrere Kunden in einem Ort geben. Dann musst du den dem Schlüssel von ObjDict anhängen, da der eindeutig sein muss.
mal als Beispiel:

Private Sub DPLaden()
Dim arrKeys, arrItems
' Liste neu einlesen, falls es Änderungen gab...
ReDim arrDP(wksDB.Cells(Rows.Count, 1).End(xlUp).Row - 2, 2)
' Array erstellen
With wksDB
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
arrDP(i - 2, 0) = .Cells(i, 2).Value ' PLZ
arrDP(i - 2, 1) = .Cells(i, 8).Value & ", " & .Cells(i, 7).Value ' Ort + Land
arrDP(i - 2, 2) = .Cells(i, 4).Value ' Kunde
Next i
End With
' >>>>>>>>>>>>>>>>>>>>>>>>>>Kein PROBLEM  0 Then
arrItems = objDic.items
ListBox1.ColumnCount = 3
ListBox1.List = _
WorksheetFunction.Transpose(WorksheetFunction.Transpose(arrItems)) ' Listbox mit  _
Doppelten Einträgen füllen
End If
Set objDic = Nothing
End Sub

Gruß
Rudi
Anzeige
AW: Danke...jetzt versuche ich es nur noch...
19.10.2011 16:07:35
KLE
...zu verstehen ;o)
Gruß und Danke !!!
Kay

93 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige