5

У меня есть таблица, которая выглядит следующим образом:Spreadsheet формула, чтобы собрать все матчи в одну ячейку

A    B    C   D     
FirstName  SurnameName Address UniqueFamilyId  
--------------------------------------------------------- 
Abe   Black   1 Elm Ave :Black:1 Elm Ave: 
Joe   Doe   7 Park Ln :Doe:7 Park Lane: 
Jack   Black   1 Elm Ave :Black:1 Elm Ave: 
Bill   Doe   2 5th Ave :Doe:2 5th Ave: 
Harry   Doe   7 Park Ln :Doe:7 Park Lane: 
Sam   Doe   7 Park Ln :Doe:7 Park Lane: 

Я создать столбец UniqueFamilyId по существу идентифицировать каждую семью однозначно.

Я пытаюсь разработать формулу, которая соберет первые имена всех тех, кто живет по одному адресу в одной ячейке, то есть той, которая заполнит столбец E (AllFirstNames).

A    B    C   D     E 
FirstName  SurnameName Address UniqueFamilyId  AllFirstNames 
------------------------------------------------------------------------------- 
Abe   Black   1 Elm Ave :Black:1 Elm Ave: Abe Jack 
Joe   Doe   7 Park Ln :Doe:7 Park Lane: Joe Harry Sam 
Jack   Black   1 Elm Ave :Black:1 Elm Ave: Abe Jack 
Bill   Doe   2 5th Ave :Doe:2 5th Ave:  Bill 
Harry   Doe   7 Park Ln :Doe:7 Park Lane: Joe Harry Sam 
Sam   Doe   7 Park Ln :Doe:7 Park Lane: Joe Harry Sam 

Я подозреваю, что смесь ВПР и массив формул будет делать трюк, но если я должен использовать Excel VBA или Google Apps Сценарии, я не возражаю. Можете ли вы помочь мне в этом, пожалуйста.

Я предполагаю, что это какая-то форма поиска всех значений в столбце D (UniqueFamilyId), которые являются , а затем с помощью vlookup для получения имени, все в формуле массива, чтобы собрать их все.

P.S. Я работал, как подсчитать, сколько живут на каждом адресно формула просто

=COUNTIF(D$1:D$65536,D1) 

, но я хочу, чтобы все эти имена собраны, а не просто подсчет.

+0

Если вам нужны результаты, перечисленные в одной ячейке, вам понадобится помощь по VBA. Посмотрите мои предыдущие ответы, чтобы понять, как это сделать: http://stackoverflow.com/a/5504488/657668 и http://superuser.com/q/405215/76571 – Excellll

ответ

4

На Google Spreadsheet вы можете использовать ArrayFormula так:

=ArrayFormula(concatenate(rept(A:A&" ";D:D=D2))) 

Просто вставьте его на ячейку E2 затем скопировать вниз.

[править]

Игра вокруг немного больше, я знал, что это можно было сделать все это на одной клетке (E2). то есть нет необходимости копировать.Естественно, что это намного сложнее :) Но здесь вы идете:

=ArrayFormula(transpose(split(concatenate(transpose(if(D2:D=transpose(D2:D);A2:A&" ";"")&if(row(D2:D)=rows(D2:D)+1;char(9);"")));char(9)))) 
+0

Оказывается, что небольшая настройка вашей первой формулы делает ее в одной ячейке. Если вы делаете = concatenate (ArrayFormula (rept (A: A &" "; D: D = D2))), он возвращает все эти результаты в одном ответе, так как concatenate принимает аргумент arraylaslas, но с этим вложением вся вещь заканчивается как одиночная -целевой формулы. Помните, что редактируйте свой ответ для потомков, если я прав? – AshirusNW

+0

@AshirusNW извините, но ваше предложение работает одинаково. Разве вы не протестировали его? И, поскольку они работают одинаково, я всегда ставил ArrayFormula в качестве внешней формулы, обертывая все остальные, даже если это не нужно, как «лучшая практика» (которую я узнал от гуру Google Docs на форуме Docs). –

4

Использование функции VBA позволит вам суммировать совпадения в одной ячейке. Я использовал функцию ниже много раз, чтобы объединить массив значений - что-то не может сделать встроенная функция CONCATENATE().

Шаг 1:
Нажмите Alt + F11, чтобы открыть панель редактора VBA в Excel. Вставьте новый модуль и вставьте этот код для пользовательской функции.

Public Function CCARRAY(rr As Variant, sep As String) 
'rr is the range or array of values you want to concatenate. sep is the delimiter. 
Dim rra() As Variant 
Dim out As String 
Dim i As Integer 

On Error GoTo EH 
rra = rr 
out = "" 
i = 1 

Do While i <= UBound(rra, 1) 
    If rra(i, 1) <> False Then 
     out = out & rra(i, 1) & sep 
    End If 
    i = i + 1 
Loop 
out = Left(out, Len(out) - Len(sep)) 
CCARRAY = out 
Exit Function 

EH: 
rra = rr.Value 
Resume Next 

End Function 

Эта функция позволит вам создавать списки, разделенные запятой, для суммирования данных тегов, которые у вас есть.

ШАГ 2:
В E2 в таблице, вставка в следующей формуле и нажмите Ctrl + Сдвиг + Введите. Это будет вводить его в виде формулы массива.

=CCARRAY(IF(D2=$D$2:$D$7,$A$2:$A$7)," ") 

Просто заполните колонку, и это должно быть сделано.

+0

Это работает, спасибо. Будет приниматься, если никто другой не найдет встроенный способ конкатенирования строковых значений из формулы массива – AshirusNW

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

  • Нет связанных вопросов^_^