¿Código VBA Excel para formatear automáticamente el texto (números de tarjetas de crédito) según la longitud de la cadena?

¿Código VBA Excel para formatear automáticamente el texto (números de tarjetas de crédito) según la longitud de la cadena?

Fondo:

  1. Las celdas con formato numérico en Excel tienen dígitos más allá del 15 cambiados a ceros (razón). Este comportamiento afecta el registro de números de tarjetas de crédito que pueden tener más de 15 dígitos. Una solución alternativa a este comportamiento en Excel es formatear las celdas que contendrán números de tarjetas de crédito (antes de ingresar los datos) como cadenas en lugar de números.
  2. Para mostrar esta cadena en un formato más fácil de usar, agrego una columna auxiliar que toma la cadena y la divide.
  3. Hago esto probando la longitud de la cadena y si tiene 16 caracteres, la divido como 4 4 4 4 (VISA/MC canadiense) y si tiene 15 dígitos, la divido como 3 6 5 (Amex canadiense).

Muestra de mi mesa

Fórmula que uso para fragmentar en la columna auxiliar

Pregunta:
¿Pueden adaptar el código de mi hoja de trabajo para que VBA aplique dinámicamente el formato deseado a la columna que contiene las cadenas de mi tarjeta de crédito cada vez que cambien los datos?

Mi tabla después de agregar el código VBA solicitado

Respuesta1

Primero, definitivamente necesitarás tener formato de texto en tu columna B. Porque de lo contrario Excel hace sus cosas antes de este código, por lo que el código no puede hacer el trabajo de manera confiable.

Luego, deberá abrir la ventana de VBA y abrir el módulo de la hoja de trabajo que desea actualizar automáticamente. Dentro de este módulo pega este código:

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim c As Range
  Dim rIntersect As Range
  On Error GoTo errH
  Application.EnableEvents = False
  Set rIntersect = Intersect(Me.Range("Table1[Text]"), Target)
  If Not rIntersect Is Nothing Then
    For Each c In rIntersect
      If IsNumeric(c.Value) Then
        If Len(c.Value) = 14 Then
          c.Value = Format(c.Value, "@@@ @@@@@@ @@@@@")
        ElseIf Len(c.Value) = 16 Then
          c.Value = Format(c.Value, "@@@@ @@@@ @@@@ @@@@")
        End If
      End If
    Next
  End If
errH:
  Application.EnableEvents = True
End Sub

(Gracias,@ron, para dirigir hacia la Formatfunción.)

En tercer lugar, actualice el nombre de la tabla Table1en el código con el nombre real de su tabla.

Worksheet_Changees eleventoque se activa cada vez que algo cambia en la hoja de trabajo. En este código, primero nos aseguramos de que algo haya cambiado exactamente en la columna del número de tarjeta de crédito, y solo en este caso comenzamos a verificar la longitud y modificar los valores.

información relacionada