6

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

例如,考虑以下

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

这可以做到吗?

谢谢

4

3 回答 3

8

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

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

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

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

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

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

于 2017-03-09T15:09:04.213 回答
3

编写自己的 UDF

原始解决方案。

文章摘录

  1. 通过单击开发人员选项卡上的Visual Basic或使用+组合打开 VBA 编辑器AltF11
  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,",")
于 2019-04-29T10:40:24.363 回答
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用statement 封装了所有的五个CONCATENATE语句。

希望这可以帮助。

于 2015-01-19T13:57:08.237 回答