根据两个条件连接列中的某些单元格
我有一个不同的足球队和他们的小队的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列相匹配
如果CriteriaRange.Cells(i).Value = Condition并且criteriarange2 = condition2那么
应该:
If CriteriaRange.Cells(i).Value = Condition And criteriarange2.Cells(i).Value = condition2 Then
ps:在我的testing中,用原始代码我没有得到#NAME,而是所有玩家的完整列表。 这是因为On Error Resume Next
语句。 我强烈build议省略这个声明:因为这是一个UDF,如果用户错误地input它,让Excel以自己的方式处理错误(显示#VALUE),而不是显示任何错误的数据。