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



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

例如,请考虑以下事项

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

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

并按 按Ctrl + 转移 + 输入 输入为数组公式,然后复制单元格 F3--F4.

这之所以有效,留给读者作为练习。这很清楚,但我更喜欢"魔术"。

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

编写自己的 UDF

原始解决方案。

文章摘

  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,",")

在 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 次,列名也已更改。它检查当前行中的单元格是否具有"YES"。如果是这样,那么它将输入'A$1'列的标题。请注意,$1 是对第一行(即标题)的绝对引用。

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

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新