2017-10-19 28 views
0

Donc, j'ai une table, avec plusieurs modules dans la première colonne et dans la deuxième colonne les différents processus existant dans ce module. Il ressemble à ceci:Vlookup avec plusieurs valeurs

IMAGE

Maintenant, j'ai créé une liste de validation des données des modules uniques uniques, donc une liste avec le module A, le module B et Module C. Lorsque je sélectionne un module de cette liste, je veux que tous les processus, appartenant au module, apparaissent à côté de la liste déroulante dans des cellules séparées. Ce serait une bonne chose d'avoir si les processus apparaissaient les uns sous les autres.

J'ai essayé différentes choses avec index et vlookup etcetera, mais je ne peux pas trouver un moyen de le réparer.

Répondre

0

Si vous avez Office 365 Excel puis utilisez cette formule de tableau:

=TEXTJOIN(",",TRUE,IF($A$2:$A$7 = D2,$B$2:$B$7,"")) 

Ceci est une formule de tableau et doit être confirmé avec Ctrl-Maj-Entrée lorsque vous quittez le mode d'édition. Si c'est fait correctement, Excel mettra {} autour de la formule.

enter image description here


Si vous ne disposez pas d'Office 365 Excel puis mettre ce code dans un module attaché au classeur et utiliser comme décrit ci-dessus.

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 

Pour les amener à apparaître dans des cellules séparées les unes sous les autres utilisent cette formule dans la première cellule et copie assez pour couvrir la plus longue liste:

=IFERROR(INDEX(B:B,AGGREGATE(15,6,ROW($A$2:$A$7)/($A$2:$A$7=$D$2),ROW(1:1))),"") 

enter image description here

+0

Merci pour la réaction rapide, mais je veux que les processus apparaissent dans des cellules séparées, la meilleure façon pour moi serait si elles apparaissent les unes sous les autres .. –

+0

Alors c'est ce que vous devriez dire dans votre message original. –

+0

@NickKuipers voir les modifications –