Microsoft Excel

Herbers Excel/VBA-Archiv

Varianten/Kombinationen/sinnvollste


Betrifft: Varianten/Kombinationen/sinnvollste von: Christoph Zahn
Geschrieben am: 13.01.2018 06:49:10

Hallo,

ich habe im Anhang eine Tabelle mit Namen und Werten. Einmal gibt es Werte die zu bestimmten Namen gehören und einmal gibt es Werte die gesucht werden. GIbt es ein Lösung als Makro die dann so aussieht das die sinnvollste Lösung(wenigsten Namen) aufgelistet wird wie in der Tabelle?
Bedingung ist, das alle Werte in der Lösung vorkommen müssen mit Ausgabe von Namen. Außerdem darf der Wert in der Tabelle nur noch einmal vorkommen. Das heißt gehört ein Wert zu 2 Namen wird dieser beim 2. Namen gelöscht.

Hoffe man versteht wie ich das meine. Sollte eigentlich aus der Tabelle ersichtlich sein.

https://www.herber.de/bbs/user/118914.xlsx

Gruss zahni

  

Betrifft: AW: Varianten/Kombinationen/sinnvollste von: Peter(silie)
Geschrieben am: 13.01.2018 12:06:58

Hallo,

unten ein wenig Code.

Du übergibst einach zwei String Arrays an die Prozedur.
Nach durchlauf, sind alle treffer in den Arrays gespeichert.

Die kannst du dann in die Tabelle schreiben.
Im Beispiel Code werden die Werte im Direktbereich angezeigt, vom VBA Editor in Excel.

Option Explicit

Sub Test()
    Dim Werte() As String, Namen() As String
    Dim i As Long
    
    Search_Value "1,5", Werte, Namen
    
    For i = LBound(Werte) To UBound(Werte)
        Debug.Print Namen(i) & " has following values: " & Werte(i)
    Next i
    
    Erase Werte
    Erase Namen
    
End Sub

Public Sub Search_Value(ByVal what_ As String, ByRef values_() As String, names_() As String)
    Dim lRow As Long, i As Long, counter As Long
    Dim ws As Worksheet
    Dim rng As Range
    
    
    Set ws = ThisWorkbook.Sheets("Vorgaben")
    With ws
        
        lRow = .Cells(.Rows.Count, 2).End(xlUp).Row
        Set rng = .Range(.Cells(2, 2), .Cells(lRow, 3))
        
        For i = 1 To rng.Rows.Count
            
            If InStr(1, CStr(rng(i, 2)), what_, vbTextCompare) >= 1 Then
            
                ReDim Preserve values_(counter)
                ReDim Preserve names_(counter)
                
                values_(counter) = rng(i, 2)
                names_(counter) = rng(i, 1)
                
                counter = counter + 1
                
            End If
            
        Next i
    
    End With
    
    Set rng = Nothing
    Set ws = Nothing
    
End Sub



  

Betrifft: AW: Varianten/Kombinationen/sinnvollste von: Christoph Zahn
Geschrieben am: 13.01.2018 13:14:08

Hallo,

danke schon mal für deine Hilfe.
Das funktioniert aber noch nicht so ganz wie es soll.
Habe jetzt zum Beispiel noch bei Vorgaben
Name Bernd
Wert 3 hinzugefügt
Gesucht 1,5,3.

Soll die Lösung sein:
Tom 1,5
Bernd 3

hast du dafür vielleicht auch noch einen Vorschlag?

Gruss Christoph


  

Betrifft: AW: Varianten/Kombinationen/sinnvollste von: onur
Geschrieben am: 13.01.2018 14:25:06

Und was passiert, wenn auch bei Fritz 1,5,11 steht - wird Tom oder Fritz genommen?


  

Betrifft: AW: Varianten/Kombinationen/sinnvollste von: Christoph Zahn
Geschrieben am: 13.01.2018 14:57:35

Hallo,
das ist egal.
Die Bedingung ist nur, das alle Werte enthalten sind und das so wenig wie möglich Namen verwendet werden.

Gruss Zahni