문자열 길이에 따라 텍스트(신용 카드 번호) 형식을 자동으로 지정하는 VBA Excel 코드가 있습니까?

문자열 길이에 따라 텍스트(신용 카드 번호) 형식을 자동으로 지정하는 VBA Excel 코드가 있습니까?

배경:

  1. Excel의 숫자 형식 셀에는 15번째 이후의 숫자가 0으로 변경됩니다(이유). 이 동작은 15자리보다 길 수 있는 신용 카드 번호 기록에 영향을 미칩니다. Excel에서 이 동작을 해결하려면 신용 카드 번호(데이터를 입력하기 전에)를 포함할 셀의 서식을 숫자 대신 문자열로 지정하는 것입니다.
  2. 이 문자열을 보다 사용자 친화적인 형식으로 표시하기 위해 문자열을 가져와서 분할하는 도우미 열을 추가합니다.
  3. 문자열 길이를 테스트하여 이 작업을 수행하고 16자이면 4 4 4 4(캐나다 VISA/MC)로 분할하고 15자리이면 3 6 5(캐나다 Amex)로 분할합니다.

내 테이블 샘플

도우미 열의 청크에 사용하는 공식

질문:
데이터가 변경될 때마다 내 신용 카드 문자열이 포함된 열에 원하는 형식을 동적으로 적용하도록 VBA용 워크시트 코드를 조정할 수 있습니까?

요청된 VBA 코드를 추가한 후 내 테이블

답변1

먼저, 열에 텍스트 형식이 있어야 합니다 B. 그렇지 않으면 Excel에서 이 코드 이전의 작업을 수행하므로 코드가 안정적으로 작업을 수행할 수 없습니다.

그런 다음 VBA 창을 열고 자동으로 업데이트하려는 워크시트의 모듈을 열어야 합니다. 이 모듈 안에 다음 코드를 붙여넣으세요.

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

(감사해요,@론, 기능을 지시하기 위한 것입니다 Format.)

Table1셋째, 코드의 테이블 이름을 실제 테이블 이름으로 업데이트합니다 .

Worksheet_Change이벤트워크시트에서 내용이 변경될 때마다 실행됩니다. 이 코드에서는 먼저 신용 카드 번호 열에서 내용이 정확히 변경되었는지 확인하고 이 경우에만 길이 확인 및 값 수정을 시작합니다.

관련 정보