セルの更新後処理!エクセルVBAで作る名簿の重複入力を防ぐマクロ

コンピューターのお仕事
スポンサーリンク

入力フォームへの誤入力があった場合誤って入力した文字を空白に置き換えるマクロを作ってみました。詳細は下記のとおりです。

  • 「都道府県」「都道府県以下」「建物名」 という入力フォームがある
  • 「都道府県以下」 に都道府県を入力された場合処理を実行
  • 入力された都道府県を空白に置き換える
スポンサーリンク

エクセル名簿のセルを更新後にマクロが自動発動

住所入力時にご入力があった場合、MSAceessの更新後処理の様にセルの値を修正するマクロが発動するようにしました。

マクロが自動発動するように設定しているセルは左から数えて6番目の列(F列)です。

今回のコードは市町村入力欄に都道府県が入力された場合に空白に置き換える自作関数「Pre_chk」を実行させます。

エクセル VBAのソースコード

下記のコードをプロジェクトウィンドウから「Sheet1」を選び貼り付けます。

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Worksheet_Change_err 'エラー処理構文へ
    Dim rc As Integer
       
  'F列(左からを2行目から100行目までまでという条件
  If (Target.Row >= 7 And Target.Row <= 100) and (target.column) Then
   
  'セルの値に変更があったときに実行したい処理を記述
  '自作関数 Pre_chkを実行
    If (Len(ThisWorkbook.Pre_chk(Cells(Target.Row, 6)))) <> 0 Then
      rc = MsgBox(ThisWorkbook.Pre_chk(Cells(Target.Row, 6)) _
      & "が含まれていますので空白と置き換えます。", vbYesNo, "確認")
                    
      If rc = vbYes Then
        Cells(Target.Row, 6) = Replace(Cells(Target.Row, 6), _
        ThisWorkbook.Pre_chk(Cells(Target.Row, 6)), "")
      Else
        MsgBox ("処理を中止します")
      End If
    End If
  End If
 
'エラー処理構文----------------------------
Worksheet_Change_exit:
Exit Sub
Worksheet_Change_err:
MsgBox (Err.Number & Err.Description)
Resume Worksheet_Change_exit
'-----------------------------------------
End Sub

都道府県をチェックする関数「Pre_che」はプロジェクトウィンドウから「ThisWorkbook」を選び底に貼り付けます。

Public Function Pre_chk(st_address As String)
On Error GoTo Pre_chk_err'エラー処理
Dim stPre As Variant
Dim i As Integer
Dim ii As Integer

stPre = Array("北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県", _
"福島県", "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", _
"新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", "岐阜県", "静岡県", "愛知県", _
"三重県", "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県", "鳥取県", "島根県", _
"岡山県", "広島県", "山口県", "徳島県", "香川県", "愛媛県", "高知県", "福岡県", "佐賀県", _
"長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県")

ii = UBound(stPre)
For i = 0 To ii
    If InStr(st_address, stPre(i)) <> 0 Then
      Pre_chk = stPre(i)
    End If
Next i
'エラー処理構文-----------------------------------------------
Pre_chk_exit: Exit Function
Pre_chk_err: MsgBox (Err.Number & " " & Err.Description)
Resume Pre_chk_exit
End Function

まとめ

Accessでテキストボックスの更新後処理で発動するマクロはよく目にしますが、エクセルのセルの更新後処理は初めてやりました。

動作が遅くなるかと思ったら、そうでもなく便利に使えています。

いろいろ応用が利きそうなので、もし誰かの参考になれば幸いです。

コメント

タイトルとURLをコピーしました