Excel VBAを使って特定のセルフォーマットを持つセルをフィルタする方法

この記事では、Excel VBA(Visual Basic for Applications)を用いて特定のセルフォーマットを持つセルを効率よくフィルタリングする方法について詳しく解説します。具体的なコード例とその詳細な解説、さらには応用例を3つ以上提供することで、読者がこの技術を業務に役立てるための一助とします。

目次

Excel VBAの基本

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

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

なぜセルフォーマットでフィルタリングするのか

セルの内容だけでなく、セルフォーマット(色、太字、斜体など)によっても情報を分類するケースは多いです。例えば、売上報告書で目標を達成した項目を青色に、未達成を赤色にするなど、視覚的に情報を分けている場合があります。このようなフォーマット情報をもとに自動でフィルタリングすることで、報告書作成やデータ分析が劇的に効率化されます。

VBAコードの基礎


' 特定のセルフォーマット(ここでは背景色が黄色)のセルをフィルタするVBAコード
Sub FilterYellowCells()
    Dim cell As Range
    Dim targetSheet As Worksheet
    Set targetSheet = ThisWorkbook.Sheets("Sheet1")
    
    targetSheet.Rows(1).AutoFilter ' 既存のフィルタを解除
    targetSheet.Rows(1).AutoFilter Field:=1 ' 列1にフィルタを設定
    
    For Each cell In targetSheet.Range("A2:A100")
        If cell.Interior.Color = RGB(255, 255, 0) Then
            cell.EntireRow.Hidden = False
        Else
            cell.EntireRow.Hidden = True
        End If
    Next cell
End Sub

コードの解説

– `Dim cell As Range, Dim targetSheet As Worksheet`: `cell` と `targetSheet` という変数を宣言しています。`cell` はセルを、`targetSheet` は作業対象のシートを指すための変数です。
– `Set targetSheet = ThisWorkbook.Sheets(“Sheet1”)`: `Sheet1` を作業対象のシートとして選択します。
– `targetSheet.Rows(1).AutoFilter`: 既存のフィルタを解除します。
– `For Each cell In targetSheet.Range(“A2:A100”)`: A2セルからA100セルまでの範囲でループ処理を行います。
– `If cell.Interior.Color = RGB(255, 255, 0) Then`: セルの背景色が黄色(RGB(255, 255, 0))である場合にはその行を非表示にしません(`.Hidden = False`)。

応用例

応用例1: 複数の色でフィルタリング


' 複数の色(ここでは黄色と青)でフィルタリングするVBAコード
Sub FilterMultiColorCells()
    ' (基本のコードと同様の処理)
    If cell.Interior.Color = RGB(255, 255, 0) Or cell.Interior.Color = RGB(0, 0, 255) Then
        cell.EntireRow.Hidden = False
    Else
        cell.EntireRow.Hidden = True
    End If
    ' (以下略)
End Sub

この応用例では、黄色だけでなく青色のセルもフィルタリング対象としています。

応用例2: テキストと色でフィルタリング


' テキストと色でフィルタリングするVBAコード
Sub FilterTextAndColor()
    ' (基本のコードと同様の処理)
    If (cell.Value = "OK" And cell.Interior.Color = RGB(255, 255, 0)) Then
        cell.EntireRow.Hidden = False
    Else
        cell.EntireRow.Hidden = True
    End If
    ' (以下略)
End Sub

この応用例では、セルのテキストが “OK” で、かつ、背景色が黄色の場合にフィルタリングします。

応用例3: セルの書式(太字、斜体)でフィルタリング


' セルの書式(太字、斜体)でフィルタリングするVBAコード
Sub FilterByFontStyle()
    ' (基本のコードと同様の処理)
    If cell.Font.Bold = True And cell.Font.Italic = True Then
        cell.EntireRow.Hidden = False
    Else
        cell.EntireRow.Hidden = True
    End If
    ' (以下略)
End Sub

この応用例では、セルの文字が太字かつ斜体である場合にフィルタリングします。

まとめ

Excel VBAを使用して特定のセルフォーマットでフ

ィルタリングする技術は、データ分析や報告書作成などの業務において非常に有用です。この記事で紹介した基本のコードと応用例を参考に、自分自身の業務に合わせてカスタマイズしてみてください。

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

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

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

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

コメント

コメントする

目次