こんにちは!ぐーです。
いつもブログをご覧いただき、ありがとうございます!
今日はExcel VBAを使った「入力規則(Validation)」の設定方法をお伝えします。
なぜExcel標準機能ではなく「VBA」なのか?
「データ」タブにある「データの入力規則」を使えばいいじゃない、と思いませんか?
でも、現場ではこんなことが起こります。
- 自分が完璧に入力規則(リスト選択など)を設定する。
- 誰かが別の場所からセルをコピーして、書式ごと貼り付ける。
- 入力規則が上書きされて消える!
- そのまま運用され、結果、めちゃくちゃなデータが入力される。
これ、チームなどで使っていると「あるある」ですよね。
でも、VBAを使えばボタン一つで「鉄壁のルール」を何度でも復活させることができます。
【コピペOK】鉄壁のリスト選択を作るVBA
今回は、よく使う「部署名をリストから選ばせる(手入力を禁止する)」コードを紹介します。
以下のコードを標準モジュールに貼り付けてみてください。
Sub SetIroncladValidation()
' 画面の更新を止めて高速化
Application.ScreenUpdating = False
Dim targetRange As Range
' 設定したい範囲を指定(ここではA2からA100まで)
Set targetRange = Range("A2:A100")
' 対象範囲の設定を開始
With targetRange.Validation
' 既存のルールを削除(エラー回避のため)
.Delete
' 新しいルールを追加
.Add Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, _
Formula1:="営業部,人事部,総務部,開発部"
' 入力時メッセージの設定
.InputTitle = "部署選択"
.InputMessage = "リストから部署を選んでください。"
' エラーメッセージの設定
.ErrorTitle = "入力エラー"
.ErrorMessage = "その部署名は存在しません。リストから選択してください。"
' 無効なデータを強調表示しない(通常の制限動作)
.ShowInput = True
.ShowError = True
End With
' 画面更新を再開
Application.ScreenUpdating = True
MsgBox "入力規則をセットしました!", vbInformation
End Sub
これをExcelの機能でやろうとするとあちこちカチカチしてカタカタ入力しないといけないので、けっこう手間なんですよね…
コードの解説
- .Delete: 古いルールや、誰かがコピペで壊してしまった設定を一度「無」にします。更地にするイメージです。
- .Add Type:=xlValidateList: ここで「リスト形式」を指定しています。
- Formula1:=”営業部,…”: リストの中身です。Excelシート上の別リストを参照したい場合は、Formula1:=”=部署マスタ!$A$1:$A$4″ のように書くこともできます。
- .ErrorMessage: 間違った入力をした瞬間に表示されるメッセージです。機械的に弾くのではなく、正しい入力に誘導する文言にしておくと、使う人も安心します。
おわりに:運用を楽にするために
このマクロを「入力完了ボタン」や「保存ボタン」などに組み込んでおけば、ユーザーがどのような操作をしても、最終的には必ず正しい入力規則が適用された状態を保てます。
「また設定が消えてる…」となってしまう前に、ぜひこのVBAでルール管理を自動化してみてください。
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。
リンク
リンク

コメント