文字列の長さに基づいてテキスト(クレジットカード番号)を自動的にフォーマットする VBA Excel コードはありますか?

文字列の長さに基づいてテキスト(クレジットカード番号)を自動的にフォーマットする VBA Excel コードはありますか?

背景:

  1. Excelの数値形式のセルでは、15桁目以降の数字がゼロに変更されます(理由)。この動作は、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

Table13 番目に、コード内のテーブル名を実際のテーブル名に更新します。

Worksheet_Changeそれはイベントこれは、ワークシートで何かが変更されるたびに実行されます。このコードでは、まずクレジットカード番号の列で何かが変更されたことを確認し、この場合にのみ長さのチェックと値の変更を開始します。

関連情報