Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1856to1860
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

Verketten(Wenn geht nicht :(

Verketten(Wenn geht nicht :(
19.11.2021 12:59:03
Johannes
Liebes Forum,
ich habe in Excel in mehreren Reitern eine "Datenbank" aufgebaut. Bitte dafür nicht verprügeln, ging schneller und ist für meine Kollegen einfacher zu verwenden;) Auf meinem Rechner läuft Excel 2019 und ich habe daher die Funktion "Textverketten" verwendet, die das tut, was sie soll. Meine Kollegen verwenden teilweise Excel 2016. Daher versuche ich die Tabelle mit der Funktion "Verketten" umzubauen. "Verketten(wenn" liefert mir aber nicht das gewünschte Ergebnis. Wenn ich mich durch die Formelauswertung klicke scheitere ich an der Auswertung der Funktion Verketten: VERKETTEN({"";"";"";"";"a";"e";"f"} ). Das Ergebnis ist eine leere Zelle...
Hier findet ihr ein Minimalbeispiel: https://www.herber.de/bbs/user/149252.xlsx. Im Folgenden eine Beschreibung, was das Ganze soll:
  • Es gibt zwei Datentypen bezeichnet mit A und B
  • A und B können n...m verknüpft sein
  • Die Verknüpfung erfolgt im Reiter "Mapping" in zwei Spalten. Erste Spalte ist ID des Elements A, zweite Spalte ist die ID des Elements B
  • In der Ausgabemaske würde ich gerne je Element des Typ A alle IDs des Typ B untereinander (mit Zeilenumbruch) auflisten, die in Mapping verknüpft sind.
    Hier die Funktion, die in Excel 2019 tut, was sie soll:
    =TEXTVERKETTEN("";WAHR;WENN(A2=Mapping!$A$2:$A$13;Mapping!$B$2:$B$13;""))
    Im Original ist das erste Argument "zeichen(10)". "Verketten" bietet diese Funktionalität nicht an, daher habe ich "zeichen(10)" in der Mappingtabelle an jede ID in der zweiten Spalte angehängt. Nicht schön, aber funktional...
    Und hier die Funktion, die ich mit "Verketten" erfolglos erstellt habe:
    =VERKETTEN(WENN(A3=Mapping!$A$2:$A$8;Mapping!$B$2:$B$8;""))
    VBA wäre an sich kein Problem, wahrscheinlich aber eher langsam. Mit 900 Elementen vom Typ A und 4400 vom Typ B werden die geschachtelten for-Schleifen allerdings eine Weile laufen. Zudem möchte ich die Formel in 6 Spalten verwenden...
    Ist das Problem mit Verketten ohne Hilfsspalten lösbar? Die Tabelle sollte möglichst Nutzerfreundlich verwendet werden können. Die Nutzer sollten Formeln nicht anpassen müssen...
    Vielen Dank im Voraus!
    Johannes
  • 4
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    VERKETTEN kann keine Ranges!
    19.11.2021 13:17:33
    lupo1
    AW: Verketten(Wenn geht nicht :(
    19.11.2021 13:23:06
    Daniel
    "Ist das Problem mit Verketten ohne Hilfsspalten lösbar?"
    ich sag mal NEIN. Bei Verketten musst du jeden zu verkettenden Textwert einzeln aufführen.
    wenn die Liste Mapping aufsteigend sortiert ist, würde ich hier eine Hilfsspalte einfügen, in welcher du die Wert nach oben hin für jeden Wert verkettest, so dass beim ersten vorkommen der ID-A in der Liste die vollständige Textkette steht.
    Dann könntest du in der Ausgabemaske einfach über den SVerweis auf diesen Wert zugereifen.
    Also in Mapping!C2 und folgende die Formel: =B2&Wenn(A2=A3;Zeichen(10)&C3;"")
    und in Ausgabemaske!B2 dann die Formel: =SVerweis(A2;Mapping!A:C;3;FALSCH)
    ansonsten müsstest du dir das Textverketten in VBA nachbauen.
    Sollte aber kein Problem sein.
    Gruß Daniel
    Anzeige
    AW: Verketten(Wenn geht nicht :(
    19.11.2021 14:01:11
    Rudi
    Hallo,
    
    werden die geschachtelten for-Schleifen allerdings eine Weile laufen. 
    
    geht auch schnell.
    teste mal:
    
    Function MeineKette(vntKrit, rngMapping As Range, Optional strTrenn As String = " ")
    Dim objKette As Object
    Dim lngMapping As Long
    Dim arrMapping
    Dim strKey As String
    arrMapping = rngMapping.Value
    Set objKette = CreateObject("scripting.dictionary")
    For lngMapping = 1 To UBound(arrMapping)
    strKey = CStr(arrMapping(lngMapping, 1))
    objKette(strKey) = objKette(strKey) & strTrenn & arrMapping(lngMapping, 2)
    Next
    If objKette.exists(CStr(vntKrit)) Then
    MeineKette = Mid(objKette(CStr(vntKrit)), 2)
    Else
    MeineKette = vbNullString
    End If
    Set objKette = Nothing
    End Function
    
    =meinekette(A2;Mapping!$A$2:$B$10;ZEICHEN(10))
    Gruß
    Rudi
    Anzeige
    AW: Verketten(Wenn geht nicht :(
    23.11.2021 13:41:09
    Johannes
    Hi,
    danke für die Rückmeldungen! Dass Verketten nicht mit Ranges zurechtkommt, war der alles entscheidende Hinweis:D
    Ich bin gerade dabei das Makro von Rudi für meinen spezifischen Fall umzubauen. Ich wusste nicht, dass VBA mit Dictionaries arbeiten kann. Die kenn ich von Python und verwende ich mit großer Begeisterung:D Danke für den Hinweis!
    Wenn ich fertig bin, poste ich das finale Ergebnis zur Dokumentation für den Nächsten, der das gleichen Problem hat.
    Danke!
    Johannes

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige