Excel VBAを利用した先頭文字でのデータフィルタリングの方法と応用例

この記事では、Excel VBAを用いて業務の効率化を実現する具体的な方法について解説します。特に、VBAを用いて「先頭文字でフィルタ」する処理を中心に、その実装例と応用例を3つ以上ご紹介します。コードの詳細解説と日本語のコメントも含めているので、VBA初心者から経験者まで幅広い読者に役立つ内容となっています。

目次

Excel VBAの基本

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

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

VBAによる先頭文字フィルタの基本

Excel VBAを使った先頭文字でのフィルタリングは、多数のデータを効率よく整理するための強力な手法です。例えば、商品コードや顧客IDがリストアップされている場合、特定の文字で始まるデータだけを抽出したい場合があります。


Sub FilterByFirstChar()
    Dim ws As Worksheet
    Dim targetColumn As Range
    Dim firstChar As String
    
    'ワークシートと対象の列を設定
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set targetColumn = ws.Range("A1:A100")
    
    'フィルタリングする先頭文字を設定
    firstChar = "A"
    
    'フィルタ処理
    targetColumn.AutoFilter Field:=1, Criteria1:=firstChar & "*", Operator:=xlFilterValues
End Sub

コードの解説

– `Dim ws As Worksheet`:対象となるワークシートを指定する変数を宣言します。
– `Dim targetColumn As Range`:フィルタリングを行う対象の列を定義する変数を宣言します。
– `Dim firstChar As String`:フィルタリングする際の先頭文字を格納する変数を宣言します。
– `Set ws = ThisWorkbook.Sheets(“Sheet1”)`:`ws`に「Sheet1」という名前のワークシートを設定します。
– `Set targetColumn = ws.Range(“A1:A100”)`:`targetColumn`にA1からA100までの範囲を設定します。
– `targetColumn.AutoFilter Field:=1, Criteria1:=firstChar & “*”, Operator:=xlFilterValues`:指定した条件でフィルタリングを実施します。

応用例1: 複数の先頭文字でフィルタ


Sub FilterByMultipleFirstChars()
    Dim ws As Worksheet
    Dim targetColumn As Range
    Dim firstChars As Variant
    
    'ワークシートと対象の列を設定
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set targetColumn = ws.Range("A1:A100")
    
    'フィルタリングする先頭文字を配列で設定
    firstChars = Array("A", "B")
    
    'フィルタ処理
    targetColumn.AutoFilter Field:=1, Criteria1:=firstChars, Operator:=xlFilterValues
End Sub

コードの解説

この応用例では、`Array(“A”, “B”)`で複数の先頭文字を指定しています。それ以外の部分は基本的なフィルタリングと同じです。

応用例2: 範囲を動的に設定


Sub DynamicRangeFilter()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim targetColumn As Range
    Dim firstChar As String
    
    'ワークシートと対象の列を設定
    Set ws = ThisWorkbook.Sheets("Sheet1")
    lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
    Set targetColumn = ws.Range("A1:A" & lastRow)
    
    'フィルタリングする先頭文字を設定
    firstChar = "A"
    
    'フィルタ処理
    targetColumn.AutoFilter Field:=1, Criteria1:=firstChar & "*", Operator:=xlFilterValues
End Sub

コードの解説

この例では、`lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row`を用いて、対象範囲の最後の行を動的に取得しています。

まとめ

Excel VBAを用いて、先頭文字でのデータフィルタリングが簡単にできることをご紹介しました。基本的なフィルタリングから応用例まで、具体的なコードとその解説を行いましたので、ぜひ参考にして業務効率化に役立ててください。

VBAも良いけどパワークエリも良い

VBAの解説をしてきましたが、VBAは正直煩雑でメンテナンス性が悪いです。最近はモダンExcelと呼ばれるパワークエリやパワーピボットへのシフトが進んできています。本サイトでもパワークエリの特集をしており、サンプルデータを含む全11回の学習コンテンツでパワークエリを習得することができます。

クリックするとパワークエリの全11講座が表示されます。

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

コメント

コメントする

目次