Excel 如何根据条件连接多个单元格中的值?
我需要搜索一行单元格,对于每个包含特定值的单元格,从上面的单元格返回值Excel 如何根据条件连接多个单元格中的值?,excel,excel-formula,lookup,textjoin,Excel,Excel Formula,Lookup,Textjoin,我需要搜索一行单元格,对于每个包含特定值的单元格,从上面的单元格返回值 例如,考虑下面的 +---+--------+--------+--------+--------+--------+----------+ | | A | B | C | D | E | F | +---+--------+--------+--------+--------+--------+----------+ | 1 | UK | DE
例如,考虑下面的
+---+--------+--------+--------+--------+--------+----------+
| | A | B | C | D | E | F |
+---+--------+--------+--------+--------+--------+----------+
| 1 | UK | DE | FR | HK | TW | |
+---+--------+--------+--------+--------+--------+----------+
| 2 | YES | | YES | YES | | |
+---+--------+--------+--------+--------+--------+----------+
| 3 | | YES | | YES | YES | |
+---+--------+--------+--------+--------+--------+----------+
| 4 | YES | | | YES | | |
+---+--------+--------+--------+--------+--------+----------+
所以我想在单元格F2,F3和F4中插入一个公式,它将给出以下结果
F2 = UK,FR,HK
F3 = DE,HK,TW
F4 = UK,HK
这能做到吗
感谢您在F2复制粘贴此公式:
=CONCATENATE(IF($A2="YES",A$1&",",),IF($B2="YES",B$1&",",),IF($C2="YES",C$1&",",),IF($D2="YES",D$1&",",),IF($E2="YES",E$1&",",))
然后向下拖动到柱上
说明:
IF($A2="YES",A$1&",",)
IF($B2="YES",B$1&",",)
IF($C2="YES",C$1&",",)
IF($D2="YES",D$1&",",)
IF($E2="YES",E$1&",",)
以上代码已重写5次,列名已更改。它检查当前行中的单元格是否为“是”。如果它这样做了,那么它将输入列的标题,即'A$1'
。请注意,$1是对第一行(即标题)的绝对引用
最后,我使用CONCATENATE
语句封装了所有五个IF
语句
希望这能有所帮助。我找到了一个简单、可扩展的解决方案,它使用数组公式连接满足特定条件的多个单元格 应用于您的示例,粘贴到单元格F2中:
=TEXTJOIN(",", TRUE, IF(B3:F3 = "YES", B$2:F$2, ""))
然后按ctrl+shift+enter以数组公式输入,并复制单元格F3--F4
这项工作的原因留给读者作为练习。这很清楚,但我更喜欢“魔术”
我希望这能帮助任何有类似问题的人。编写自己的UDF
文章节选
谢谢泽山。这非常有效,但我想知道是否有更容易管理的解决方案-可能使用数组公式。我从来没有想过在我原来的帖子中提到它,但我的电子表格有几百列。这意味着有几百条IF语句。如果我在任何时候添加或删除列(这种情况会相当频繁),我将需要不断更新所有If语句。我会检查并与您联系。请注意,TEXTJOIN仅在Excel 2016和Office 365中可用。
Function ConcatenateIf(CriteriaRange As Range, _
Condition As Variant, _
ConcatenateRange As Range, _
Optional Separator As String = ",") As Variant
'Update 20150414
Dim xResult As String
On Error Resume Next
If CriteriaRange.Count <> ConcatenateRange.Count Then
ConcatenateIf = CVErr(xlErrRef)
Exit Function
End If
For i = 1 To CriteriaRange.Count
If CriteriaRange.Cells(i).Value = Condition Then
xResult = xResult & Separator & ConcatenateRange.Cells(i).Value
End If
Next i
If xResult <> "" Then
xResult = VBA.Mid(xResult, VBA.Len(Separator) + 1)
End If
ConcatenateIf = xResult
Exit Function
End Function
=ConcatenateIf($A2:$E2,"YES",$A$1:$E$1,",")