Buscar y concatenar

29/06/2007 - 13:33 por Nacho | Informe spam
Hola amigos,

Tengo una hoja del tipo con dos columnas A y B del tipo


A B
-
1 A1 I1
2 A2 I2
3 A3 I3
4 A4 I1
5 A5 I2
6 A6 I3
7 A7 I2
...

Con un número de filas del orden de 100

Necesito crear el siguiente resultado:

I1 A1;A4
I2 A2;A5;A7
I3 A3;A6

Es decir, necesito buscar todas las celdas que contiene I1, I2 e I3 en la
columna B y poner en la celda contigua el valor de la columna A

Gracias de antemano. Un saludo

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
29/06/2007 - 21:33 | Informe spam
hola, Nacho 1

Tengo una hoja... con dos columnas A y B del tipo
A B
-
1 A1 I1
2 A2 I2
3 A3 I3
4 A4 I1
5 A5 I2
6 A6 I3
7 A7 I2
...
... filas del orden de 100 Necesito crear el siguiente resultado:
I1 A1;A4
I2 A2;A5;A7
I3 A3;A6
... necesito buscar todas las celdas que contiene I1, I2 e I3 en la columna B y poner en la celda contigua el valor de la columna A



[segun parece] te resultaria mas apropiado definir una funcion personalizada +/- como sigue:
copia/pega las siguientes lineas en un modulo de codigo normal/general/estandar/...

Function TomarDatos(Datos As Range, Claves As Range, Clave) As String
Dim Celda As Range, Fila As Long: TomarDatos = "": Fila = 1
For Each Celda In Claves
If Celda = Clave Then TomarDatos = TomarDatos & "; " & Datos.Cells(Fila)
Fila = Fila + 1
Next: TomarDatos = Mid(TomarDatos, 3)
End Function

y 'llama' a esta funcion como a cualquiera otra de las 'integradas' de excel... [p.e.]
si suponemos que tus 100 filas estan en el rango A1:A100 y B1:B100
y que el primer dato buscado lo pones en 'D1' y quieres los resultados en 'E1'...

[E1] =TomarDatos($A$1:$A$100,$B$1:$B$100,D1)

-> ajusta si fuera necesario el separador de argumentos [mi sistema usa la coma ',' NO el punto y coma ';'] :D

saludos,
hector.
Respuesta Responder a este mensaje
#2 Nacho
30/06/2007 - 09:52 | Informe spam
Gracias Héctor Miguel. ¿No es posible hacerlo con alguna funcíón de excel
sin tener que programarlo? Un saludo



"Héctor Miguel" escribió en el mensaje
news:
hola, Nacho 1

Tengo una hoja... con dos columnas A y B del tipo
A B
-
1 A1 I1
2 A2 I2
3 A3 I3
4 A4 I1
5 A5 I2
6 A6 I3
7 A7 I2
...
... filas del orden de 100 Necesito crear el siguiente resultado:
I1 A1;A4
I2 A2;A5;A7
I3 A3;A6
... necesito buscar todas las celdas que contiene I1, I2 e I3 en la
columna B y poner en la celda contigua el valor de la columna A



[segun parece] te resultaria mas apropiado definir una funcion
personalizada +/- como sigue:
copia/pega las siguientes lineas en un modulo de codigo
normal/general/estandar/...

Function TomarDatos(Datos As Range, Claves As Range, Clave) As String
Dim Celda As Range, Fila As Long: TomarDatos = "": Fila = 1
For Each Celda In Claves
If Celda = Clave Then TomarDatos = TomarDatos & "; " &
Datos.Cells(Fila)
Fila = Fila + 1
Next: TomarDatos = Mid(TomarDatos, 3)
End Function

y 'llama' a esta funcion como a cualquiera otra de las 'integradas' de
excel... [p.e.]
si suponemos que tus 100 filas estan en el rango A1:A100 y B1:B100
y que el primer dato buscado lo pones en 'D1' y quieres los resultados en
'E1'...

[E1] =TomarDatos($A$1:$A$100,$B$1:$B$100,D1)

-> ajusta si fuera necesario el separador de argumentos [mi sistema usa la
coma ',' NO el punto y coma ';'] :D

saludos,
hector.

Respuesta Responder a este mensaje
#3 Héctor Miguel
30/06/2007 - 16:48 | Informe spam
hola, Nacho !

... No es posible hacerlo con alguna funcion de excel sin tener que programarlo?



si... pero es necesario 'echar a perder' una columna por cada celda-coincidencia del dato que se busca
[es decir] en lugar de *ver* en una sola celda el resultado [p.e. de:] A1;A4 -> y sucesivamente: A2;A5;A7 / A3;A6
-> tendrias que 'rescatar' en la misma fila, una columna para A1 y otra para A4 [y asi sucesivamente] :-((

si te interesa, y suponiendo que el rango de datos a rescatar esta en la columna 'A' y las claves en la columna 'B' a partir de la fila 2
y que en la columna 'C' [C2:C4] pones las claves que quieres encontrar [I1, I2, I3]

a) asigna un nombre al rango donde estan las claves p.e. 'Claves'
b) cuenta las veces que aparecen las claves 'buscadas' [C2:C4] en la columna 'D' -p.e.- [D2] =contar.si(claves,c2)
c) a partir de la celda 'E2' [f2, g2, h2, etc.]
usa cualquiera de las siguientes formulas [son matriciales, ya sabes, al inroducirlas/editarlas se terminan con ctrl+mayus+enter]
y son en una sola linea [las separo por el numero de caracteres por linea que 'aceptan' los lectores de noticias] :))

=si(columnas($e2:e2)>$d2,"",indirecto("a"&indice(k.esimo.menor(k.esimo.mayor(fila(claves)*(claves=$c2),
fila(indirecto("1:"&$d2))),fila(indirecto("1:"&$d2))),columnas($e2:e2))))

=elegir(1+(columnas($e2:e2)>$d2),indirecto("a"&indice(k.esimo.menor(k.esimo.mayor(fila(claves)*(claves=$c2),
fila(indirecto("1:"&$d2))),fila(indirecto("1:"&$d2))),columnas($e2:e2))),"")

d) copias la formula de 'E2' hacia la derecha [al menos] tantas columnas como te indique 'B2'
y tambien hacia abajo tantas filas como productos tengas en el resumen [C2:C4 ?]

y no te olvides del separador de argumentos [yo uso la coma]

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#4 Nacho
01/07/2007 - 13:24 | Informe spam
Gracias Héctor, acabo de introducir el código que me indicaste y funciona
perfectamente. Un saludo!


"Héctor Miguel" escribió en el mensaje
news:
hola, Nacho !

... No es posible hacerlo con alguna funcion de excel sin tener que
programarlo?



si... pero es necesario 'echar a perder' una columna por cada
celda-coincidencia del dato que se busca
[es decir] en lugar de *ver* en una sola celda el resultado [p.e. de:]
A1;A4 -> y sucesivamente: A2;A5;A7 / A3;A6
-> tendrias que 'rescatar' en la misma fila, una columna para A1 y otra
para A4 [y asi sucesivamente] :-((

si te interesa, y suponiendo que el rango de datos a rescatar esta en la
columna 'A' y las claves en la columna 'B' a partir de la fila 2
y que en la columna 'C' [C2:C4] pones las claves que quieres encontrar
[I1, I2, I3]

a) asigna un nombre al rango donde estan las claves p.e. 'Claves'
b) cuenta las veces que aparecen las claves 'buscadas' [C2:C4] en la
columna 'D' -p.e.- [D2] =contar.si(claves,c2)
c) a partir de la celda 'E2' [f2, g2, h2, etc.]
usa cualquiera de las siguientes formulas [son matriciales, ya sabes,
al inroducirlas/editarlas se terminan con ctrl+mayus+enter]
y son en una sola linea [las separo por el numero de caracteres por
linea que 'aceptan' los lectores de noticias] :))

=si(columnas($e2:e2)>$d2,"",indirecto("a"&indice(k.esimo.menor(k.esimo.mayor(fila(claves)*(claves=$c2),
fila(indirecto("1:"&$d2))),fila(indirecto("1:"&$d2))),columnas($e2:e2))))

=elegir(1+(columnas($e2:e2)>$d2),indirecto("a"&indice(k.esimo.menor(k.esimo.mayor(fila(claves)*(claves=$c2),
fila(indirecto("1:"&$d2))),fila(indirecto("1:"&$d2))),columnas($e2:e2))),"")

d) copias la formula de 'E2' hacia la derecha [al menos] tantas columnas
como te indique 'B2'
y tambien hacia abajo tantas filas como productos tengas en el resumen
[C2:C4 ?]

y no te olvides del separador de argumentos [yo uso la coma]

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida