根据两个条件连接列中的某些单元格

时间:2015-11-01 12:31:54

标签: excel vba conditional concatenation

我有一份不同足球队及其队员的Excel工作表,以及有关各个球员的信息。我想要做的是,从我的表中,连接某些单元格并将数据放在一个更简单的表格上的单元格中,以便其他用户查看,例如,显示所有团队当前哪些玩家受伤。我会解释一下:

F_Team     | Player   | Injured
Liverpool   Coutinho       0
Liverpool   Benteke        1
Liverpool   Sturridge      1
Man U       Rooney         1
Chelsea     Sterling       0

所以在我的另一张表中看起来像这样

F_Team     | Players Injured
Liverpool   Benteke, Sturridge
Man U       Rooney

因此,数据可以分组到各个团队中,我只是试图将其正确地连接起来。

我已经尝试过使用这个VBA,但它回来的只有#NAME?我不知道为什么,而且我不知道我在做什么是正确的。

Function ConcatenateIf(CriteriaRange As Range, criteriarange2 As Range, _
Condition As Variant, condition2 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 And criteriarange2 = condition2   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($D$2:$D$20000, $L$2:$L$20000, Z2, 1, $E$2:$E$20000)

D列是F_Team E列是玩家 L栏受伤 列Z是F_Team与列D匹配的内容

1 个答案:

答案 0 :(得分:1)

  

如果CriteriaRange.Cells(i).Value = Condition和criteriarange2 =   condition2然后

应该是:

If CriteriaRange.Cells(i).Value = Condition And criteriarange2.Cells(i).Value = condition2 Then

p.s:在我的测试中,原始代码我没有得到#NAME,但是所有玩家的完整列表。这是因为On Error Resume Next声明。我强烈建议省略这个陈述:因为这是一个UDF,如果用户输入错误,让Excel以自己的方式处理错误(显示#VALUE),而不是显示任何错误的数据。