2017-10-19 162 views
0

因此,我有一个表格,第一列中有几个模块,第二列中列出了该模块中存在的不同进程。它看起来是这样的:具有多个值的Vlookup

IMAGE

现在我已经创建了独特的独特模块的数据验证列表,所以用模块A,模块B和模块C 列表当我选择从一个模块该列表中,我希望属于该模块的所有进程都显示在单独单元格的下拉列表旁边。如果这些流程出现在彼此之下,这将是一个'很好的'。

我已经尝试过各种索引和vlookup等的东西,但我找不到解决的办法。

回答

0

如果您有Office Excel中365然后用这个数组公式:

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

这是一个数组公式并需要被证实退出编辑模式时,按Ctrl-Shift键,Enter键。如果正确完成,那么Excel将在公式周围放置{}

enter image description here


如果您没有Office 365中的Excel,然后把这个代码附加到工作簿模块中,并如上所述使用。

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 

为了让他们在不同的细胞中一个低于其他使用此公式中的第一个单元格出现抄下足以覆盖最长的名单:

=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

感谢您的快速反应,但我希望这些过程出现在单独的单元格中,对我来说,最好的方式是,如果它们出现在彼此之下。 –

+0

然后这就是你应该说的在你原来的帖子里。 –

+0

@NickKuipers查看修改 –