Una macro para extraer una cadena alfanumérica

Agradecería mucho si me ayudan con la elaboración de una macro, ya que la verdad apenas me estoy introduciendo en este tema y no conozco demaciado. Mi problema es el siguiente:

En una columna (F:F) tengo una lista de caracteres alfanuméricos, la cual la cantidad de celdas con datos varia a diario.

Quisiera extraer la letra k junto con los números consecutivos con los que aparece en otra columna (G:G), solo que:

1.- La celda puede o no contener la letra k, si fuera el caso, que apareciera el texto "sin datos", y puede aparecer en cualquier parte de la cadena

2.- Los números consecutivos a la letra k pueden ser de uno hasta cinco caracteres

Espero haber sido bastante explicito, de no ser asi, abajo dejo un ejemplo.

F:F G:G

V12D15K9557 deseo que aparezca K9557

L25H32K7L22 deseo que aparezca K7

T241F236D21 deseo que aparezca "SIN DATOS"

K25 deseo que aparezca K25

1 Respuesta

Respuesta
1

Muy buena la explicación y los ejemplos. Te anexo la macro

Instrucciones para un botón y ejecutar la macro
1. Abre tu libro de Excel
2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
3. En el menú elige Insertar / Módulo
4. En el panel del lado derecho copia la macro
5. Ahora para crear un botón, puedes hacer lo siguiente:
6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona Asignar macro / Selecciona: busk
9. Aceptar.
10. Para ejecutarla dale click a la imagen.

Sub busk()
'Busca la letra K
'Por.Dam
For i = 1 To Range("F" & Rows.Count).End(xlUp).Row
    posk = InStr(1, Cells(i, "F"), "K")
    If posk > 0 Then
        kynum = Mid(Cells(i, "F"), posk, 1)
        posk = posk + 1
        For j = posk To Len(Cells(i, "F"))
            If IsNumeric(Mid(Cells(i, "F"), j, 1)) Then
                kynum = kynum + Mid(Cells(i, "F"), j, 1)
            End If
        Next
        Cells(i, "G") = kynum
    Else
        Cells(i, "G") = "SIN DATOS"
    End If
Next
End Sub

Nota: la letra K a buscar, tiene que ser mayúscula

Saludos. Dam

Si es lo que necesitas.

Hola.

Gracias por la pronta respuesta

La macro se ejecuta bien, solo con un pequeño detalle:

Cuando encuentra la letra k en la posición intermedia de la cadena de caracteres, extrae todos los números que encuentra después de ella, y yo solo necesito los números consecutivos hasta el siguiente carácter de texto, es decir:

Con el ejemplo anterior.

F:F G:G NOTA

V12D15K9557 deseo que aparezca K9557 ok kL25H32K7L22 deseo que aparezca K7 (extrae K722)
T241F236D21 deseo que aparezca "SIN DATOS" ok
K25 deseo que aparezca K25 ok

Espero que me puedas ayudar con este asunto.

Muchas gracias. saludos

Te cambio la macro

Sub busk()
'Busca la letra K
'Por.Dam
For i = 1 To Range("F" & Rows.Count).End(xlUp).Row
    posk = InStr(1, Cells(i, "F"), "K")
    If posk > 0 Then
        kynum = Mid(Cells(i, "F"), posk, 1)
        posk = posk + 1
        For j = posk To Len(Cells(i, "F"))
            If IsNumeric(Mid(Cells(i, "F"), j, 1)) Then
                kynum = kynum + Mid(Cells(i, "F"), j, 1)
            Else
                Exit For
            End If
        Next
        Cells(i, "G") = kynum
    Else
        Cells(i, "G") = "SIN DATOS"
    End If
Next
End Sub

Saludos.Dam
Si es lo que necesitas.

Añade tu respuesta

Haz clic para o