Excel - Macro para concatenar

Asked By J Romero on 29-Mar-12 10:20 AM
espero me puedan ayudar, necesito hacer lo siguiente:

aplicar la formula de concatenar dependiendo de una columna, es decir,
yo tengo 5 clasificaciones en la columna A, tiene que identificar la
celda A5 y viendo la clasificacion, concatenara de acuerdo a un orden
establecido en la macro.

Esta es una de los ordenes de concatenacion:



saludos, y gracias


Pedro F. Pardo replied to J Romero on 29-Mar-12 10:41 AM
El jueves 29 de marzo de 2012 15:20:05 UTC+1, J Romero  escribi=F3:

Lo siento, no entiendo tu pregunta.
A ver, si rellenamos las celdas con estos datos...

A   =A6   B   =A6   C   =A6   D   =A6
CeldaA1=A6CeldaB1=A6CeldaC1=A6CeldaD1=A6
CeldaA2=A6CeldaB2=A6CeldaC2=A6CeldaD2=A6
CeldaA3=A6CeldaB3=A6CeldaC3=A6CeldaD3=A6
CeldaA4=A6CeldaB4=A6CeldaC4=A6CeldaD4=A6
CeldaA5=A6CeldaB5=A6CeldaC5=A6CeldaD5=A6


Al aplicar esta f=F3rmula en la celda E1, por ejemplo:
=3DCONCATENATE(RC[-4],"""",RC[-3],"""",RC[-1])

Obtendr=EDamos esto: CeldaA1"CeldaB1"CeldaD1

=BFQu=E9 hay exactamente en la celda A5?, =BFc=F3mo son los distintos orden=
es?
Puedes poner un ejemplo concreto con datos y definir los tipos de orden que=
quieres aplicar.

Saludos
J Romero replied to Pedro F. Pardo on 03-Apr-12 09:58 AM
enes?
ue quieres aplicar.

Gracias por responder,

me explico mejor,


A                  B                 C
D                         E                       F
1 UNO                                   NOMBRE
APELLIDO           DIRECCION        NOMBRE APELLIDO DIRECCION
2 DOS                TELEFONO
DIRECCION                                   DIRECCION TELEFONO
4 TRES                                  NOMBRE
APELLIDO            DIRECCION         DIRECCION APELLIDO NOMBRE
5 CUATRO
6 CINCO

En la columna F tendria que ir la formula de esta forma:
=3Dmacroorden(A1)

Entonces, lo que haria la macro seria primero identificar si es UNO,
DOS, TRES o CUATRO.

y lo ordenaria con el orden concatenado siguiente:

UNO =3D concatenado( C1, D1, E1)
DOS =3D concatenado(D2, B2)
TRES =3D concatenado(E3,D3;C3)

yo tengo una macro que hace algo similar, pero no la he podido
adaptar, que uso las funciones

function
const
select case
case

Gracias
Pedro F. Pardo replied to J Romero on 03-Apr-12 10:31 AM
El martes 3 de abril de 2012 14:58:00 UTC+1, J Romero  escribi=F3:
,
rdenes?
que quieres aplicar.


Para el ejemplo que pones no hace falta una macro, bastar=EDa con escribir =
esta f=F3rmula en F:

=3DSI(A2=3D"UNO",C2&" "&D2&" "&E2,SI(A2=3D"DOS",D2&" "&B2,SI(A2=3D"TRES",E2=
&" "&D2&" "&C2,"[ORDEN NO ENCOTRADO]")))


Si tienes cuatro concatenaciones distintas puedes utilizar esta otra versi=
=F3n cambiando donde dice <concatenacion para cuatro> por la concatenaci=F3=
n apropiada.

f=EDjate que en lugar de utilizar la f=F3rmula: CONCATENAR(A2,B2)
he utilizado esta otra forma: A1 & " " & B1
Y as=ED de paso meto un espacio en medio para separar las palabras.
Pero en lugar de C2&" "&D2&" "&E2
puedes escribir: CONCATENAR(C2,D2,E2)
o ya puestos, CONCATENAR(C2, " ", D2, " ", E2)


=3DSI(A2=3D"UNO",C2&" "&D2&" "&E2,SI(A2=3D"DOS",D2&" "&B2,SI(A2=3D"TRES",E2=
&" "&D2&" "&C2,SI(A2=3D"CUATRO",<concatenacion para cuatro>,"[ORDEN NO ENCO=
TRADO]")))


=BFTe sirve esta versi=F3n? Encadenando los SI se puede llegar hasta una pr=
ofundidad de 256 (en Excel 2007) y creo recordar que hasta 7 en Office 2003

Si tienes m=E1s de 7 tipos distintos de concatenaciones y est=E1s utilizand=
o Excel 2003 entonces s=ED que necesitas hacer una macro.

Saludos
J Romero replied to Pedro F. Pardo on 03-Apr-12 01:23 PM
ir,
a
en
ordenes?
en que quieres aplicar.
=A0 =A0 =A0 C
=A0 =A0 =A0 =A0 =A0 =A0 F
=A0 NOMBRE
IRECCION
=A0 =A0 DIRECCION TELEFONO
=A0NOMBRE
LLIDO NOMBRE
r esta f=F3rmula en F:
E2&" "&D2&" "&C2,"[ORDEN NO ENCOTRADO]")))
i=F3n cambiando donde dice <concatenacion para cuatro> por la concatenaci=
=F3n apropiada.
E2&" "&D2&" "&C2,SI(A2=3D"CUATRO",<concatenacion para cuatro>,"[ORDEN NO EN=
COTRADO]")))
profundidad de 256 (en Excel 2007) y creo recordar que hasta 7 en Office 20=
03
ndo Excel 2003 entonces s=ED que necesitas hacer una macro.



gracias por la respuesta,

Usar la funcion del "si" ya la habia practicado, pero tengo 10
niveles, osea, 10 clasificaciones distintas, por eso requeria de una
macro para evitar confusiones, si fuesen 2 o 3 niveles no habria
problemas, pero en mi caso tener en una linea 10 niveles seria muy
extenso y confuso.

Tienes alguna idea para la macro?

gracias
Pedro F. Pardo replied to J Romero on 10-Apr-12 05:56 AM
El martes, 3 de abril de 2012 18:23:27 UTC+1, J Romero  escribi=F3:
=F3:
ecir,
la
rden
os ordenes?
rden que quieres aplicar.
=A0 =A0 =A0 C
=A0 =A0 =A0 =A0 =A0 =A0 =A0 F
=A0 NOMBRE
DIRECCION
=A0 =A0 DIRECCION TELEFONO
=A0 =A0NOMBRE
PELLIDO NOMBRE
bir esta f=F3rmula en F:
rsi=F3n cambiando donde dice <concatenacion para cuatro> por la concatenaci=
=F3n apropiada.
ENCOTRADO]")))
a profundidad de 256 (en Excel 2007) y creo recordar que hasta 7 en Office =
2003
zando Excel 2003 entonces s=ED que necesitas hacer una macro.


Hola, siento el retraso en contestar,
aq
Pedro F. Pardo replied to J Romero on 10-Apr-12 06:07 AM
El martes, 3 de abril de 2012 18:23:27 UTC+1, J Romero  escribi=F3:
=F3:
ecir,
la
rden
os ordenes?
rden que quieres aplicar.
=A0 =A0 =A0 C
=A0 =A0 =A0 =A0 =A0 =A0 =A0 F
=A0 NOMBRE
DIRECCION
=A0 =A0 DIRECCION TELEFONO
=A0 =A0NOMBRE
PELLIDO NOMBRE
bir esta f=F3rmula en F:
rsi=F3n cambiando donde dice <concatenacion para cuatro> por la concatenaci=
=F3n apropiada.
ENCOTRADO]")))
a profundidad de 256 (en Excel 2007) y creo recordar que hasta 7 en Office =
2003
zando Excel 2003 entonces s=ED que necesitas hacer una macro.

Dec=EDa... que siento el retraso en contestar :-) y que aqu=ED copio una ma=
cro que creo que puede ser lo que buscas.

Function ordenar_especial(rango As Range)
fila =3D rango.Row
If UCase(rango.Value) =3D "UNO" Then
ordenar_especial =3D "aqui va la formula de concatenaci=F3n UNO=
ElseIf UCase(rango.Value) =3D "DOS" Then
ordenar_especial =3D "aqui va la formula de concatenaci=F3n DOS=
ElseIf UCase(rango.Value) =3D "TRES" Then
ordenar_especial =3D "aqui va la formula de concatenaci=F3n TRE=
S"
ElseIf UCase(rango.Value) =3D "CUATRO" Then
ordenar_especial =3D "aqui va la formula de concatenaci=F3n CUA=
TRO"
ElseIf UCase(rango.Value) =3D "CINCO" Then
ordenar_especial =3D "aqui va la formula de concatenaci=F3n CIN=
CO"
=20
ElseIf UCase(rango.Value) =3D "SEIS" Then
ordenar_especial =3D "aqui va la formula de concatenaci=F3n SIE=
S"

'...
'... ... copia y pega estas dos =FAltimas filas ElseIF tantas veces
'... ... como tipos de concatenaci=F3n tengas.



Else
ordenar_especial =3D "No encontrado"
End If
End Function



Y sustituyes donde pone "aqui va la formula de concatenaci=F3n UNO"

Y escribes algo as=ED:

Esto concatenar=EDa la columna B, luego la C y luego la D>>> BCD
Range("B" & fila).Value & Range("C" & fila).Value & Range("D" & fila).Value

Cambia el simplemente el orden de las letras en esa formula para alterar la=
concatenaci=F3n.

Si quieres meter espacios en medio...
Hazlo as=ED:
Range("B" & fila).Value & " " & Range("C" & fila).Value

Esto inserta un espacio entre la columna B y la C >>>   B C

;-)

para llamar la f=F3rmula escribe:  =3Dordenar_especial(A2)

=BFTe sirve?

Saludos,


El martes, 3 de abril de 2012 18:23:27 UTC+1, J Romero  escribi=F3:
=F3:
ecir,
la
rden
os ordenes?
rden que quieres aplicar.
=A0 =A0 =A0 C
=A0 =A0 =A0 =A0 =A0 =A0 =A0 F
=A0 NOMBRE
DIRECCION
=A0 =A0 DIRECCION TELEFONO
=A0 =A0NOMBRE
PELLIDO NOMBRE
bir esta f=F3rmula en F:
rsi=F3n cambiando donde dice <concatenacion para cuatro> por la concatenaci=
=F3n apropiada.
ENCOTRADO]")))
a profundidad de 256 (en Excel 2007) y creo recordar que hasta 7 en Office =
2003
zando Excel 2003 entonces s=ED que necesitas hacer una macro.
J Romero replied to Pedro F. Pardo on 16-Apr-12 05:16 PM
=F3:
decir,
ar la
orden
ntos ordenes?
orden que quieres aplicar.
=A0 =A0 =A0 =A0 C
=A0 =A0 =A0 =A0 =A0 =A0 =A0 F
=A0 =A0 NOMBRE
DO DIRECCION
=A0 =A0 =A0 DIRECCION TELEFONO
=A0 =A0NOMBRE
APELLIDO NOMBRE
,
ribir esta f=F3rmula en F:
ES",E2&" "&D2&" "&C2,"[ORDEN NO ENCOTRADO]")))
versi=F3n cambiando donde dice <concatenacion para cuatro> por la concatena=
ci=F3n apropiada.
ES",E2&" "&D2&" "&C2,SI(A2=3D"CUATRO",<concatenacion para cuatro>,"[ORDEN N=
O ENCOTRADO]")))
una profundidad de 256 (en Excel 2007) y creo recordar que hasta 7 en Offic=
e 2003
lizando Excel 2003 entonces s=ED que necesitas hacer una macro.
macro que creo que puede ser lo que buscas.
tenaci=F3n UNO"
tenaci=F3n DOS"
tenaci=F3n TRES"
tenaci=F3n CUATRO"
tenaci=F3n CINCO"
tenaci=F3n SIES"
es
ue
la concatenaci=F3n.
=F3:
decir,
ar la
orden
ntos ordenes?
orden que quieres aplicar.
=A0 =A0 =A0 =A0 C
=A0 =A0 =A0 =A0 =A0 =A0 =A0 F
=A0 =A0 NOMBRE
DO DIRECCION
=A0 =A0 =A0 DIRECCION TELEFONO
=A0 =A0NOMBRE
APELLIDO NOMBRE
,
ribir esta f=F3rmula en F:
ES",E2&" "&D2&" "&C2,"[ORDEN NO ENCOTRADO]")))
versi=F3n cambiando donde dice <concatenacion para cuatro> por la concatena=
ci=F3n apropiada.

Hola Pedro,

Recien veo la respuesta, muchas gracias, funciono perfecto y era lo
que necesitaba, me has solucionado y ayudado mucho.

Gracias