LookUP-Wert, der mehrere verkettete Werte zurückgibt


1

Ich habe zwei Spalten, eine ist eine "Kategorie" mit einem einfachen Code und die andere Spalte mit dem Namen "Baum- / Gruppenqualitäten" mit einer oder vielen der folgenden Kategorien, die, wenn mehrere, durch Kommas verkettet sind, siehe Beispiel

enter image description here

Ich brauche diese Spalte L

enter image description here

Geben Sie einen Wert ein, der aus dem Kategoriecode (A, B, C oder U) und einer Anzahl / mehreren Nummern (1 bis 3) besteht, die davon abhängig sind

enter image description here

So würde zum Beispiel im ersten Bild die erste Zeile mit Daten in meine Spalte L ('CAT') als "B, 2,3,1" übersetzt.

Ich habe mit = VLOOKUP versucht, kann aber nur den ersten Treffer erhalten. Ich denke, dass Erstellen und Array die Lösung sein könnten, aber ich denke, ich brauche ein paar Ratschläge dazu.


Möglicherweise können Sie COUNTIF in Excel verwenden, um die Anzahl der Zeilen zu zählen, die jeden Wert enthalten. Über wie viele Reihen sprechen wir und wie oft müssen Sie das tun? Könnte nur Textfilter für jeden "enthält" -Wert für eine schnelle Summation oder sogar für eine Pivot-Tabelle verwenden.

Ich bekomme solche Rohdaten, die einer individuellen Analyse bedürfen, aber es gibt nicht mehr Kombinationen als Kategorien (A bis U) und nicht mehr "Qualitäten" als in den Bildern gezeigt. Es gibt Dutzende von Registerkarten, bei denen viele andere Berechnungen gleichzeitig ausgeführt werden. Daher muss dies automatisch geschehen und eine verkettete Spalte gefüllt werden

Kennen Sie Python? Ich denke, das wäre eine einfachere Methode zur Automatisierung.

Ich bin leider nicht dabei, und ich versuche, jede Berechnung in der Kalkulationstabelle mit einfachen Excel-Formeln und VBA zu verknüpfen

Haben Sie das Super User StackExchange-Forum ausprobiert? meta.stackexchange.com/questions/155487/…

Antworten:


1

Ich habe eine Problemumgehung gefunden. nicht sehr effizient oder klug, aber es funktioniert.

Grundsätzlich habe ich ein Array mit allen möglichen Kombinationen der drei Elemente erstellt und eine weitere Spalte mit dem richtigen Code hinzugefügt, der abgerufen werden sollte. enter image description here

Mit der folgenden Formel können Sie nun Excel für jeden einzelnen Wert vorbereiten und seinen Code in der Spalte basierend auf einem Macth finden

= IF (Bäume! AC2 & lt; "", VLOOKUP (Bäume! AC2, QUALITIES_ARRAY, 2, FALSE), "")

Ich hoffe es hilft


1

Ich habe eine funktionierende Lösung. Drücken Sie Alt + F11 Um den Visual Basic-Editor aufzurufen, erstellen Sie ein neues Modul und fügen Sie diesen Code ein. Sie können das verwenden CAT Funktion in jeder Zelle wie folgt: =CAT(category,qualities).

' Function that expects a quality and returns the respective code
' Important: Tick check box beside "Microsoft Scripting Runtime" in Tools > References
Function lookup_code(ByRef quality)
    Dim dict As New Scripting.Dictionary
    dict.Add "Arboricultural", "1"
    dict.Add "Landscape", "2"
    dict.Add "Cultural_and_Conservation", "3"
    lookup_code = dict(quality)
End Function

' Function to output the concatenated CAT code
' Use in any Excel cell as `=CAT(category, qualities)`
' Expects a category (e.g. "A") and a string of one or more qualities, separated by a comma
Function CAT(category, qualities)
    Dim code As String
    If InStr(qualities, ",") > 0 Then ' Check for commas
        Dim QualityArray() As String
        QualityArray = Split(qualities, ",") ' Split string at commas
        For Each q In QualityArray
            code = code & "," & lookup_code(q) ' match code to quality
        Next
    Else
        code = "," & lookup_code(CStr(qualities))
    End If
    CAT = category & code ' return category and codes (e.g. "B,2,3,1")
End Function
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.