Excel VBAで特定のコメントを含むセルをフィルタリングする業務効率化術

この記事では、Excel VBAを使って特定のコメントを含むセルをフィルタリングする方法について詳しく解説します。具体的なコード例やその詳細な解説、さらに応用例を3つ以上提供します。この方法を使えば、業務中に見つけたいコメントが記載されたセルを効率よく抽出できます。

目次

Excel VBAの基本

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

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

基本的なフィルタリングコード

まず、基本となるフィルタリングのコードを紹介します。このコードは、特定のシート内のセルに入力されたコメントを対象に、特定のキーワードが含まれているかどうかをチェックして、該当するセルをフィルタリングします。


Sub FilterCellsByComments()
    Dim cell As Range
    Dim targetSheet As Worksheet
    Set targetSheet = Worksheets("Sheet1")

    For Each cell In targetSheet.UsedRange
        If Not cell.Comment Is Nothing Then
            If InStr(cell.Comment.Text, "重要") > 0 Then
                ' ここでフィルタリング処理
                cell.Interior.Color = RGB(255, 255, 0)
            End If
        End If
    Next cell
End Sub

コード解説

このVBAコードは非常に簡単ですが、以下の手順で動作します。

1. `targetSheet`にフィルタリングしたいワークシートを指定します。
2. `UsedRange`を使って使用されているセル範囲内でループ処理を行います。
3. 各セルにコメントが含まれているかどうかを`Not cell.Comment Is Nothing`で確認します。
4. `InStr`関数を用いて、セルのコメントに”重要”というキーワードが含まれているかどうかをチェックします。
5. 条件に一致した場合、そのセルの背景色を黄色に変更します(これは一例です)。

応用例

応用例1: 複数のキーワードでフィルタリング

一つのセルに複数のキーワードがある場合、それぞれでフィルタリングすることができます。


Sub MultiKeywordFilter()
    Dim cell As Range
    Dim targetSheet As Worksheet
    Dim keywords As Variant
    keywords = Array("重要", "緊急")
    
    Set targetSheet = Worksheets("Sheet1")
    
    For Each cell In targetSheet.UsedRange
        If Not cell.Comment Is Nothing Then
            Dim i As Integer
            For i = LBound(keywords) To UBound(keywords)
                If InStr(cell.Comment.Text, keywords(i)) > 0 Then
                    cell.Interior.Color = RGB(255, 0, 0)
                    Exit For
                End If
            Next i
        End If
    Next cell
End Sub

応用例2: フィルタリングしたセルに対するアクション

フィルタリングしたセルに対して、特定のアクション(例えば、新しいシートにコピー)を行いたい場合があります。


Sub CopyFilteredCells()
    Dim cell As Range
    Dim targetSheet As Worksheet, newSheet As Worksheet
    Set targetSheet = Worksheets("Sheet1")
    Set newSheet = Worksheets.Add
    
    Dim newRow As Integer
    newRow = 1
    
    For Each cell In targetSheet.UsedRange
        If Not cell.Comment Is Nothing Then
            If InStr(cell.Comment.Text, "重要") > 0 Then
                cell.Copy Destination:=newSheet.Cells(newRow, 1)
                newRow = newRow + 1
            End If
        End If
    Next cell
End Sub

応用例3: コメントの日付をフィルタリング

コメントに日付が記載されている場合、特定の日付範囲に該当するセルをフィルタリングすることもできます。


Sub FilterByCommentDate()
    Dim cell As Range
    Dim targetSheet As Worksheet
    Set targetSheet = Worksheets("Sheet1")

    Dim targetDate As Date
    targetDate = DateValue("2023/09/01")

    For Each cell In targetSheet.UsedRange
        If Not cell.Comment Is Nothing Then
            Dim commentText As String
            commentText = cell.Comment.Text
            Dim datePosition As Integer
            datePosition = InStr(commentText, "2023/")
            
            If datePosition > 0 Then
                Dim extractedDate As Date
                extractedDate = DateValue(Mid(commentText, datePosition, 10))
                If extractedDate = targetDate Then
                    cell.Interior.Color = RGB(0, 255, 0)
                End If
            End If
        End If
    Next cell
End Sub

まとめ

Excel VBAを使って特定のコメントを含むセルを効率よくフィルタリングする方法を紹介しました。このような自動化は業務効率を飛躍的に向上させるポテンシャルがあります。応用例を参考に、自分の業務に適したカス

タマイズをしてみてください。

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

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

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

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

コメント

コメントする

目次