2015-11-01 4 views
0

У меня есть лист 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 Колонка Е Игрок Колонка L травмируется Колонка Z является то, что F_Team является матч против Колонка D

ответ

1

If CriteriaRange.Cells (i) .Value = Условие И критерий2 = condition2 Затем

Должно быть:

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

p.s: в моем тесте, с оригинальным кодом, я не получил #NAME, но полный список всех игроков. Это связано с заявлением On Error Resume Next. Я очень рекомендую отказаться от этого утверждения: поскольку это UDF, если пользователь неправильно его вводит, пусть Excel обрабатывает ошибку по-своему (отображение #VALUE), а не отображает неверные данные.

+0

Спасибо за это. Сейчас у меня это работает. Спасибо – theWolf

+0

@theWolf добро пожаловать, рад, что это помогло :) –

Смежные вопросы