Extraer un número entre símbolos (VBA)

Tengo una columna de Excel en la que automáticamente se rellenan las celdas correspondientes con una codificación desde un programa externo. Necesito que se sustituya en cada celda ese valor por un número que lo compone internamente. Me explico con un ejemplo:

SG-ED/50.1 es el código que se rellena automáticamente. El número que necesito es 50, entre "/" y ".".

Cuando en una celda se rellene "SG-ED/50.1", se sustituya automáticamente por "50".

1 Respuesta

Respuesta
4

Si tienes una macro que rellena datos incluyendo esa columna deberás agregar y adaptar el código que se encuentre entre el While... Wend. (O me consultas)

Si no puedes agregar código en ese proceso, necesitarás correr la siguiente macro que recorrerá la col donde se encuentren estos textos haciendo el reemplazo. En mi ejemplo consideré col R a partir de fila 2.

Sub reemplazaNro()
'x Elsamatilde
'se recorre la col R desde fila 2 hasta el fin de datos
X = Range("R" & Rows.Count).End(xlUp).Row
[R2].Select
While ActiveCell.Row <= X
'se guarda la ubicación de la barra
    ubica1 = InStr(1, ActiveCell, "/")
    If ubica1 > 0 Then
        'si se encontró la barra se guarda la ubicación del punto
        ubica2 = InStr(ubica1, ActiveCell, ".")
        If ubica2 > 0 Then
            'si hay punto se deja el texto entre los 2 signos
            ActiveCell = Mid(ActiveCell, ubica1 + 1, ubica2 - ubica1)
        Else
            'sino se deja el texto desde la barra hasta el final
            ActiveCell = Mid(ActiveCell, ubica1 + 1, Len(ActiveCell) - ubica1)
        End If
    End If
    'se pasa a la fila siguiente
    ActiveCell.Offset(1, 0).Select
Wend
End Sub

En la imagen se observa el antes y después del proceso.

Sdos y no olvides valorar la respuesta si el tema queda resuelto. Sino comenta.

Las aclaraciones debes dejarlas aquí mismo, no entre los comentarios.

'... No me había dado cuenta que algún número antes del punto puede llevar una letra. Por ejemplo, SG-ED/34A.1....'

Qué pena que no dejaste un ejemplo así. Fijate cuántos ejemplos imaginé pero no tenía noticias de que también pudieran ser letras.

'... ¿Se lance directamente la macro según se abra Excel? ...

Para que se lance la macro ni bien se abra Excel necesito saber de qué hoja se trata. Y ya que estoy por ajustar la macro indicame también en qué fila/columna comienzan tus datos.

PD) Tenés 2 usuarios aquí. Respondeme sobre esta misma consulta, no en los comentarios.

Sdos!

He accedido sin querer con otro mail, aunque no tengo cuenta asociada. Perdona.

La casilla que comienzan los datos es la D6.

Gracias!

Ajusta la instrucción que se encuentra en negrita:

If ubica2 > 0 Then
'si hay punto se deja el texto entre los 2 signos
       ActiveCell = Val(Mid(ActiveCell, ubica1 + 1, ubica2 - ubica1))
Else

Si se trata de ejecutar al abrir el Excel podrías llamarla desde el evento Open del libro. Para eso, en el Editor selecciona el objeto ThisWorkbook y allí copiá el siguiente código ajustando el nombre de tu hoja:

La macro completa con el agregado de la hoja y el cambio de ubicación de datos quedaría así:

Sub reemplazaNro()
'x Elsamatilde
'se recorre la col D desde fila 6 hasta el fin de datos
Sheets("Hoja1").Select     'ajustar nbre de hoja
X = Range("D" & Rows.Count).End(xlUp).Row
[D6].Select
While ActiveCell.Row <= X
'se guarda la ubicación de la barra
    ubica1 = InStr(1, ActiveCell, "/")
    If ubica1 > 0 Then
        'si se encontró la barra se guarda la ubicación del punto
        ubica2 = InStr(ubica1, ActiveCell, ".")
        If ubica2 > 0 Then
            'si hay punto se deja el texto entre los 2 signos
            ActiveCell = Val(Mid(ActiveCell, ubica1 + 1, ubica2 - ubica1))
        Else
            'sino se deja el texto desde la barra hasta el final
            ActiveCell = Mid(ActiveCell, ubica1 + 1, Len(ActiveCell) - ubica1)
        End If
    End If
    'se pasa a la fila siguiente
    ActiveCell.Offset(1, 0).Select
Wend
End Sub

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas