Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在excel中,如何根据另一列上的搜索条件从列中获取逗号分隔的值_Excel_Excel Formula - Fatal编程技术网

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

在excel中,如何根据另一列上的搜索条件从列中获取逗号分隔的值,excel,excel-formula,Excel,Excel Formula,例如,请参见下表中的两列。 我需要在单元格中获取逗号分隔的活动用户ID(其中活动=1),如“预期输出”中所示。用户表中可能有n行 有谁能推荐一个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 l

例如,请参见下表中的两列。

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


有谁能推荐一个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公式就可以做到这一点,但至少可以隐藏包含不希望用户看到的工作公式的列

  • 在单元格C1中输入
    Working
  • =替换(如果(B2=1,C1&“,”&A2,C1),C$1&“,”,”)
    输入单元格C2
  • 尽可能向下拖动单元格C2,以覆盖可能最长的数据列表
  • 在单元格D5中键入
    =索引(C:C,MAX(IF(C2:C10000=“”,0,行(C2:C10000)))
    ,然后按Ctrl+Shift+Enter键将其作为索引输入
  • 如果需要,右键单击列标题并选择“隐藏”,隐藏列C。这将阻止用户看到C列。(您可能希望采取其他保护措施,例如锁定工作表,只允许用户编辑A列和B列。)
下面是“工作”列中的示例: 下面是启用公式后您的示例的外观: 这些公式有什么作用?
=SUBSTITUTE(如果(B2=1,C1&“,”&A2,C1),C$1&“,”,“,”)
检查B列中是否有
1
。如果是,则采用上面的内容并添加逗号、空格和用户ID。如果没有,它只需要上面的内容。为了消除单词“Working”和其他分隔符,“Working”将替换为空白


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

您的解决方案看起来不错。但是,我需要在XLS模板中使用它,该模板将由多个用户共享。我们在一些客户端计算机上使用宏时遇到了一些问题。所以,我想知道基于公式的解决方案是否有可能。在问题描述中添加自定义项不好。好的,明白了。VBA是我唯一知道的方法。对不起,这没用。
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&", ","")