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

问题描述 投票:3回答:3

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

例如,请考虑以下内容

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

可以这样做吗?

谢谢

excel excel-formula lookup textjoin
3个回答
6
投票

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

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

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

然后点击ctrl + shift + enter作为数组公式输入,并复制单元格F3-F4。

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

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


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语句。

希望这可以帮助。


1
投票

编写自己的UDF

Original solution.

摘自文章

  1. 单击“开发人员”选项卡上的“Visual Basic”或使用Alt + F11组合打开VBA编辑器
  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,",")
© www.soinside.com 2019 - 2024. All rights reserved.