Código VBA Excel para formatar texto automaticamente (números de cartão de crédito) com base no comprimento da string?

Código VBA Excel para formatar texto automaticamente (números de cartão de crédito) com base no comprimento da string?

Fundo:

  1. As células formatadas com números no Excel têm dígitos além do 15º alterados para zeros (razão). Este comportamento afeta a gravação de números de cartão de crédito que podem ter mais de 15 dígitos. Uma solução alternativa para esse comportamento no Excel é formatar células que conterão números de cartão de crédito (antes de inserir os dados) como strings em vez de números.
  2. Para exibir essa string em um formato mais amigável, adiciono uma coluna auxiliar que pega a string e a separa.
  3. Eu faço isso testando o comprimento da string e se tiver 16 caracteres eu divido como 4 4 4 4 (VISA/MC canadense) e se tiver 15 dígitos eu divido como 3 6 5 (Amex canadense).

Amostra da minha mesa

Fórmula que uso para agrupar na coluna auxiliar

Pergunta:
Você pode adaptar o código da minha planilha para VBA para aplicar dinamicamente o formato desejado à coluna que contém as strings do meu cartão de crédito sempre que os dados forem alterados?

Minha tabela depois de adicionar o código VBA solicitado

Responder1

Primeiro, você definitivamente precisará ter formato de texto em sua coluna B. Porque, caso contrário, o Excel faz tudo antes desse código, então o código não pode fazer o trabalho de maneira confiável.

Em seguida, você terá que abrir a janela do VBA e abrir o módulo da planilha que deseja atualizar automaticamente. Dentro deste módulo cole 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

(Obrigado,@Ron, para direcionar para a Formatfunção.)

Terceiro, atualize o nome da tabela Table1no código com o nome real da tabela.

Worksheet_Changeé oeventoque é acionado sempre que algo muda na planilha. Neste código, primeiro garantimos que algo mudou exatamente na coluna do número do cartão de crédito, e somente neste caso começamos a verificar o comprimento e modificar os valores.

informação relacionada