如何根据条件连接多个单元格中的值?

时间:2015-01-19 13:34:43

标签: excel excel-formula lookup textjoin

我需要搜索一行单元格,并且对于包含特定值的每个单元格,从上面的单元格返回值。

例如,请考虑以下内容

+---+--------+--------+--------+--------+--------+----------+
|   |   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

可以这样做吗?

由于

3 个答案:

答案 0 :(得分:6)

我找到了一个简单,可扩展的解决方案,它使用数组公式来连接满足特定条件的多个单元格。

应用于您的示例,粘贴到单元格F2:

=TEXTJOIN(",", TRUE, IF(B3:F3 = "YES", B$2:F$2, ""))

然后按 ctrl + shift + enter 输入数组公式,并复制细胞F3 - F4。

这个工作的原因留给读者练习。这很清楚,但我更喜欢“魔术”。

我希望这可以帮助任何有类似问题的人。

答案 1 :(得分:2)

在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是第一行的绝对引用,即标题。

最后,我使用IF语句封装了所有五个CONCATENATE语句。

希望这有帮助。

答案 2 :(得分:1)

编写您自己的UDF

Original solution.

文章摘录

  1. 通过单击 Developer 选项卡上的 Visual Basic 或使用 Alt + F11 组合 >
  2. 右键单击左上角的 Microsoft Excel对象,然后从上下文菜单中选择插入->模块,以创建新模块。
  3. 插入以下代码

UDF:

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

以后,如果您在工作簿中启用了宏,则可以使用它。
在您的特定示例中,将以下公式写入F2单元格并在所需范围内复制。

=ConcatenateIf($A2:$E2,"YES",$A$1:$E$1,",")