VBA Access: Insertar un carácter cada x cantidad de caracteres

Necesito insertar un guión (-) cada 5 caracteres de una cadena de texto de largo variable. ¿Cómo armo el código?

1 Respuesta

Respuesta
2

Esta vez te doy la idea general, para que lo montes tú mismo:

Has de jugar con las funciones left(), right() y len() para "trocear" la cadena y volver a montarla con los guiones.

Utiliza un bucle (for... next) con pasos de 5 en 5

La idea en esquema sería:

->Empiezas el bucle

->Coges los 5 caracteres de la izquierda, añades un guion y el resto de caracteres por la derecha

->Siguiente paso del bucle

->Coges los 11 caracteres de la izquierda (5 primeros+guion+5siguientes), añades un guion y el resto de caracteres por la derecha

->Siguiente paso...

Perdón por la demora pero tuve que formatear mi equipo porque, para variar, Windows 10 presentó tantas fallas como actualizaciones se han acumulado desde el lanzamiento de Windows XP.
Voy a probar para ver qué surge.

Lo que hice fue lo siguiente (y lo más chistoso es que si lo pensaba iba a salirme):

Creé 4 variables de tipo String y a cada una le asigné un gramo cada 5 con MID:

Val1 = Mid(txtID,1,5) 'Empieza en el primero y extrae 5 dígitos
Val2 = Mid(txtId,6,5) 'Empieza en el sexto (porque ya extraje el quinto) y extrae otros 5
' Repito En tantas variables como sean necesarias
'Y luego en una última variable concateno todo
Val5 = Val1 & "-" & Val2 & "-" & Val3 & "-" & Val4

Espero que esto sirva a otros para hacer algo similar.

No es mala solución, pero ten en cuenta que solo te vale si sabes previamente la longitud de la cadena o ésta no varía entre cada uso (cosa que yo desconozco).

Lo que yo te sugería iba más en esta línea, que es de aplicación general:

Public Function insertaGuiones(cadena As String) As String
Dim i As Integer, x As Integer
If Len(cadena) <= 5 Then
    insertaGuiones = cadena
Else
    x = 1
    For i = 1 To Len(cadena) Step 5
        If InStrRev(cadena, "-") <> 0 And InStrRev(cadena, "-") > Len(cadena) - 5 Then Exit For
        insertaGuiones = Left(cadena, 5 * x + x - 1) & "-" & Right(cadena, Len(cadena) - (5 * x + x - 1))
        cadena = insertaGuiones
        x = x + 1
    Next i
End If
End Function

¡Gracias! 
En definitiva armé para que tenga la longitud exacta para que me de un guion cada 5 caracteres/dígitos y así no sobren caracteres. Pero ahora que me pasas ese código, he de abandonar un poco el control de la longitud en otro caso que también necesito. Aunque me surgen muchas cosas en que puedo aplicar este nuevo código. Siempre tan útil tus sugerencias. Si pudiera darte otro 'Excelente' para esto último, lo haría.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas