Macro para separar números y texto de longitud variable

Solo consultas sobre macros y código VBA Excel.

Reglas del Foro
1. Antes de hacer tu pregunta intenta con el buscador de este foro (muchas preguntas ya fueron respondidas antes!)
2. Si haces una nueva pregunta, es muy recomendable que adjuntes el ejemplo Excel para poder comprenderla mejor!
3. Realiza tu pregunta de forma clara, explicando bien cada paso de lo que haces y tendrás más probabilidad de respuesta!
Compartir en:
     

Macro para separar números y texto de longitud variable

Notapor viru88 » 08 Abr 2011 23:28

Necesito una macro que, a partir del contenido de una celda que contiene números y texto, me separe los números y texto en columnas.

Hay números de longitud fija y otros de longitud variable.

El texto, en cambio es de longitud variable

Es importante que se conserven los ceros a la izquierda como es el caso del número 0029750

El contenido de cada celda sería el siguiente:

Imagen

(Nótese que las "columnas" 1, 2 y 3 se omiten en caso de repetirse en el renglón siguiente. Es decir que se pone una sola vez ambos códigos y descripción del artículo)

Separado en columnas debería quedar algo así:

Imagen

La columna 1 es de longitud fija, mientras que la columna 2 puede variar en longitud

La columna 3, obviamente por ser texto, es de longitud variable.

Las columnas 4 y 6 son de longitud fija.

Las columnas 5 y 7 son fechas.

Y las columnas 8 y 9 son de longitud variable pero siempre son números (el "." es el separador decimal. Puede ser convertido a ",").

La columna 10 debería conservar el número y las letras en una sola columna

Desde ya muchas gracias. Saludos,
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
viru88
Miembro Frecuente
Miembro Frecuente
 
Registrado: 08 Abr 2011 23:22

Re: Macro para separar números y texto de longitud variable

Notapor Antoni » 09 Abr 2011 04:41

Hola:

Sube un archivo de ejemplo con ejemplos (100 registros mas o menos).

Saludos.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Avatar de Usuario
Antoni
Miembro Frecuente
Miembro Frecuente
 
Registrado: 22 Dic 2009 04:58
Ubicación: GALICIA (ESPAÑA)

Re: Macro para separar números y texto de longitud variable

Notapor sailepaty » 09 Abr 2011 11:11

Utiliza la opción Texto a Columnas.

Saludos
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
sailepaty
Miembro Frecuente
Miembro Frecuente
 
Registrado: 27 Oct 2004 12:31
Ubicación: Houston, TX

Re: Macro para separar números y texto de longitud variable

Notapor viru88 » 09 Abr 2011 19:20

sailepaty escribió:Utiliza la opción Texto a Columnas.

Saludos

No me sirve esa opción porque el texto tiene espacios, por lo tanto no tengo un delimitador
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
viru88
Miembro Frecuente
Miembro Frecuente
 
Registrado: 08 Abr 2011 23:22

Re: Macro para separar números y texto de longitud variable

Notapor viru88 » 09 Abr 2011 19:22

Corrección: la primera columna puede variar de longitud porque a veces se le agrega un guión y un caracter al final

Acá les dejo un ejemplo:

ejemplo.xls
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
viru88
Miembro Frecuente
Miembro Frecuente
 
Registrado: 08 Abr 2011 23:22

Re: Macro para separar números y texto de longitud variable

Notapor sailepaty » 09 Abr 2011 20:26

viru88 escribió:No me sirve esa opción porque el texto tiene espacios, por lo tanto no tengo un delimitador


El espacio siempre ha sido un delimitador..... Seria bueno revisar antes de descartar.

Saludos
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
sailepaty
Miembro Frecuente
Miembro Frecuente
 
Registrado: 27 Oct 2004 12:31
Ubicación: Houston, TX

Re: Macro para separar números y texto de longitud variable

Notapor viru88 » 09 Abr 2011 20:38

sailepaty escribió:
viru88 escribió:No me sirve esa opción porque el texto tiene espacios, por lo tanto no tengo un delimitador


El espacio siempre ha sido un delimitador..... Seria bueno revisar antes de descartar.

Saludos

No me entendiste lo que te quise decir

La descripción contiene espacios. Ergo, si utilizo el espacio como delimitador, la descripción va a quedar dividida en 2 ó 3 columnas dependiendo del artículo

Saludos,
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
viru88
Miembro Frecuente
Miembro Frecuente
 
Registrado: 08 Abr 2011 23:22

Re: Macro para separar números y texto de longitud variable

Notapor sailepaty » 09 Abr 2011 21:27

Haber si ahora entendi,

Código: Seleccionar todo
Sub SplitText()
    Dim rText       As Range
    Dim sFormula    As String
   
    Set rText = Range("B1:B" & Cells(Rows.Count, "A").End(xlUp).Row)

    sFormula = "=IF(RIGHT(RC[-1],3)="" NF""," & _
               "SUBSTITUTE(LEFT(RC[-1],FIND(""/"",RC[-1])-11),"" "",""^"")" & _
               "&"" ""&MID(RC[-1],FIND(""/"",RC[-1])-9,500),"""")"
   
    With rText
        .FormulaR1C1 = sFormula
        .Value = .Value
       
        .TextToColumns , DataType:=xlDelimited, _
         TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, _
         Space:=True, FieldInfo:=Array(Array(1, 1), Array(2, 2), _
         Array(3, 4), Array(4, 1), Array(5, 4), Array(6, 1), _
         Array(7, 1), Array(8, 1), Array(9, 1))

        .Replace What:="^", Replacement:=" "
   
    End With
    Set rText = Nothing
End Sub


Saludos
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
sailepaty
Miembro Frecuente
Miembro Frecuente
 
Registrado: 27 Oct 2004 12:31
Ubicación: Houston, TX

Re: Macro para separar números y texto de longitud variable

Notapor viru88 » 09 Abr 2011 22:05

Gracias sailepaty por tu tiempo. Está bastante encaminado. Te digo lo que faltaría:

Imagen

En la primera columna quedan los 2 códigos y la descripción. Éstos deberían quedar en 3 columnas diferentes como está marcado en rojo en la imagen (Primer código | Segundo código | Descripción)

En la columna número 4 al número 029723 le falta un cero. El número es 0029723

Y finalmente en la última columna, el número y las letras deberían quedar en una misma columna. Es decir (para el caso del ítem de la imagen) debería quedar 112.32 NF en una misma columna.

Gracias nuevamente. Saludos,
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
viru88
Miembro Frecuente
Miembro Frecuente
 
Registrado: 08 Abr 2011 23:22

Re: Macro para separar números y texto de longitud variable

Notapor sailepaty » 10 Abr 2011 00:04

Haber así,

Código: Seleccionar todo
Sub SplitText()
    Dim rText       As Range
    Dim sFormula1   As String
    Dim sFormula2   As String
    Dim sFormula3   As String
   
    Set rText = Range("B1:B" & Cells(Rows.Count, "A").End(xlUp).Row)

    sFormula1 = "=IF(RIGHT(RC[-1],3)="" NF""," & _
               "SUBSTITUTE(LEFT(RC[-1],FIND(""/"",RC[-1])-11),"" "",""^"")" & _
               "&"" ""&MID(RC[-1],FIND(""/"",RC[-1])-10,500),"""")"
   
    sFormula2 = "=REPLACE(SUBSTITUTE(SUBSTITUTE(RC[-1],""^"","" "",1)" & _
                ",""^"","" "",1),LEN(RC[-1])-2,1,""^"")"
   
    sFormula3 = "=IF(ISERR(RC[-1]),""""," & _
                "IF(LEFT(RC[-1],1)="" "","" ^ ^ ""&RC[-1],RC[-1]))"
   
    With rText
       
        .FormulaR1C1 = "=TRIM(RC[-1])"
        .Offset(0, -1).Value = .Value
       
        .FormulaR1C1 = sFormula1
        .Value = .Value
       
        .Offset(0, 1).FormulaR1C1 = sFormula2
        .Value = .Offset(0, 1).Value
        .Offset(0, 1).ClearContents

        .Offset(0, 1).FormulaR1C1 = sFormula3
        .Value = .Offset(0, 1).Value
        .Offset(0, 1).ClearContents

        .TextToColumns , DataType:=xlDelimited, _
         TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, _
         Space:=True, FieldInfo:=Array( _
         Array(1, 1), Array(2, 1), Array(3, 1), _
         Array(4, 2), Array(5, 4), Array(6, 1), Array(7, 4), _
         Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1))
   
    End With
   
    Cells.Replace What:="^", Replacement:=" "
    Set rText = Nothing

End Sub


Saludos
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
sailepaty
Miembro Frecuente
Miembro Frecuente
 
Registrado: 27 Oct 2004 12:31
Ubicación: Houston, TX

Re: Macro para separar números y texto de longitud variable

Notapor viru88 » 10 Abr 2011 00:48

Muchísimas gracias sailepaty

Te pido, si no es mucha molestia, un par de cositas más

Imagen

Borrar la celda con los datos adonde están todos juntos, de manera que no queden duplicados los datos. En la imagen serían las celdas A15,A16,A17,...

Abajo de "Total Articulo", separar los números en 2 columnas (27.00|253.80). También sería bueno reemplazar los separadores decimales "." por separadores decimales ","

Más o menos cada 64 celdas está el fin de una página y el comienzo de la siguiente como lo que está recuadrado en azul. Sería bueno poder borrarlo a eso.

Lo que está recuadrado en rojo sería bueno que quedara separado en 2 columnas. En una columna los caracteres hasta los ":" y en la segunda columna lo que resta. Por ejemplo:
(Cliente: |55000 - LA TERMINAL UNO S.A.)
(Familia Comercial:|0 - Sin Familia Comercial)

Lo recuadrado en verde debería quedar separado en columnas de la siguiente manera:
(Item|Nro Cliente|Descripción|Remito|Fch Rem|Nro. Fact.|Fch. Fact.|Cantidad|P. Neto|Total)


Desde ya muchas gracias por tu tiempo y tu dedicación

Saludos,
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
viru88
Miembro Frecuente
Miembro Frecuente
 
Registrado: 08 Abr 2011 23:22

Re: Macro para separar números y texto de longitud variable

Notapor sailepaty » 10 Abr 2011 01:28

Antes de proseguir me agradaría me contestaras unas preguntas.

1.- Que tanto crees saber de formulas?
2.- Que tanto crees saber de VBA?
3.- Que tanto has entendido de la solución que te propuse?
4.- Que tanto crees poder modificar el resto por ti solo? Puede ser con formulas o VBA.

Saludos
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
sailepaty
Miembro Frecuente
Miembro Frecuente
 
Registrado: 27 Oct 2004 12:31
Ubicación: Houston, TX

Re: Macro para separar números y texto de longitud variable

Notapor viru88 » 10 Abr 2011 01:46

He estudiado programación en la facultad en lenguaje C
Sé algo de programación pero casi nada de VBA
Más o menos voy deduciendo lo que hace cada función, pero varias cosas no tengo ni idea
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
viru88
Miembro Frecuente
Miembro Frecuente
 
Registrado: 08 Abr 2011 23:22

Re: Macro para separar números y texto de longitud variable

Notapor sailepaty » 10 Abr 2011 12:31

Hola Viru88,

Me imagino que tampoco tienes mucha experiencia en los foros de ayuda. Para mi el que pregunta debe de investigar, intentar, preguntar, analizar, modificar y volver a preguntar hasta conseguir el objetivo buscado. Por otra parte el que contesta debe de ayudar en ese proceso pero en términos generales no realizar proyectos completos y mucho menos a la medida.

Si deseas que te continúe ayudando debes de mostrar avances por tu parte y no solo solicitar que se efectué la tarea completa. Claro siempre existe la posibilidad de que aparezca otro forista que con gusto te complete el proyecto.


Saludos
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
sailepaty
Miembro Frecuente
Miembro Frecuente
 
Registrado: 27 Oct 2004 12:31
Ubicación: Houston, TX

Re: Macro para separar números y texto de longitud variable

Notapor viru88 » 10 Abr 2011 21:40

Tenés razón sailepaty. Lo voy a analizar a ver si lo logro. Cualquier cosa te pregunto

Muchas gracias. Saludos,
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
viru88
Miembro Frecuente
Miembro Frecuente
 
Registrado: 08 Abr 2011 23:22

Siguiente

Compartir en:
     

  • Anuncio
Manual Excel avanzado

Volver a Macros

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados