Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Excel VBA Mögliche Kombinationen
#1
Hallo zusammen,

in einer Liste habe ich eine unterschiedliche Anzahl von Namen...als Beispiel sagen wir mal 10 Namen die in der Spalte "A" aufgelistet sind.
Ich möchte nun aus diesen Namen alle Namenskombinationen herausfinden und dazu habe ich einen super VBA-Code von ransi gefunden der das perfekt macht.

Code:
Option Explicit

Public Sub test()
Dim myDic
Dim Arr
Dim L As Long
Dim S As Long
Dim K
Dim SPL
Set myDic = CreateObject("Scripting.Dictionary")
Arr = Range("A1:A10")
For L = 1 To UBound(Arr) - 1
   For S = L + 1 To UBound(Arr)
       myDic(Arr(L, 1) & " " & Arr(S, 1)) = 0
   Next
Next
Range("B1").Resize(myDic.Count) = WorksheetFunction.Transpose(myDic.keys)
K = myDic.keys
myDic.removeall
For L = LBound(K) To UBound(K)
   For S = LBound(K) To UBound(K)
       SPL = Split(K(L), " ")
       If Not K(S) Like "*" & SPL(0) & "*" Then
           If Not K(S) Like "*" & SPL(1) & "*" Then
               If Not myDic.exists(K(S) & "--" & K(L)) Then
                   If Not myDic.exists(K(L) & "--" & K(S)) Then
                       myDic(K(L) & "--" & K(S)) = 0
                   End If
               End If
           End If
       End If
   Next
Next
Range("C1").Resize(myDic.Count) = WorksheetFunction.Transpose(myDic.keys)
End Sub

Was ich nun gerne noch als Highlight hätte ist die Möglichkeit aus einer gefilterten Liste... es bleiben nur noch z.B. 6 Namen übrig... der Rest wird mittels Autofilter ausgeblendet...alle möglichen Kombinationen aufgelistet zu bekommen.

Leider gelingt es mir nicht zu einem richtigen Ergebnis zu kommen.
Dies hier bringt mich auch nicht weiter. Autofilter ist anscheinend ein größeres Problem.

Code:
arr = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible)

Ach ja, in Spalte "B" wird jeweils noch eine Platzziffer dem jeweiligen Namen zugeordnet. In Spalte "D" soll dann die Addition der Platzziffern aus der jeweiligen Kombination eingetragen werden.


Tabelle
AB
1NamePlatzziffer
2Name11
3Name22
4Name33
5Name44
6Name55
7Name66
8Name77
9Name88
10Name99
11Name1010
Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 21.08 einschl. 64 Bit



Vielleicht habt Ihr noch einen Lösungsweg der zum Ziel führt?

Dafür vielen Dank schonmal! Das wäre super!
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#2
Hallo Erich,

könntest Du deine Datei hier hochladen?
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#3
Hallo Stefan,

siehe beigefügte Datei.


Angehängte Dateien
.xlsm   Kombinationen.xlsm (Größe: 17,5 KB / Downloads: 4)
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#4
Hallo Erich,

warum hier
Code:
For L = 1 To UBound(arr) - 1
    For S = L + 1 To UBound(arr)
        myDic(arr(L, 1) & " " & arr(S, 1)) = 0
    Next
Next

2 Schleifen?
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#5
Hallo Stefan,

das ist ne gute Frage. Wie ich schon geschrieben hatte ist dieses für mich trickreiche Makro von ransi geschrieben.
Wäre froh wenn ich so manche Codezeile auch verstehen würde.

Ich kann Dir deshalb keine Antwort auf Deine Frage geben.
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#6
Hallo Erich,

versuchs mal so

Code:
Public Sub test()
Dim myDic
Dim arr
Dim L As Long
Dim S As Long
Dim lngC As Long, lngA As Long
Dim K
Dim SPL
Dim Bereich As Range

Set myDic = CreateObject("Scripting.Dictionary")

lngC = Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Cells.Count
ReDim arr(1 To lngC, 1 To 1)
lngA = 1
For Each Bereich In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Cells
    arr(lngA, 1) = Bereich
    lngA = lngA + 1
Next Bereich
For L = 1 To UBound(arr) - 1
    For S = L + 1 To UBound(arr)
        myDic(arr(L, 1) & " " & arr(S, 1)) = 0
    Next
Next
Range("C2").Resize(myDic.Count) = WorksheetFunction.Transpose(myDic.keys)
K = myDic.keys
myDic.RemoveAll
For L = LBound(K) To UBound(K)
    For S = LBound(K) To UBound(K)
        SPL = Split(K(L), " ")
        If Not K(S) Like "*" & SPL(0) & "*" Then
            If Not K(S) Like "*" & SPL(1) & "*" Then
                If Not myDic.exists(K(S) & "--" & K(L)) Then
                    If Not myDic.exists(K(L) & "--" & K(S)) Then
                        myDic(K(L) & "--" & K(S)) = 0
                    End If
                End If
            End If
        End If
    Next
Next
'Range("E1").Resize(myDic.Count) = WorksheetFunction.Transpose(myDic.keys)
End Sub
Gruß Stefan
Win 10 / Office 2016
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste