Saltar al contenido

Separar Palabras - Con Varios Separadores y Conservar Dichos Separadores


alhxavdpw

Recommended Posts

publicado

Tengo la siguiente macro para separar texto (en este caso el separador es ","), me gustaría agregarle una serie más amplia de separadores y por otra parte conservarlos, es decir que si en este caso la ejecuto tal cual está, las comas logran separan el texto, pero son eliminadas del mismo y yo las quiero conservar.

Gracias, dejo la macro a continuación.

Sub separarPalabras2()
Dim celda As Range       'celda que contiene el texto
Dim i As Integer
Dim n As Integer         'número de palabras encontradas
Dim palabras() As String 'arreglo que almacenará las palabras separadas
Dim separador As String  'separador de cada palabra
Dim texto As String      'almacena el texto a separar
 
    'definir el separador de palabras
    separador = "," 'coma
    
    'Ciclo para recorrer los renglones
    For Each celda In Selection
        texto = celda.Value
        
        'Separación del texto en palabras:
        palabras = Split(texto, separador)
        
        'La función UBound devuelve índice final/mayor del arreglo
        'El índice en el arreglo se inicia con cero
        n = UBound(palabras)
        
        'Ciclo para colocar cada palabra en un renglón diferente
        For i = 0 To n
            celda.Offset(i, 1) = palabras(i)
        Next i
 
    Next celda
End Sub
publicado
Hace 30 minutos , alhxavdpw dijo:

y yo las quiero conservar.

¿Pero dónde las quieres conservar? ¿En cada celda con su palabra :huh:? En el texto inicial no te deben desaparecer

publicado
  'Ciclo para colocar cada palabra en un renglón diferente
        For i = 0 To n
            celda.Offset(i, 1) = palabras(i) & Separador '<------------
        Next i

 

publicado
En 15/10/2017 at 5:24 , Antoni dijo:

¿Pero dónde las quieres conservar? ¿En cada celda con su palabra :huh:? En el texto inicial no te deben desaparecer

Gracias Haplox, Antony.

Si, en cada celda con su palabra o caracteres "separadores", es decir, si lo ejecuto en una celda con ésta respuesta quedaría distribuido en una columna:

Considerando que el separador es la palabra " en "

Si,

cadacelda con su palabra o caracteres "separadores", es decir, si lo ejecuto

una celda con ésta respuesta quedaría distribuido en una columna:

Y yo quisiera que quede así:

Si,

en cada celda con su palabra o caracteres "separadores", es decir, si lo ejecuto

en una celda con ésta respuesta quedaría distribuido en una columna:

 

Por otra parte quiero tener la posibilidad de poner varias palabras "separador"

Nuevamente gracias.

publicado
Hace 6 horas, alhxavdpw dijo:

Por otra parte quiero tener la posibilidad de poner varias palabras "separador"

Para lo primero el código de @Antoni es el que tienes que usar.

Para lo segundo, no podrás hacerlo directamente. La función Split solo admite un separador, así que lo tendrías que implementar varias veces (tantas como separadores quieras) en tu código.

Pero ten en cuenta que no puedes poner distintos separadores en un mismo texto y aplicarles Split, obtendrás cosas extrañas. Como ejemplo:

hola,hola1;hola2;hola3-hola4

¿Cómo lo separarías? ¿Con qué separador? :wacko:. Si usas el ";" obtendrías:

  1. hola,hola1
  2. hola2
  3. hola3-hola4

¿Ves por dónde voy...? ;)

publicado

Hola, viendo el tema puedo dejar una opción que aplica con varios separadores:

Sub separar()
Dim separador As Variant
Dim strArray() As String
 
separador = Array(",", ";", "-")
 
texto = "hola,hola1;hola2;hola3-hola4"
 
 For i = LBound(separador) To UBound(separador)
 
 texto = Replace(texto, separador(i), Chr(10))
 
 Next

strArray = Split(texto, Chr(10))

Range("A1").Resize(UBound(strArray) + 1) = Application.Transpose(strArray)
  
End Sub

Este código coloca las palabras ya separadas horizontalmente desde la celda A1 hasta la cantidad de palabras que separe.

Saludos

publicado
Hace 5 horas, Riddle dijo:

Hola, viendo el tema puedo dejar una opción que aplica con varios separadores:

muy bueno @Riddle :lol:. Nunca digas jamás con VBA...

publicado
Hace 28 minutos , Riddle dijo:

@alhxavdpw te sirvió la ayuda brindada ?

Gracias Riddle, en el caso del aporte con que me apoyas, el resultado es excelente por que ya reconoce nuevos separadores, la cuestión aquí es que quiero separar conservando el separador en la celda, es decír que al usarlo en un texto no omita los signos de puntuación.

Que el resultado al aplicarla quedara así:

hola,
hola1;
hola2;
hola3-
hola4

Por otra parte,  ¿como podría ejecutarlo directo de la celda o celdas?

Nuevamente, gracias.

publicado

Aprovechándome de parte del trabajo de Riddle:

Sub separar()
Dim separador As Variant
Dim strArray() As String
'..
separador = Array(",", ";", "-")
texto = "hola,hola1;hola2;hola3-hola4 "
Range("A1").Select
'--
Bucle:
   For t = 1 To Len(texto)
      For i = LBound(separador) To UBound(separador)
         If Mid(texto, t, 1) = separador(i) Then
            ActiveCell = Left(texto, t)
            texto = Mid(texto, t + 1)
            ActiveCell.Offset(1, 0).Select
            GoTo Bucle
         End If
      Next
   Next
ActiveCell = texto
End Sub

Saludos a todos

 

En cuanto a tu otro requerimiento, sube un archivo y señala que celdas son y donde quieres el resultado.

 

 

.

publicado

Hola, con una pequeña modificación mantendrá los separadores:

Sub separar()
Dim separador As Variant
Dim strArray() As String
 
separador = Array(",", ";", "-")
texto = "hola,hola1;hola2;hola3-hola4"
 
 For i = LBound(separador) To UBound(separador)
 
 texto = Replace(texto, separador(i), separador(i) & Chr(10)) '<<<<<<< 
 
 Next

strArray = Split(texto, Chr(10))

Range("A1").Resize(UBound(strArray) + 1) = Application.Transpose(strArray)
  
End Sub

Y para ejecutarlo desde las celdas solo debes modificar la linea texto = "hola,hola1;hola2;hola3-hola4" y hacer referencia a una celda texto = Range("B1").

Saludos.

publicado
Hace 44 minutos , Riddle dijo:

@alhxavdpw, por favor no abandones tus temas e indica si podemos dar el mismo como solucionado.

Saludos.

Otro mas a la lista negra.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.