背景:
- Excelの数値形式のセルでは、15桁目以降の数字がゼロに変更されます(理由)。この動作は、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
3 番目に、コード内のテーブル名を実際のテーブル名に更新します。
Worksheet_Change
それはイベントこれは、ワークシートで何かが変更されるたびに実行されます。このコードでは、まずクレジットカード番号の列で何かが変更されたことを確認し、この場合にのみ長さのチェックと値の変更を開始します。