배경:
- Excel의 숫자 형식 셀에는 15번째 이후의 숫자가 0으로 변경됩니다(이유). 이 동작은 15자리보다 길 수 있는 신용 카드 번호 기록에 영향을 미칩니다. Excel에서 이 동작을 해결하려면 신용 카드 번호(데이터를 입력하기 전에)를 포함할 셀의 서식을 숫자 대신 문자열로 지정하는 것입니다.
- 이 문자열을 보다 사용자 친화적인 형식으로 표시하기 위해 문자열을 가져와서 분할하는 도우미 열을 추가합니다.
- 문자열 길이를 테스트하여 이 작업을 수행하고 16자이면 4 4 4 4(캐나다 VISA/MC)로 분할하고 15자리이면 3 6 5(캐나다 Amex)로 분할합니다.
질문:
데이터가 변경될 때마다 내 신용 카드 문자열이 포함된 열에 원하는 형식을 동적으로 적용하도록 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
은이벤트워크시트에서 내용이 변경될 때마다 실행됩니다. 이 코드에서는 먼저 신용 카드 번호 열에서 내용이 정확히 변경되었는지 확인하고 이 경우에만 길이 확인 및 값 수정을 시작합니다.