Separar texto con macro

Como puedo separar estos textos con una macro para que me separe en a1 por en b1 13 en c1 12 en d1 13 en e1 13 en f1 12
es decir que me identifique el espacio y que cada texto después del espacio lo separe
a1 = por 13 12 13 13 12
Esto considerando que los textos varían
Ejemplo
B1 = 4 3 4 3 3 4 y no cuentan con los mismos caracteres después de un espacio

4 respuestas

Respuesta
1
Si te he entendido bien, lo que quieres es separar el texto en palabras (lo que está entre espacios).
Para ello hay que recurrir a VBA, prueba esta macro:
Sub SepararTexto()
Dim sString As String, sPalabra As String
Dim iPos As Integer
sString = Range("A1").Value
Do While Len(sString) > 0
iPos = InStr(sString, " ")
If iPos > 0 Then
sPalabra = Left(sString, iPos - 1)
sString = Mid(sString, iPos + 1)
Else
sPalabra = sString
sString = ""
End If
'Aquí hacemos lo que sea con sPalabra
Loop
End Sub
Si tienes algún problema pregúntame.
Inserte el código en un modulo y lo active y no pasa nada con la celda a1
Me gustaría más aplicar esta macro en una columna ejemplo columna A cada texto después de un espacio en las columnas A B C DE E Y F
COLUMNA A ES =
x 12 11 9 10 9
x x 7 6 5 5
5 7 7 6 5 5
5 4 2 2 5 x
5 x 7 6 5 5
5 7 7 6 x 5
x 12 14 14 14 12
5 7 x 6 5 5
5 4 2 2 2 5
x 12 14 x 14 12
5 4 2 2 x 5
x 12 x 9 10 9
El código que te envié sólo separa palabras pero no hace nada, tiene un comentario donde indica en qué lugar puedes hacer lo que quieras con la palabra.
Ahora que creo que ya sé lo que quieres, te envío código completo:
SplitTexto separa en palabras el texto de una celda (rgCeldaTxt) y las coloca en las columnas siguientes.
SepararPalabras (es el que tienes que ejecutar) por cada celda del rango que le definas (A1:A12), llama a SplitTexto.
Sub SepararPalabras()
Dim rgColA As Range, i As Long
Set rgColA = Range("A1:A12")
Dim rg As Range
For Each rg In rgColA.Cells
SplitTexto rg
Next
End Sub
Sub SplitTexto(rgCeldaTxt As Range)
Dim sString As String, sPalabra As String
Dim iPos As Long, iColDestino As Long
iColDestino = rgCeldaTxt.Column + 1
sString = rgCeldaTxt.Value
Do While Len(sString) > 0
'Separa palabra
iPos = InStr(sString, " ")
If iPos > 0 Then
sPalabra = Left(sString, iPos - 1)
sString = Mid(sString, iPos + 1)
Else
sPalabra = sString
sString = ""
End If
'Coloca en otra columna
Cells(rgCeldaTxt.Row, iColDestino).Value = sPalabra
iColDestino = iColDestino + 1
Loop
End Sub
Respuesta
1
Para ello no necesitas construir un macro. Dentro del menu texto hay una opción denominada Texto en columnas que te hace ese trabajo. Usala, marcando la opción de "Delimitados", u marca la opción "espacios" y esta listo
Disculpa desconocía esta opción
Gracias
No. Creo que el problema es que debes estar utilizando la opción de "ancho fijo". Yo o estoy haciendo en mi maquina y sale correctamente.
TC
Respuesta
1
Perdón la demora, pero estaba de vacaciones. Prueba esto:
Sub Macro()
CADENA = ActiveCell.Value
LARGO = Len(CADENA)
For I = 1 To LARGO
If Left(CADENA, 1) = " " Then
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = CELDA
CELDA = ""
CADENA = Mid(CADENA, 2, LARGO)
Else
CELDA = CELDA & Left(CADENA, 1)
CADENA = Mid(CADENA, 2, LARGO)
End If
Next I
End Sub
Respuesta
1
Te contesto para que sepas que tengo tu pregunta, esta semana te envío la respuesta.
Ok
Disculpa la demora, pero con macros me ha quedado muy difícil, creo que se puede sacar con fórmulas.
Hallar
Izquierda
Largo
Extraer
Estoy trabajando en ellas, por lo pronto, si quieres conocer más de excel puedes registrarte en www.exceluciones.com, es gratis.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas