Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA - Kombinationen ermitteln

VBA - Kombinationen ermitteln
15.09.2024 13:38:08
Katja567
Liebe VBA-Profis,

ich benötige Eure Hilfe:

Ich möchte die Werte aus Tabellenblatt A in den Zeilen 10 und 13 vergleichen (beim Vergleich geht es von links nach rechts und dann nach unten...also wird wie folgt verglichen: D10 mit I10, D10 mit N10, D10 mit S10, D10 mit D13, D10 mit I13, D10 mit N13, D10 mit S13, I10 mit N10 usw.) und Kombinationen ermitteln. Die möglichen Kombinationen stehen in einer Tabelle im Tabellenblatt B. Eine Kombination kann dabei nur einmal erfolgen. Also z. B. kann die Kombination 10-W und 5+E nur durch die Einträge in N10 und S10 und nicht mehr durch N10 und S13 entstehen.

Hier das Bildbeispiel für die Ursprungswerte:
Userbild

Und hier stehen die möglichen Kombinationen zu den jeweiligen Werten:
Userbild

Ich hoffe, Ihr könnt mir mit diesen Angaben helfen.

Viele Grüße
Katja
Anzeige

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Kombinationen ermitteln
15.09.2024 13:45:30
Onur
Und wo ist die Datei? Sollen WIR denn deine Datei anhand der Bilder nachbauen ?
AW: VBA - Kombinationen ermitteln
15.09.2024 14:51:39
Katja567
Die Originaldatei kann ich nicht hochladen, zu viele personenbezogenen Daten drin. Hier ein Nachbau der Datei.

https://www.herber.de/bbs/user/172203.xlsx
AW: VBA - Kombinationen ermitteln
15.09.2024 15:00:17
Onur
Warum hältst du noch Informationen zurück?
z.B.: wo kommen plötzlich die 1er oder 7er her? Davon steht nirgendwo etwas in TabelleA.
Das sind NICHT "die möglichen Kombinationen zu den jeweiligen Werten" .
Ausserdem: WAS wird denn hier überhaupt VERGLICHEN (und wozu) ?
Anzeige
AW: VBA - Kombinationen ermitteln
15.09.2024 15:15:00
Katja567
Tabellenblatt B enthält Kombinationen, die möglich sind. Tabellenblatt A enthält Werte die ermittelt wurden und dann soll geprüft werden, ob diese einer Kombination aus Tabellenblatt B entsprechen. Es können also die Kombinationen aus Tabelle B vorkommen, sie müssen nicht vorkommen.
AW: VBA - Kombinationen ermitteln
15.09.2024 15:36:33
Katja567
Beitrag ist noch offen
Anzeige
AW: VBA - Kombinationen ermitteln
15.09.2024 15:40:01
Onur
Erkläre doch bitte für Außenstehende die Hintergründe deines Vorhabens: Wozu genau dient das alles?
Vielleicht kann man dann verstehen, worum es geht und was du möchtest.
AW: VBA - Kombinationen ermitteln
15.09.2024 15:50:24
Katja567
Ich berechne für Menschen die chinesische Astrologie und möchte hierfür prüfen, ob Allianzen zwischen den himmlischen Stämmen (z. B. 10-W, 5+E) bestehen.
Anzeige
AW: VBA - Kombinationen ermitteln
15.09.2024 15:51:53
Onur
"Allianzen zwischen den himmlischen Stämmen" ? Ach sooooo! JETZT blicke ich voll durch. Danke !
AW: VBA - Kombinationen ermitteln
15.09.2024 15:57:26
Katja567
Dachte ich mir, dass Dir das elementar weiterhilft. ;-)
AW: VBA - Kombinationen ermitteln
15.09.2024 16:04:09
Onur
Boooh - jetzt hast du es mir aber gegeben....
Sorry, aber wenn du das, was du willst, nicht mal einem Menschen erklären kannst, wie willst du es Excel bzw VBA erklären ?
Das was du "Erklärung" nennst, ist doch nur der TITEL bzw Verwendungszweck, aber keine Erklärung, was genau womit verglichen wird (oder auch nicht) , oder worum es GENAU geht.
Ich laase es mal offen - vielleicht hat Jemand Lust auf Herumfragerei und Ratespielchen.
Anzeige
AW: VBA - Kombinationen ermitteln
15.09.2024 16:17:52
Katja567
Vielen Dank für Deine Bemühung! So kompliziert finde ich es gar nicht. Über die Makroaufzeichnung bekomme ich das notfalls gelöst. Ist nur enormst aufwändig und ich dachte, dass es bestimmt einfacher geht.
AW: VBA - Kombinationen ermitteln
15.09.2024 16:22:31
Onur
Das mag sein, aber wenn man es nicht richtig erklären kann, kann auch das simpelste Problem nur allgemeine Verwirrung bringen.
Anzeige
AW: VBA - Kombinationen ermitteln
15.09.2024 16:30:05
Katja567
Beitrag ist noch offen
AW: VBA - Kombinationen ermitteln
15.09.2024 20:39:56
Eifeljoi 5
Hallo

Habe mir deine Datei angeschaut (leider) , ich komme zu dem Entschluss dies "eine nicht gewollte und nicht gekonnte Datei" von daher habe sie gleich wieder gelöscht.
Gebe auch Onur Recht.
Bin ja ganz ehrlich hatte mir schon Gedanken gemacht wie man so was ohne VBA mit PQ lösen könnte, aber wo ich diese .......... Datei gesehen habe, habe ich alles ganz schnell in die Mülltonne geworfen.
Aber ich komme nicht von dem Gedanken weg das dies etwas mit einem anderen Beitrag aus dem Nachbar Form zu tun haben könnte, kann mich aber auch täuschen.
Anzeige
AW: VBA - Kombinationen ermitteln
16.09.2024 10:23:23
Yal
Hallo Katja,

idealerweise wäre deine 2 Listen vertikal nebeneinander ohne Lücke angeordnet. Aber gut.

Es gut am einfachste mit VBA.

Public Function Kombiniere(Liste1 As Range, Liste2 As Range, Optional Trenner = ";")

Dim E, F
Dim Erg

Erg = Array() 'dummy-Initialisierung, sodass Ubound(Erg) = -1
For Each E In Liste1
If E.Value > "" Then
For Each F In Liste2
If F.Value > "" Then
ReDim Preserve Erg(UBound(Erg) + 1)
Erg(UBound(Erg)) = E.Value & Trenner & F.Value
End If
Next
End If
Next
Kombiniere = Erg
End Function


Öffne VBA mit Alt+F11,
füge einen Modul ein: Menü "Einfügen", "Modul"
Copy-paste den Code in dem Modul.

Im Excel die Formel verwenden
=Kombiniere(D10:S10;D13:S13)
Brauchst Du das Ergebnis vertikal:
=MTRANS(Kombiniere(D10:S10;D13:S13))

brauchst Du einen anderen Trennzeichen als ";"
=Kombiniere(D10:S10;D13:S13; " -xx- ")

Datei als "Excel-Arbeitsmappe mit Makro (*.xlsm)" speichern.

VG
Yal
Anzeige
AW: VBA - Kombinationen ermitteln
16.09.2024 13:01:18
Katja567
Hi Yal,

ganz herzlichen Dank für Deine Antwort.

Den Code werde ich mir auf jeden Fall mal merken, den kann ich bestimmt an der ein oder anderen Stelle mal gebrauchen. :-)

In diesem Fall hilft er mir leider nicht weiter. Ich habe daher nochmal in der Datei etwas ergänzt, um mein Anliegen besser verständlich zu machen. Über die Funktion Index mit Vergleich (s. Spalte T) kann ich die Kombinationen ermitteln bzw. bekomme ausgegeben, wenn keine Kombination vorhanden ist (#NV). Soweit ist das mit meinen Kenntnissen auch alles machbar. Nun ist das jedoch so, dass einmal verwendet der Wert nicht erneut verwendet werden darf (vergleichbar ein Mensch darf in Deutschland nur mit einem anderen Menschen verheiratet sein und nicht mit einem zweiten ;-)). Und hier komme ich in Excel an die Grenze, da ich die beiden Werte aus der Tabelle entfernen müsste, da sie verwendet wurden (s. grüne Markierung), dann dürfte sich im weiteren Schritt keine weitere Kombination ergeben (Zelle T24 müsste somit #NV sein und nicht 10-W / 5+E enthalten).

Userbild

https://www.herber.de/bbs/user/172208.xlsm

Ich hoffe, das macht es nochmal klarer.
Anzeige
AW: VBA - Kombinationen ermitteln
16.09.2024 13:36:24
Katja567
Mir fällt gerade ein, dass die Daten natürlich nicht mit den Leerzellen so stehen müssen. Sie können auch untereinander stehen und das Ergebnis greife ich mir dann entsprechend ab. Habe die Datei nochmal um eine neue Tabelle ergänzt. Hoffe, das ist dann einfacher.

https://www.herber.de/bbs/user/172211.xlsm
Anzeige
AW: VBA - Kombinationen ermitteln
16.09.2024 13:46:14
Onur
Und
5+E;5+E
geht in Ordnung ???
AW: VBA - Kombinationen ermitteln
16.09.2024 14:14:15
Onur
Du hast inzwischen etliche Versionen gepostet, aber nirgendwo sieht man wirklich, WAS jetzt bei einer besimmten Anfangssituation das richtige ENDERGEBNIS wäre.
AW: VBA - Kombinationen ermitteln
16.09.2024 13:41:41
Yal
Hallo Katja,

nein, klarer ist es nicht. Gehe bitte nicht von deinem Standpunkt, sondern von einem unbeteiligten. Erkläre jede einzelne Schritt (siehe "Rubber Ducking").

Und wenn Du eine Lösung ohne VBA brauchst, dann sage es klar und deutlich. Dein erste Posting wurde mit "Liebe VBA-Profis" eröffnet.

VG
Yal
Anzeige
AW: VBA - Kombinationen ermitteln
16.09.2024 13:59:17
Yal
Wenn ich was verstanden habe, dann das

Public Function Kombiniere2(Liste As Range, Optional Trenner = ";")

Dim i, j
Dim Temp
Dim Erg

Temp = Liste.Value
If Liste.Columns.Count > 1 Then Temp = Application.Transpose(Temp)

Erg = Array() 'dummy-Initialisierung, sodass Ubound(Erg) = -1
For i = 1 To UBound(Temp, 1)
If Temp(i, 1) > "" Then
For j = i + 1 To UBound(Temp)
If Temp(j, 1) > "" Then
ReDim Preserve Erg(UBound(Erg) + 1)
Erg(UBound(Erg)) = Temp(i, 1) & Trenner & Temp(j, 1)
End If
Next
End If
Next
Kombiniere2 = Erg
End Function


Aus eine Liste Jan, Feb, Mrz, Apr wird
Jan / Feb
Jan / Mrz
Jan / Apr
Feb / Mrz
Feb / Apr
Mrz / Apr
zurückgegeben.

VG
Yal
Anzeige
AW: VBA - Kombinationen ermitteln
17.09.2024 14:10:55
Katja567
Hi Yal,

danke für den erneuten Versuch. Funktioniert bei mir nicht.

Ich hätte sehr gerne eine einfache Lösung über VBA gehabt. Es wird dann wohl eine Variante aus Makro-Aufzeichnung und rudimentären VBA-Wissen.

Viele Grüße
Katja
AW: VBA - Kombinationen ermitteln
17.09.2024 16:21:54
Yal
Hallo Katja,

der gelieferte Code funktioniert. Er mag zwar nicht liefern, was Du erwartest, aber so richtig und genau mitteilen, was erwartet wird, scheinst Du nicht in der Lage zu sein. "Funktioniert nicht" bring niemand weiter. Und Gedanken kann ich nicht lesen.

Der gelieferte Code ist die einfachste Lösung, die es mit VBA geben kann. Du wirst noch ein paar Jahren brauchen, bis Du diese Einfachheit hinbekommst.


Letzter Versuch:
wenn Du diesen Code auf deutsch liest, wirst Du die Logik der Reihenfolge entdecken:
nehme der erster der Liste, kombiniere mit zweiter der Liste, dann dritte, ... bis letzter,
dann nehme zweite der Liste, kombiniere mit dritter, bis letzter,
so bis vorletzter, kombiniere mit letzter.

Wenn Du es schaffst, dein Anliegen auf diese Art und Weise zu beschreiben, dann kann es programmiert werden. Wenn Du nicht in der Lage bist, zu beschreiben was gemacht wird, dann wird weder Du noch irgendjemand in der Lage daraus einen funktionierenden Code zu schreiben. Und es liegt nicht an der VBA-Kompetenz, sondern in der Fähigkeit (kein Angst, durchaus erlernbar), ein Vorhaben in einzelnen Schritten zu zerteilen.


Ein noch einfacherer Code, jedoch ohne Prüfung der leeren Zeichenkette:
Public Function Kombiniere2(Liste, Optional Trenner = ";")

Dim i, j
Dim Erg

Liste = Liste.Value
If UBound(Liste, 2) > 1 Then Liste = Application.Transpose(Liste)

Erg = Array()
For i = 1 To UBound(Liste, 1) - 1
For j = i + 1 To UBound(Liste, 1)
ReDim Preserve Erg(UBound(Erg) + 1)
Erg(UBound(Erg)) = Liste(i, 1) & Trenner & Liste(j, 1)
Next
Next
Kombiniere2 = Erg
End Function


Noch einmal: wenn in A1 bis A3 die Werte A, B, C liegen, liefert
=kombiniere2(A1:A3;" -- ")

A -- B
A -- C
B -- C

Der Code muss in einem Modul liegen, aber ich gehe davon aus, dass Du es bereits genau gelesen hast.

VG
Yal
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige