2017-02-14 3 views
1

J'ai un tableau d'échantillons pour obtenir les correspondances et j'ai besoin d'énumérer dans une colonne. VLOOKUP n'apporte que la première colonne correspondante telle que connue. Alors, comment puis-je lister ces valeurs en utilisant une seule formule?Comment lister plusieurs résultats renvoyés à partir de VLOOKUP en utilisant une formule unique?

Voici le tableau:

enter image description here

J'ai besoin pour obtenir les valeurs dont la valeur est égale à la première colonne 1 et inscrivez le nom correspondant suivant il. Alors, comment puis-je faire cela?

+0

Voici quelque chose que vous pouvez faire: https://www.extendoffice.com/documents/excel/2699-excel-vlookup-find-first- 2nd-match.html Mais ça ressemble vraiment à beaucoup de travail ... – Vityata

+0

@Vityata, je préfère VBA à la place :) –

+0

Quelqu'un préfère VBA au lieu de formules Excel imbriquées :) – Vityata

Répondre

4

Si vous avez Office 365 Excel puis utilisez ceci:

=TEXTJOIN(",",TRUE,IF(A1:A6=1,B1:B6,"")) 

Cela doit être entré comme un tableau en appuyant sur Ctrl-Maj-Entrée au lieu de Enter 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 attacher un module à votre classeur dans le VBE et afficher ce code:

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 

et entrez la formule comme décrit ci-dessus.


Si d'autre part vous ne voulez pas dans une cellule, mais une simple liste puis utilisez cette formule de tableau dans D2:

=IFERROR(INDEX($B$1:$B$6,MATCH(1,($A$1:$A$6=1)*(COUNTIF($D$1:D1,$B$1:$B$6)=0),0)),"") 

Encore une fois, il est une formule de tableau et doit entrée en appuyer sur Ctrl-Shift-Enter au lieu de Enter lorsque vous quittez le mode d'édition. Si c'est fait correctement, Excel mettra {} autour de la formule.

Puis copier/traîné vers le bas:

enter image description here

+0

J'ai Office 2013, j'ai essayé cette fonction et il didnt wor pour moi –

+0

@AliTour voir les modifications, vous devrez peut-être actualiser l'écran. –

+0

@AliTor avez-vous essayé l'une ou l'autre des autres options? –