【发布时间】:2015-07-02 02:11:22
【问题描述】:
例如,请参见下表中的两列。
我需要在单元格中获取逗号分隔的活动用户 ID(其中 Active = 1),如“预期输出”中所示。 users 表中可能有 n 行。
谁能建议一个 excel 公式来实现这一点(不使用 VBA 代码)?
【问题讨论】:
标签: excel excel-formula
例如,请参见下表中的两列。
我需要在单元格中获取逗号分隔的活动用户 ID(其中 Active = 1),如“预期输出”中所示。 users 表中可能有 n 行。
谁能建议一个 excel 公式来实现这一点(不使用 VBA 代码)?
【问题讨论】:
标签: excel excel-formula
您可以为该工作表运行一些 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 公式来完成,但您至少可以隐藏包含您不希望用户看到的工作公式的列。
Working。=SUBSTITUTE(IF(B2=1,C1&","&A2,C1),C$1&", ","")。=INDEX(C:C,MAX(IF(C2:C10000="",0,ROW(C2:C10000))))并按Ctrl+Shift+Enter将其输入为array formula。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。如果没有,它只需要上面的内容。为了消除单词“Working”和额外的分隔符,“Working”被替换为一个空格。
=INDEX(C:C,MAX(IF(C2:C10000="",0,ROW(C2:C10000)))) 搜索 C 列中包含空白的第一行(在本例中为 11),然后从 C 列(在本例中为 C11)获取该项目。
【讨论】: