在Excel中,如何根据另一列上的search条件从列中获取逗号分隔值

例如,请参见下表中的两列。
活动用户ID

我需要在单元格中使用逗号分隔活动用户ID(其中Active = 1),如“预期输出”所示。 用户表中可能有n行。

任何人都可以build议一个Excel公式来实现这个(不使用VBA代码)?

你可以为该表单运行一些VBA

Sub tester() Dim last As Integer Dim i As Integer Dim myString As String myString = "" last = Range("A1").End(xlDown).Row For i = 2 To last If Range("B" & i).Value = 1 And myString = "" Then myString = Str(Range("A" & i).Value) ElseIf Range("B" & i).Value = 1 Then myString = myString + "," + Str(Range("A" & i).Value) End If Next i Range("C2").Value = myString End Sub 

这是纯粹使用Excel公式来完成的一种方法。 我不认为这可以纯粹用一个Excel公式完成,但是您至less可以隐藏包含您不希望用户看到的工作公式的列。

  • inputWorking到单元格C1
  • C2单元格中input=SUBSTITUTE(IF(B2=1,C1&","&A2,C1),C$1&", ","")
  • C2单元向下拖动,以覆盖您可能拥有的最长的数据列表。
  • 键入=INDEX(C:C,MAX(IF(C2:C10000="",0,ROW(C2:C10000))))到单元格D5中 ,然后按Ctrl + Shift + Enter将其input为数组公式 。
  • 如果需要,通过右键单击列标题并select“隐藏”来隐藏C列。 这将阻止用户看到列C.(您可能希望采取其他保护措施,如locking您的工作表,只允许用户编辑列A和列B.)

以下是您的示例在“工作”列中的样子:

 UserId Active Working 26001 0 Working 26002 1 26002 26003 0 26002 Expected Output: 26004 0 26002 26002, 26005, 26010 26005 1 26002, 26005 26006 0 26002, 26005 26007 0 26002, 26005 26008 0 26002, 26005 26009 0 26002, 26005 26010 1 26002, 26005, 26010 

以下是开启公式的例子:

 UserId Active Working 26001 0 =SUBSTITUTE(IF(B2=1,C1&", "&A2,C1),C$1&", ","") 26002 1 =SUBSTITUTE(IF(B3=1,C2&", "&A3,C2),C$1&", ","") 26003 0 =SUBSTITUTE(IF(B4=1,C3&", "&A4,C3),C$1&", ","") Expected Output: 26004 0 =SUBSTITUTE(IF(B5=1,C4&", "&A5,C4),C$1&", ","") =INDEX(C:C,MAX(IF(C2:C10000="",0,ROW(C2:C10000)))) 26005 1 =SUBSTITUTE(IF(B6=1,C5&", "&A6,C5),C$1&", ","") 26006 0 =SUBSTITUTE(IF(B7=1,C6&", "&A7,C6),C$1&", ","") 26007 0 =SUBSTITUTE(IF(B8=1,C7&", "&A8,C7),C$1&", ","") 26008 0 =SUBSTITUTE(IF(B9=1,C8&", "&A9,C8),C$1&", ","") 26009 0 =SUBSTITUTE(IF(B10=1,C9&", "&A10,C9),C$1&", ","") 26010 1 =SUBSTITUTE(IF(B11=1,C10&", "&A11,C10),C$1&", ","") 

这些公式是做什么的?

=SUBSTITUTE(IF(B2=1,C1&","&A2,C1),C$1&", ","")检查列B中是否有1如果是,则取上述内容并添加逗号,空格和UserId。 如果不是,只需要上面的内容。 要消除单词“正在工作”和附加的分隔符,“正在工作”将replace为空白。

=INDEX(C:C,MAX(IF(C2:C10000="",0,ROW(C2:C10000))))search列C中包含空白(在本例中为11)的第一行,然后从列C(在这种情况下是C11)抓取该项目。