Excel VBAを用いたリストからの選択限定による業務効率化

この記事では、Excel VBAを用いてリストからの選択のみを許可する方法について解説します。この方法を用いることで、業務処理におけるエラーや不正確な入力を防ぐことができます。具体的なコード例、その詳細な解説、及び応用例を3つ以上紹介します。

目次

Excel VBAの基本

Excel VBA(Visual Basic for Applications)は、Microsoft Excelに組み込まれたプログラミング言語です。これを用いると、単純作業の自動化だけでなく、高度なデータ分析やレポート作成も可能になります。

そもそも、どこにVBAコードを書いて、どう実行すれば良いのか分からない場合は、以下の記事をご参照ください。

なぜリストからの選択を制限するのか

リストからの選択を制限することで、データ入力の際に発生する誤入力や未入力を防ぐことができます。これにより、業務の効率が向上し、エラーによる時間ロスを削減することが可能です。

基本的なコードの構造

以下に、Excel VBAでリストからの選択のみを許可する基本的なコードを示します。


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: 複数の列に適用


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: ユーザー定義関数を使用


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: リストの項目を外部ファイルから読み込む


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講座が表示されます。

パワーピボットの記事はありません。興味がある場合は、書籍で学んでみてください

コメント

コメントする

目次