Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Separar celdas con listado

5 views
Skip to first unread message

Juan

unread,
May 8, 2009, 1:29:55 AM5/8/09
to
Buenas.
Estoy buscando algún método (con o sin macro) para que me separe un
listado que tengo en una serie de celdas.
Imaginaos, es algo así:
A1
Pepe; Juan, Pedro; Luis, Manuel y Enrique
A2
Pedro; Manuel, Fernando, Luis; Victor y Antonio

El caso es que quería que me lo pusiera ordenado dentro de la misma
columna en diferentes filas. Además, para rizar el rizo, sería
interesante poder añadir otro valor al lado del nombre en función de
su posición. Es decir, si en A1 Pepe va antes del ";", que ponga una
"P", a Juan y Pedro "D", a Luis una "M". Y abajo, en A2, a Pedro otra
"P", a Manuel...Luis otra "D", a Victor y Antonio otra "M".
Espero haberme explicado bien.
Muchas gracias por vuestra ayuda.

H�ctor Miguel

unread,
May 8, 2009, 1:51:37 AM5/8/09
to
hola, Juan !

(hasta donde se) pocas veces lo imaginado (desde este lado del mensaje) ha coincidido con la realidad (del que consulta)

(entonces) es mas factible si tu "ilustracion" la complementas con los rangos y dos o tres ejemplos mas... "reales" (p.e.)

si tienes:
[A1] Pepe; Juan, Pedro; Luis, Manuel y Enrique


[A2] Pedro; Manuel, Fernando, Luis; Victor y Antonio

-> cual es el resultado que esperas obtener y "donde/como/por que/..." (exactamente) ???

saludos,
hector.

__ OP __
> Estoy buscando algun metodo (con o sin macro) para que me separe un listado que tengo en una serie de celdas.
> Imaginaos, es algo asi:


> A1
> Pepe; Juan, Pedro; Luis, Manuel y Enrique
> A2
> Pedro; Manuel, Fernando, Luis; Victor y Antonio

> El caso es que queria que me lo pusiera ordenado dentro de la misma columna en diferentes filas.
> Ademas, para rizar el rizo, seria interesante poder anadir otro valor al lado del nombre en funcion de su posicion.


> Es decir, si en A1 Pepe va antes del ";", que ponga una "P", a Juan y Pedro "D", a Luis una "M".
> Y abajo, en A2, a Pedro otra "P", a Manuel...Luis otra "D", a Victor y Antonio otra "M".

> Espero haberme explicado bien...


Juan

unread,
May 8, 2009, 2:21:26 AM5/8/09
to
On 8 mayo, 07:51, "Héctor Miguel" <NOhemiordiS...@PLShotmail.com>
wrote:

> hola, Juan !
>
> (hasta donde se) pocas veces lo imaginado (desde este lado del mensaje) ha coincidido con la realidad (del que consulta)
>
> (entonces) es mas factible si tu "ilustracion" la complementas con los rangos y dos o tres ejemplos mas... "reales" (p.e.)
>
> si tienes:
> [A1] Pepe; Juan, Pedro; Luis, Manuel y Enrique
> [A2] Pedro; Manuel, Fernando, Luis; Victor y Antonio
>
> -> cual es el resultado que esperas obtener y "donde/como/por que/..." (exactamente) ???
>
> saludos,
> hector.
>

Buenas Hector.
Ya veo que no me he explicado demasiado allá, jejeje.
Pretendo obtener en otra columna la lista, de tal manera que de A1 se
genere en otra columna (por ejemplo en C):
[C] [D]
Pepe P
Juan D
Pedro D
Luis M
Manuel M
Enrique M
De [A2] , en otra columna (la que sea), lo mismo, el listado en la
columna que sea (por ejemplo en E y F):
[E] [F]
Pedro P
Manuel D
Fernando D
Luis D
Victor M
Antonio M

Ahora mejor?
Un saludo.

H�ctor Miguel

unread,
May 8, 2009, 2:59:04 AM5/8/09
to
hola, Juan !

tratado de encontrar alguna solucion sin macros... puedes confirmar algun "patron" (p.e.)
- siempre 6 nombres ?
- solo 3 "grupos" (P, D, M) ?
- la diferencia es siempre ";" ?
- ???

saludos,
hector.

__ OP __
> Ya veo que no me he explicado demasiado alla, jejeje.


> Pretendo obtener en otra columna la lista, de tal manera que de A1 se genere en otra columna (por ejemplo en C):
> [C] [D]
> Pepe P
> Juan D
> Pedro D
> Luis M
> Manuel M
> Enrique M
> De [A2] , en otra columna (la que sea), lo mismo, el listado en la columna que sea (por ejemplo en E y F):
> [E] [F]
> Pedro P
> Manuel D
> Fernando D
> Luis D
> Victor M
> Antonio M
>
> Ahora mejor?

__ previos __

Juan

unread,
May 8, 2009, 3:33:18 AM5/8/09
to
Hola Hector,
muchas gracias por tu ayuda.
El listado está separado por comas y punto y coma. En teoría los
grupos por punto y coma y dentro de cada grupo los individuos están
separados por comas. Así, el primer grupo es P, los que van detrás del
primer punto y coma son D, los que van detrás del segundo punto y coma
son M y los que van detrás del tercer punto y coma son DL.
He puesto en el ejemplo sólo 3 grupos por simplificar y no complicar
demasiado, pero en realidad son 4 grupos.
Un saludo.

On 8 mayo, 08:59, "Héctor Miguel" <NOhemiordiS...@PLShotmail.com>
wrote:

pepe

unread,
May 8, 2009, 9:57:01 AM5/8/09
to
Puedes separarlo utilizando la opci�n texto en columnas.
En una primera pasada separas por punto y coma, tendr�s entonces en la
primera columna el grupo P, en la segunda el D y en la tercera columna el
grupo M.
A continuaci�n insertas la columnas necesarias entre la columna del grupo P
y la del grupo D, seleccionas la columna del grupo P y vuelves a separar
utilizando la copion texto en columnas. Repites lo mismo con las dem�s
columnas y ya lo tienes.

"Juan" <jua...@gmail.com> escribi� en el mensaje de noticias
news:0b362fe6-d973-4592...@z7g2000vbh.googlegroups.com...
Buenas.
Estoy buscando alg�n m�todo (con o sin macro) para que me separe un


listado que tengo en una serie de celdas.

Imaginaos, es algo as�:


A1
Pepe; Juan, Pedro; Luis, Manuel y Enrique
A2
Pedro; Manuel, Fernando, Luis; Victor y Antonio

El caso es que quer�a que me lo pusiera ordenado dentro de la misma
columna en diferentes filas. Adem�s, para rizar el rizo, ser�a
interesante poder a�adir otro valor al lado del nombre en funci�n de
su posici�n. Es decir, si en A1 Pepe va antes del ";", que ponga una

H�ctor Miguel

unread,
May 8, 2009, 11:58:27 PM5/8/09
to
hola, Juan !

> El listado esta separado por comas y punto y coma
> ... los grupos por punto y coma y dentro de cada grupo los individuos estan separados por comas.
> ... el primer grupo es P, los que van detras del primer punto y coma son D
> los que van detras del segundo punto y coma son M y los que van detras del tercer punto y coma son DL.
> He puesto en el ejemplo solo 3 grupos por simplificar y no complicar demasiado, pero en realidad son 4 grupos...

espero que no se haya quedado nada "en el tintero" (ni siquiera por "simplificar" la consulta)
recuerda que las propuestas se hacen en proporcion con los detalles ofrecidos en la consulta)

prueba con los siguientes procedimientos y ejecutas el sub "separados" desde la hoja con los datos
si NO empiezas en la fila 1... te toca hacer las enmiendas necesarias (?)

saludos,
hector.

Dim Matriz
Private Function Matriz_XL()
Matriz_XL = Matriz
End Function
Sub Separados()
Dim Clave, Texto As String, Grupos, Personas, _
Fila As Integer, g As Byte, p As Byte
Clave = Array("P", "D", "M", "DL")
For Fila = 1 To [a65526].End(xlUp).Row
With Application
Texto = .Substitute(.Substitute(Range("a" & Fila), " y ", ","), " ", "")
End With
Grupos = Split(Texto, ";", , vbTextCompare)
For g = 0 To UBound(Grupos)
Personas = Split(Grupos(g), ",", , vbTextCompare)
Matriz = Personas
p = UBound(Personas) + 1
With Cells(65536, Fila * 2).End(xlUp)
.Offset(1).Resize(p).Value = Evaluate("transpose(matriz_xl())")
.Offset(1, 1).Resize(p).Value = Clave(g)
End With
Next
Next
End Sub


Juan

unread,
May 11, 2009, 1:59:31 AM5/11/09
to
Buenas, Héctor, gracias por la respuesta.
He estado probando la macro y como soy algo nuevo no la entiendo muy
bien. Me crea efectivamente un listado en una columna, separando bien
por los puntos y comas, pero no identifica los nombres, me sale en
cada celda #¿NOMBRE?, lo que creo que es por que no identifica el
nombre en el listado.
Como te he dicho, soy algo nuevo y se me escapa como funciona la
función substitute por si fuera algún parámetro dentro de esa función.
Un saludo y muchísimas gracias por la ayuda.
Juan

Juan

unread,
May 11, 2009, 2:08:09 AM5/11/09
to
Buenas, Pepe.
El caso es que ese es el motivo de mi consulta. Estuve probando ese
método, pero el fallo que tiene es que no me permite identificar el
grupo al que pertenece cada persona. Además se queda colgando el
problema del caracter final, el "y", ya que si aplico lo de separar
texto en columnas y separo por puntos y comas, comas e y, cuando un
nombre tiene la "y", como puede ser Yolanda, me lo separa también.
De todas maneras muchas gracias por tu ayuda.
Juan


On 8 mayo, 15:57, "pepe" <p...@hotmail.com> wrote:
> Puedes separarlo utilizando la opción texto en columnas.
> En una primera pasada separas por punto y coma, tendrás entonces en la


> primera columna el grupo P, en la segunda el D y en la tercera columna el
> grupo M.

> A continuación insertas la columnas necesarias entre la columna del grupo P


> y la del grupo D, seleccionas la columna del grupo P y vuelves a separar

> utilizando la copion texto en columnas. Repites lo mismo con las demás

H�ctor Miguel

unread,
May 11, 2009, 4:31:22 AM5/11/09
to
hola, Juan !

> He estado probando la macro y como soy algo nuevo no la entiendo muy bien.
> Me crea efectivamente un listado en una columna, separando bien por los puntos y comas

> pero no identifica los nombres, me sale en cada celda #�NOMBRE?


> lo que creo que es por que no identifica el nombre en el listado.

> Como te he dicho, soy algo nuevo y se me escapa como funciona la funcion substitute
> por si fuera algun parametro dentro de esa funcion...

es (casi) seguro que la macro la pusiste en un modulo "de clase" (probablemente en el modulo de codigo de "esa" hoja ?)
y NO en un modulo de codigo estandar, que es donde debiera haber quedado (desde vba: menu: insertar / modulo) (???)

prueba nuevamente (incluso) con esta version recortada (pero en un modulo de codigo estandar)...

Sub Separados()
Dim Clave, Texto As String, Grupos, Personas, _
Fila As Integer, g As Byte, p As Byte
Clave = Array("P", "D", "M", "DL")

For Fila = 1 To [a65536].End(xlUp).Row


With Application
Texto = .Substitute(.Substitute(Range("a" & Fila), " y ", ","), " ", "")
End With
Grupos = Split(Texto, ";", , vbTextCompare)
For g = 0 To UBound(Grupos)
Personas = Split(Grupos(g), ",", , vbTextCompare)

p = UBound(Personas) + 1
With Cells(65536, Fila * 2).End(xlUp)

.Offset(1).Resize(p).Value = Application.Transpose(Personas)


.Offset(1, 1).Resize(p).Value = Clave(g)
End With
Next
Next
End Sub

saludos,
hector.


Juan

unread,
May 11, 2009, 4:47:41 AM5/11/09
to
Hola Hector.
Funciona perfecto. Perdona por la pardillez, no estoy muy habituado a
trabajar con macros ni vba, así que metí el código en el primer lugar
que vi libre.
Me has solucionado un problema y ahorrado un montón de curro.
Ahora voy a intentar entender el código, jejeje.
Un saludo y muchísimas gracias.
Juan
0 new messages