AÑADIR CEROS A LA IZQUIERDA EN VBA

Hoy escribiré una entrada corta y sobre en una pregunta que me trasladaba la semana pasada un lector. Se trata de añadir ceros a la izquierda cuando necesitamos rellenar “x” posiciones en una base de datos.

Esto ya lo expliqué con fórmulas en la siguiente entrada: Añadir ceros a la izquierda, pero la consulta incidía en la necesidad de pasar la fórmula a código dado que la quería implementar en un proceso. Después de varios correos, finalmente me comentó que el dato sobre el que necesitaba añadir los ceros sería el número de documento de identidad (dni) y que estaba realizando pruebas.

Teniendo en cuenta esto, finalmente elaboré un pequeño programa que genera números de dni de forma aleatoria y luego le añade los ceros hasta completar 15 posiciones.

Sub GenerarDni()
Dim j As Double
'Limpiamos datos de hoja1 menos los encabezados
Worksheets(1).Range("A2:B65000") = Empty
'Contamos las celdas en blanco hasta el rango que nos interesa, "A31"
Fin = WorksheetFunction.CountBlank(Worksheets(1).Range("a2:A31"))
For j = 2 To Fin
'Generamos un número aleatorio entre 1 y 8 cifras
NUMERO = WorksheetFunction.RandBetween(1, 99999999)
'Generamos letras (mayúsculas) de forma aleatorio con la función carácter (Chr)
LETRA = Chr(WorksheetFunction.RandBetween(65, 90))
'Concatenamos el número y la letra
Sheets(1).Cells(j, 1) = NUMERO & LETRA
Next
End Sub

Con esta macro podremos generar fácilmente números aleatorios de DNI que nos resultarán muy útiles para realizar pruebas con nuestras bases de datos. A continuación debemos añadir los ceros a la izquierda, para ello tendremos que echar mano de la siguiente macro:

Sub CeroIzq()
Dim i As Double
With Sheets(1)
Final = Application.CountA(.Range("A:A"))
For i = 2 To Final
'aplicamos formato texto a las celdas seleccionadas
.Cells(i, 2).NumberFormat = "@"
'Con esta función añadimos tantos ceros como sean necesarios
'hasta completar una longitud de 15 posiciones
.Cells(i, 2) = WorksheetFunction.Rept("0", 15 - Len(.Cells(i, 1))) & .Cells(i, 1)
Next
End With
End Sub

La función es simple, repetimos el “0” 15 veces menos (-)  el largo actual del texto a rellenar, de forma que siempre controlaremos la longitud de los ceros en relación a los datos. Así queda la información, al pulsar el botón genera 30 dni y añade los ceros.

CEROS A LA IZQUIERDA EN VBA

Para no tener que ejecutar cada macro con un botón, podemos ejecutar las dos añadiendo en la primera macro una llamada a la segunda, llamando a la macro, literalmente: Call CeroIzq (os lo dejo así en el archivo).

Descarga el archivo de ejemplo pulsando en: CEROS A LA IZQUIERDA EN VBA

 

Anuncios

7 pensamientos en “AÑADIR CEROS A LA IZQUIERDA EN VBA

  1. Pingback: EXPORTAR ARCHIVOS TXT DE ANCHO FIJO DESDE EXCEL | Excel Signum

  2. NO Funciona ci las celdas de encima no tienen números ejemplo si ubico los números a rrellenar con ceros en la FILA F:10 COLUMNA 6 )NO funciona, Deben estar las celdas (F1:F9) , con valores.

    Me gusta

    • Hola Juan:

      Es lógico que no funcione, el ejemplo en el que estás intentando agregar ceros a la izquierda funciona en un loop que va recorriendo una fila a la que previamente hemos asignado una cantidad de items (por lo que deben existir valores previamente). Si quieres que te funcione directamente como una función más debes eliminar el loop y hacer referencia a la celda en la que se encuentra el valor: es decir sustituir el valor de la i por el número de la fila en la que se encuentra el valor).

      With Sheets(1)
      .Cells(fila de tu valor, 2) = WorksheetFunction.Rept("0", 15 - Len(.Cells(fila de tu valor, 1))) & .Cells(fila de tu valor, 1)
      End with

      De todas formas si esto es complejo, puedes visitar este post donde lo realizo con funciones en la hoja:

      https://excelsignum.com/2013/12/14/anadir-ceros-a-la-izquierda-en-excel/

      Saludos.

      Me gusta

    • Hoja Andrés:

      Pues puedes eliminarlos o bien, si la cadena contiene solo números, multiplicando por 1 o bien si es alfanumérica, utilizando la función extrae().

      Saludos

      Me gusta

    • Hola Andrés:

      Con esta función añades un cero según el caracter que indiques. EN este caso es la letra A.

      Copia la función en la hoja y aplícalo a una cadena de texto o alfanumérica y realizará lo que estás preguntando.

      Saludos.

      Public Function AÑADE_0(Micelda As String)
      With Sheets(1)
      Dim i As Double, j As Double
      Dim letr As String
      'lo que vamos a hacer es realizar un bucle for next dentro de la celda,
      'de forma que vaya acumulando los valores NO numéricos en la variable "letr"
      For i = Len(Micelda) To 1 Step -1
      If Mid(Micelda, i, 1) = "A" Then
      D = 0
      End If
      letr = Mid(Micelda, i, 1) & D & letr
      D = vbNullString
      Next i
      AÑADE_0 = (letr)
      End With
      End Function

      Sub extrae_letr()
      'Realizamos otro bucle for next para recorrer todas las fichas llamando a la función "Letras"
      'de forma que extraiga las letras hasta el final
      Dim c As Double
      With Sheets(1)
      fin = Application.CountA(.Range("A:A"))
      For c = 2 To fin
      .Cells(c, 3) = AÑADE_0(.Cells(c, 1))
      .Cells(c, 3).NumberFormat = "@"
      Next
      End With
      End Sub

      Me gusta

¿Te ha gustado?, Realiza un comentario.

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s