0

Ich habe eine Tabelle mit Teilen wie folgt;Zurückgeben von Spaltennamen, wenn eine Übereinstimmung in der Zeile vorhanden ist, Suchen nach mehreren Übereinstimmungen

--------------- 
| Part number | 
--------------- 
| 123456  | 
| 16D345  | 
| 16E099  | 
| 490586  | 
| 970884  | 
--------------- 

Und ein anderer wie so;

--------------------------------------------------- 
| Part number | 940822 | 940922 | 170345 | 940222 | 
--------------------------------------------------- 
| 123456  | X |  | X | X | 
| 16D345  | X |  | X |  | 
| 16E099  |  | X |  | X | 
| 490586  | X |  | X | X | 
| 970884  |  |  | X |  | 
--------------------------------------------------- 

Die Zahlen in den Spalten der zweiten Tabelle sind 'Einheiten'.
Ich versuche herauszufinden, wie man alle Einheitennummern bekommt, wo ein Teil X hat. Grundsätzlich möchte ich mit dem Folgenden enden;

---------------------------------------- 
| Part number | Used in    | 
---------------------------------------- 
| 123456  | 940822, 170345, 940222 | 
| 16D345  | 940822, 170345   | 
| 16E099  | 940922, 940222   | 
| 490586  | 940822, 170345, 940222 | 
| 970884  | 170345     | 
---------------------------------------- 

Jetzt habe ich gerade gelernt, vor kurzem, wie INDEX und MATCH zu verwenden haben, aber nicht in der Lage gewesen, das Ergebnis mag ich zu erhalten. Ich habe versucht Array-Formeln zu verwenden, aber ich verstehe sie noch nicht.

Antwort

2

Wenn Sie ein Abonnement für Office 365 Excel haben, dann können Sie die folgende Matrixformel verwenden:

=TEXTJOIN(", ",TRUE,IF(($E$2:$H$6 = "X")*($D$2:$D$6=A2),$E$1:$H$1,"")) 

Als eine Matrixformel mit bestätigt werden muss Ctrl-Shift-Enter statt eingeben, wenn bearbeiten Verlassen Modus. Wenn es richtig gemacht wird, wird Excel {} um die Formel setzen.

enter image description here


Wenn Sie Office 365 nicht haben, dann können Sie diesen Code in einer an der Arbeitsmappe angebracht Modul setzen und die Formel verwenden, wie oben beschrieben:

Function TEXTJOIN(delim As String, skipblank As Boolean, arr) 
    Dim d As Long 
    Dim c As Long 
    Dim arr2() 
    Dim t As Long, y As Long 
    t = -1 
    y = -1 
    If TypeName(arr) = "Range" Then 
     arr2 = arr.Value 
    Else 
     arr2 = arr 
    End If 
    On Error Resume Next 
    t = UBound(arr2, 2) 
    y = UBound(arr2, 1) 
    On Error GoTo 0 

    If t >= 0 And y >= 0 Then 
     For c = LBound(arr2, 1) To UBound(arr2, 1) 
      For d = LBound(arr2, 1) To UBound(arr2, 2) 
       If arr2(c, d) <> "" Or Not skipblank Then 
        TEXTJOIN = TEXTJOIN & arr2(c, d) & delim 
       End If 
      Next d 
     Next c 
    Else 
     For c = LBound(arr2) To UBound(arr2) 
      If arr2(c) <> "" Or Not skipblank Then 
       TEXTJOIN = TEXTJOIN & arr2(c) & delim 
      End If 
     Next c 
    End If 
    TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim)) 
End Function 
+1

Sorry, aber ich hatte zu Mjölnir dieser. – Jeeped

+0

@Jeeped NP, konnte nicht eine passende finden. Dein ist perfekt. –

+0

BTW, ich habe vor kurzem ein [textjoin] (http://stackoverflow.com/questions/tagged/textjoin) -Tag erstellt, das verwendet werden kann, um Q & A's bei der Verkettung von Strings zu finden. Es könnte sogar wegen einer Aktualisierung seiner Informationen fällig sein. – Jeeped

Verwandte Themen