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

时间:2015-06-30 19:30:16

标签: excel excel-formula

例如,请参见下表中的两列 Active User Ids

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

有人可以推荐一个excel公式来实现这个目标(不使用VBA代码)吗?

2 个答案:

答案 0 :(得分:1)

您可以为该表运行一些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

答案 1 :(得分:0)

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

  • 在单元格 C1 中输入Working
  • 在单元格 C2 中输入=SUBSTITUTE(IF(B2=1,C1&","&A2,C1),C$1&", ","")
  • 根据需要向下拖动单元格 C2 ,以覆盖您可能拥有的最长数据列表。
  • 在单元格 D5 中输入=INDEX(C:C,MAX(IF(C2:C10000="",0,ROW(C2:C10000)))),然后按 Ctrl + Shift + 输入输入作为array formula
  • 如果需要,通过右键单击列标题并选择隐藏来隐藏列 C 。这将阻止用户查看C列。(您可能希望采取其他保护措施,例如锁定工作表并仅允许用户编辑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。如果不是,它只需要采取上述内容。要删除“工作”一词和其他分隔符,“工作”将替换为空白。

=INDEX(C:C,MAX(IF(C2:C10000="",0,ROW(C2:C10000))))搜索C列中包含空格(在本例中为11)的第一行,然后从C列(在本例中为C11)中抓取该项目。