5

Tengo una hoja de cálculo que se parece a esto:fórmula de hoja de cálculo para reunir todos los partidos en una celda

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: 

Tengo crear la columna UniqueFamilyId para identificar de forma única, esencialmente cada familia.

Estoy tratando de encontrar una fórmula que reúna los nombres de todas las personas que viven en la misma dirección en una celda, es decir, una que llene la columna 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 

sospecho que una mezcla de vlookup y matrices de fórmulas hará el truco, pero si tengo que utilizar Excel VBA o Google Apps Scripts, no me importa. ¿Puedes ayudarme a lograr esto, por favor?

Supongo que es una forma de encontrar todos los valores en la columna D (UniqueFamilyId) que son los mismos y luego utilizar vlookup para obtener el primer nombre, todo dentro de una fórmula de matriz para reunirlos todos.

P.S. He trabajado la manera de contar cuántos viven en cada Dirección- la fórmula es simplemente

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

pero quiero todos esos nombres se reunieron, no simplemente un recuento.

+0

Si quieres los resultados enumerados en una celda, necesitarás asistencia de VBA. Vea mis respuestas anteriores para tener una idea de cómo hacer esto: http://stackoverflow.com/a/5504488/657668 y http://superuser.com/q/405215/76571 – Excellll

Respuesta

4

El cálculo de Google se puede utilizar un ArrayFormula así:

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

Sólo tienes que pegar en la celda E2 luego copiar hacia abajo.

[editar]

Jugando un poco más, yo sabía que era posible hacerlo todo en una sola célula (E2). es decir, no es necesario copiar.Naturalmente que es mucho más complicado :) Pero aquí tienes:

=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

Resulta que un ligero ajuste a su primera fórmula lo hace en una sola celda. Si haces = concatenar (ArrayFormula (rept (A: A &" "; D: D = D2))) devuelve todos esos resultados en una sola respuesta ya que concatenate acepta arraylas pero con este anidamiento todo termina como un solo -cell formula ¿Te importa editar tu respuesta para la posteridad si estoy en lo cierto? – AshirusNW

+0

@AshirusNW lo siento, pero su sugerencia funciona de la misma manera. ¿No lo has probado? Y, como funcionan igual, siempre coloco ArrayFormula como la fórmula externa, ajustando todas las demás, incluso si no es necesaria, como una "mejor práctica" (que aprendí de los gurús de Google Docs en el foro de Documentos). –

4

El uso de una función VBA le permitirá resumir sus coincidencias en una celda. He utilizado la función de abajo muchas veces para concatenar una matriz de valores, algo que la función integrada CONCATENATE() no puede hacer.

Paso 1:
Pulse Alt + F11 para abrir el panel del editor de VBA en Excel. Inserta un nuevo módulo y pega este código para una función personalizada.

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 

Esta función le permitirá crear listas separadas por comas para resumir los datos de las etiquetas que tiene.

PASO 2:
En E2 en su mesa, pegar en la siguiente fórmula y pulse Ctrl +Shift +Introduzca. Esto lo ingresará como una fórmula de matriz.

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

Simplemente llene la columna, y eso debería hacerlo.

+0

Esto funciona, gracias. Se aceptará si nadie más puede encontrar una forma integrada de concatenar los valores de cadena de una matriz de fórmula – AshirusNW

Cuestiones relacionadas