Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1800to1804
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
Inhaltsverzeichnis

VBA verketten mit 2 Bereichen/Kriterien

VBA verketten mit 2 Bereichen/Kriterien
02.01.2021 19:35:59
#GFX
Hallo Forum,
ich habe hier (https://www.herber.de/forum/archiv/336to340/338735_SummeWENN_mit_Text_Verketten.html) von "Boris" bereits einen Lösungsansatz für mein Problem gefunden:
Function verketten2(Suchbereich As Range, Suchbegriff As String, Ergebnisbereich As Range,  _
Optional Trennzeichen As String) As String
Application.Volatile
Dim C As Range, S As String
For Each C In Suchbereich
If C = Suchbegriff Then
S = S & C.Offset(0, Ergebnisbereich.Column - Suchbereich.Column) & Trennzeichen
End If
Next C
If Len(S) = Len(Trennzeichen) Then
S = ""
Else
S = Left(S, Len(S) - Len(Trennzeichen))
End If
verketten2 = S
End Function
Leider scheitern meine Versuche beim Anpassen des Scriptes an die Auswahl und Berechnung mehrerer Suchbereiche und Suchbegriffe. Ich bin für jede Hilfe dankbar. Gern mit Anmerkungen zum Dazulernen.
Danke.

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Das ist eine Fkt (sog UDF), die man ...
02.01.2021 20:17:13
Luc:?
…normalerweise nicht anpassen muss oder sollte, #GFX,
sondern in einer ZellFml oder einer (rahmenden) SubProzedur so verwendet, wie sie ist. Xl-Fktt kannst du ja auch nicht ändern, nur nutzen!
Solche Verkettungs-UDFs gibt's noch mehr im Archiv, sogar mehrere dieses Namens. Und dann noch welche, die anders heißen, zB Verbinden oder englisch etwas mit Concate bzw Join. Letzteres wäre wohl auch das hier Angestrebte, wofür es allerdings inzwischen 2 neue Xl-Fktt gibt, TEXTKETTE (ohne Trennzeichen) und mit etwas mehr Möglichkeiten (u.a. Trennzeichen) TEXTVERKETTEN. Aber da du ja der Meinung bist, deine Xl-Version sei ohne Relevanz, kann man die dir nicht oW empfehlen, zumal du deine Problematik nicht mal annähernd ausreichend schilderst.
Gruß, Luc :-?
„Die universelle Befähigung zur Unfähigkeit macht jede menschliche Leistung zu einem unglaublichen Wunder.“ Stapps ironisches Paradoxon
Anzeige
AW: Das ist eine Fkt (sog UDF), die man ...
03.01.2021 14:41:22
#GFX
Hallo Luc,
danke, das Du Dir das Problem annimmst. Ich habe mir bereits verschiedene Lösungen angesehen. Diese lag am nähesten an meinen Vorstellungen. Das Skript soll eine Abwärtskompatibilität bis 2010 haben, aber auch auf 2019 bzw. 365 laufen. TEXTVERKETTEN funktioniert zwar, ist aber nicht abwärtskompatibel. TEXTKETTE kann das m.E. nicht, was ich vorhabe. Was habe ich vor: Ich möchte über mehrere umfangreiche Tabellenblätter in denen sich verschiedene Vergleichselemente an jeweils unterschiedlichen Positionen befinden auf einem "Dashboard" zusammenführen. Der mathematische Teil funktioniert bestens mit SUMMEWENNS. Nun suche ich noch eine Lösung für die Textelemente, die schlussendlich durch Trennzeichen (z.B. Kommas) getrennt in einer Zelle angeordnet werden sollen. Eine universell einsetzbare Formel wäre natürlich super. Ich bin für alle Lösungsansätze offen.
Anzeige
Mach mal eine BspDatei für uns, ...
03.01.2021 17:15:11
Luc:-?
…die zeigt, wie die Texte ursprünglich positioniert sind und wie sie dann zusammengeführt wdn sollen, #GFX!
Luc :-?
AW: Mach mal eine BspDatei für uns, ...
04.01.2021 15:17:55
#GFX
Hallo Luc,
danke für Deine Rückantwort. Ich habe mal eine stark vereinfachte Tabelle gebaut (https://www.herber.de/bbs/user/142744.xlsx). Das Prinzip entspricht in etwa dem Original. Die Daten sind sehr umfangreich und untereinander unsortiert. Sie dürfen auch jeweils nicht neu sortiert werden. Auf Tabelle1 in den Spalten C und D sollen die jeweiligen Ergebnisse wie zu sehen aufgelistet erscheinen. Die Daten stammen aus Tabelle2. Ich hoffe, das es verstädlich ist.
Danke.
Anzeige
AW: Mach mal eine BspDatei für uns, ...
06.01.2021 07:58:56
#GFX
Hallo Luc,
ich habe eine Lösung gefunden! Bin nochmal einen anderen Weg gegangen. Der Code ist zwar nicht besonders schön und sicher auch nicht perfekt, aber er funktioniert erst mal und ist ausbaufähig :-)
Public Function KKVERKETTEN(Bereich_Kriterium1, Bereich_Kriterium2, Kriterium1, Kriterium2,  _
Bereich_Verketten)
Dim mydic
Dim L As Long
Set mydic = CreateObject("Scripting.Dictionary")
For L = 1 To Bereich_Kriterium1.Count And Bereich_Kriterium2.Count
If Bereich_Kriterium1(L) = Kriterium1 And Bereich_Kriterium2(L) = Kriterium2 Then
mydic(L) = Bereich_Verketten(L)
End If
Next
KKVERKETTEN = Join(mydic.items, ", ")
End Function
Ich danke Dir und allen anderen Helfern!
Anzeige
Ist doch OK, ...
07.01.2021 02:06:42
Luc:?
…#GFX;
hatte leider nicht eher Zeit dafür, da ich mehr Aufwand erwartet hatte, aber wollte es mal mit meinen Tools versuchen, was ebenfalls gelang. Allerdings hatte ich 2 UDFs verwendet, weil mich deine TestKriterien irritierten, da sie in Tab2 2stellig-gleich vorliegen und nicht 1stellig wie in den Tab1-Titeln. Außerdem hattest du doch geschrieben, dass die Reihenfolge erhalten bleiben soll, was sich wohl nur auf die flfd Angabe der Textprojekt-ID in Tab1 bezog, was mangels Datei keiner wissen konnte und das auf die willkürliche Reihenfolge in der QuellTab (2) bezogen hätte. Allerdings treten die Teststellungscodes auch mehrfach in der ZielTab (1) auf, so dass anzunehmen ist, dass das Testprojekt entscheidend ist. So hätte ggf vor dem Verketten noch sortiert wdn müssen, um deine Vorgabe zu erreichen, was wohl auch mit deiner zusätzlichen, VBS.Dictionary-UDF nicht oW erreicht wird. Hierfür könnte man eine QuickSort-UDF zusätzlich verwenden, was ich nachfolgend aber nicht einbeziehe, weil ich bisher keine Sortier-UDFs publiziert habe und mir die Vorbereitung vorliegender UDFs dafür jetzt zu aufwendig wäre. Ansonsten war das schon mal eine gute Wahl, die gleiche Verkettungen ignorieren könnte, wenn man diese Möglichkeit berücksichtigen würde.
Man sieht also, viel Raum für Missverständnisse, sogar mit BspDatei! Nur zur Info noch meine singulare MatrixFml mit den o.g. 2 UDFs:
C2: {=VJoin(WENN((Tabelle2!$A$2:$A$17=$A2)*VLike(Tabelle2!$D$2:$D$17;"*"&RECHTS(C$1)&"*");Tabelle2!$C$2:$C$17;"");", ";-1)}
Morhn, Luc :-?
Anzeige
AW: Ist doch OK, ...
07.01.2021 09:17:51
#GFX
Hi Luc,
Respekt! Da bleibt mir der Mund offen stehen. Hätte nicht gedacht, dass man die Funktionalität in eine Formel packen könnte. Super. Danke! Mit ein paar Anpassungen funktionierts auch. Hat sogar den Vorteil, dass die Berechnung schneller von Statten geht (insbesondere auf älteren Systemen), da es sich wie angesprochen bei mir um große Bereiche handelt.
Um in der Zukunft Missverstädnissen vorzubeugen, habe ich mir auch gleich noch einen Code besorgt zur Anonymisierung der Originaltabelle. Den muss ich nur noch eingehend testen. Die ersten Ergebnisse waren leider nicht vollständig befriedigend. Es wurden dabei einige bereits integrierten Formelergebnisse gekillt. Vielleicht hast Du da auch einen Tipp parat. Ich bleibe auch dran.
Danke!
Anzeige
Kann ich ohne SichtKontakt nicht 1schätzen! owT
08.01.2021 03:46:17
Luc:-?
:-?
AW: Kann ich ohne SichtKontakt nicht 1schätzen! owT
08.01.2021 06:58:45
#GFX
Hi Luc,
ich hab den Fehler gefunden. Es liegt an der Logik des anonymisierens. Das von mir eingesetzte Verfahren (VBA mit Zufallszahlgenerierung) verändert Zahlen und Texte. Bei Mathe ist es undramatisch wenn die Zahlen verändert werden, aber da ich hauptsächlich mit Texten in Bezug auf Zahlen arbeite, kann es nicht funktionieren, wenn die Texte nicht synchron über (gleichlautende) Zellen und in den (bezugnehmenden) Formeln geändert werden. Oder gibt es da einen Code oder ein Tool welches das kann?

226 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige