Macro separar datos desde guiones y pegar en otras columnas

Es un gusto volver a saludarlos!

Si es posible, por favor su ayuda:

Tengo una macro que separa datos desde el ultimo guión ubicado en la columna A y pega cada dato en otras 2 columnas adyacentes; columna B y C.
La macro funciona perfecto, pero tengo una excepción.
Necesito que cuando existan datos (columna A) con guión al final (Ej: Columna A: YYYY-ZZZ-), la macro separe desde el guión anterior y no desde el último (Ej: Columna B: YYYY; Columna C: ZZZ-).
La macro es la siguiente:

Sub separaXguion()
'x Elsamatilde
'recorre la col A, desde fila 2 hasta encontrar una celda vacía
Range("A2").Select
While ActiveCell <> ""
'ubico el guión recorriendo a izquierda
For i = Len(ActiveCell) To 1 Step -1
If Mid(ActiveCell, i, 1) = "-" Then
ubico = i
Exit For
End If
Next i
If ubico > 1 Then
ActiveCell.Offset(0, 1) = Left(ActiveCell, ubico - 1)
ActiveCell.Offset(0, 2) = Right(ActiveCell, Len(ActiveCell) - ubico)
End If
ActiveCell.Offset(1, 0).Select

Wend
End Sub

Así debe quedar:

1 respuesta

Respuesta
2

En tu ejemplo tienes esto:

ESSD 21.4 y lo separas en ESSD y 21.4, pero ahí no hay guión, ¿quieres qué la macro separe por guión o por blanco?

Hola Dante! También tiene un guion, pero no se aprecia bien por la calidad de la foto.

H o l a:

Te anexo la macro. También, en caso de que no exista el guión, te va a poner el dato en la columna B

Sub SepararDatos()
'Por.Dante Amor
    For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
        dato = Cells(i, "A")
        If Right(dato, 1) = "-" Then dato = Left(dato, Len(dato) - 1)
        n = InStrRev(dato, "-")
        If n > 0 Then
            Cells(i, "B") = Mid(dato, 1, n - 1)
            Cells(i, "C") = Mid(Cells(i, "A"), n + 1)
        Else
            Cells(i, "B") = dato
        End If
    Next
End Sub

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas