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 文章节选
  • 通过单击“开发人员”选项卡上的Visual Basic或使用Alt+F11组合打开VBA编辑器
  • 右键单击左上角的Microsoft Excel对象并从关联菜单中选择“插入->模块”,创建新模块
  • 插入以下代码
  • 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,",")