この記事では、Excel VBAを用いてリストからの選択のみを許可する方法について解説します。この方法を用いることで、業務処理におけるエラーや不正確な入力を防ぐことができます。具体的なコード例、その詳細な解説、及び応用例を3つ以上紹介します。
Excel VBAの基本
Excel VBA(Visual Basic for Applications)は、Microsoft Excelに組み込まれたプログラミング言語です。これを用いると、単純作業の自動化だけでなく、高度なデータ分析やレポート作成も可能になります。
そもそも、どこにVBAコードを書いて、どう実行すれば良いのか分からない場合は、以下の記事をご参照ください。

なぜリストからの選択を制限するのか
リストからの選択を制限することで、データ入力の際に発生する誤入力や未入力を防ぐことができます。これにより、業務の効率が向上し、エラーによる時間ロスを削減することが可能です。
基本的なコードの構造
以下に、Excel VBAでリストからの選択のみを許可する基本的なコードを示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub ListSelectionOnly() Dim rng As Range Set rng = Worksheets("Sheet1").Range("A1:A10") With rng.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="選択1,選択2,選択3" .IgnoreBlank = True .ShowInput = True .ShowError = True End With End Sub |
コード解説
1. Sub ListSelectionOnly()
:ListSelectionOnlyという名前のマクロを定義します。
2. Dim rng As Range
:Rangeオブジェクトとしてrngを宣言します。
3. Set rng = Worksheets("Sheet1").Range("A1:A10")
:Sheet1のA1からA10までの範囲をrngに設定します。
4. With rng.Validation
:rngのValidationプロパティを設定します。
– .Delete
:既存のバリデーション設定を削除します。
– .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="選択1,選択2,選択3"
:バリデーションの種類としてリストを選択し、リストの項目を設定します。
– .IgnoreBlank = True
:空白を許可する設定です。
– .ShowInput = True
:入力メッセージを表示します。
– .ShowError = True
:エラーメッセージを表示します。
応用例
応用例1: 複数の列に適用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub MultiColumnListSelection() Dim rng1 As Range, rng2 As Range Set rng1 = Worksheets("Sheet1").Range("A1:A10") Set rng2 = Worksheets("Sheet1").Range("B1:B10") Call ApplyListValidation(rng1, "選択1,選択2,選択3") Call ApplyListValidation(rng2, "選択A,選択B,選択C") End Sub Sub ApplyListValidation(rng As Range, listItems As String) With rng.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=listItems .IgnoreBlank = True .ShowInput = True .ShowError = True End With End Sub |
応用例2: ユーザー定義関数を使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub UserDefinedFunctionListSelection() Dim rng As Range Set rng = Worksheets("Sheet1").Range("A1:A10") With rng.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=CustomListItems()" .IgnoreBlank = True .ShowInput = True .ShowError = True End With End Sub Function CustomListItems() As String CustomListItems = "選択X,選択Y,選択Z" End Function |
応用例3: リストの項目を外部ファイルから読み込む
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
Sub ListFromExternalFile() Dim rng As Range Dim listItems As String listItems = ReadListFromFile("C:\path\to\file.txt") Set rng = Worksheets("Sheet1").Range("A1:A10") With rng.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=listItems .IgnoreBlank = True .ShowInput = True .ShowError = True End With End Sub Function ReadListFromFile(filePath As String) As String Dim txt As String Dim txtline As String Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim fileStream As Object Set fileStream = fso.OpenTextFile(filePath, 1) Do While Not fileStream.AtEndOfStream txtline = fileStream.ReadLine txt = txt & txtline & "," Loop fileStream.Close ReadListFromFile = Left(txt, Len(txt) - 1) End Function |
まとめ
Excel VBAを用いることで、
リストからの選択制限によって業務の効率化が図れます。基本のコードから応用例までを詳しく解説しましたので、是非とも実際の業務で活用してみてください。
VBAも良いけどパワークエリも良い
VBAの解説をしてきましたが、VBAは正直煩雑でメンテナンス性が悪いです。最近はモダンExcelと呼ばれるパワークエリやパワーピボットへのシフトが進んできています。本サイトでもパワークエリの特集をしており、サンプルデータを含む全11回の学習コンテンツでパワークエリを習得することができます。
クリックするとパワークエリの全11講座が表示されます。
-
【初心者向け】パワークエリ入門:ETLツールを使ってエクセルデータを簡単に整形・統合しよう!(1/11)
-
【実践ガイド】パワークエリでデータ収集:Excel、CSV、PDF、Webデータを簡単に取り込む方法をマスターしよう!(2/11)
-
【総力特集】パワークエリで列操作をマスター:選択、変更、移動、削除、結合、分割の詳細解説&実践テクニック!(3/11)
-
【徹底解説】パワークエリで行操作をマスター!フィルター・保持・削除テクニックと練習用エクセルで実践学習(4/11)
-
パワークエリでデータクレンジング: 文字列結合、0埋め、テキスト関数をマスター(5/11)
-
パワークエリで四捨五入、切り捨て、切り上げをマスターする方法(6/11)
-
パワークエリで効率的なデータグループ化を実現する方法(7/11)
-
パワークエリで時間と日付の計算をマスター!便利な関数を使って効率アップ(8/11)
-
パワークエリで条件別集計をマスターする方法(9/11)
-
Excelパワークエリでクロス集計表とデータベース形式を瞬時に変換する方法(10/11)
-
Excelパワークエリ入門: 効率的なデータ整理をマスターしよう!(11/11)
パワーピボットの記事はありません。興味がある場合は、書籍で学んでみてください
コメント