shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Excel VBA】コメント付きセルを抽出してデータ処理する事例

Excelの業務効率化でVBAを使う場合、「コメント付きセルだけを対象に処理する」という方法は、汎用性が高く、柔軟なマクロ作成に役立ちます。

Excel VBAでコメント付きセルを抽出する方法と、それを活用したデータ処理の基本サンプルです。

内容:

確認のExcelは「Microsoft® Excel® for Microsoft 365 MSO」(バージョン2506)です。

コメント付きセルを活用するメリット

コメントは、セルに対する補足情報や指示、メモとして使われることが多く、「このセルは特別な処理が必要」「この値は確認済み」など、人が判断した情報をVBAで活用するための”フック”にもなります。

つまり、コメント付きセルだけを対象に処理することで、人の意図を反映した柔軟なマクロが作成となり、VBAコードの修正頻度の削減に役立ちます。

コメント付きセルの抽出方法:Comments プロパティ

基本的な方法は、対象のシートに対してComments プロパティ を使うことです。
これは、旧式のコメント(Note)が付いているセルをすべて取得できます。

たとえば、アクティブシート上のコメント付きセルを取得する場合は、ActiveSheet.Comments プロパティを使って、全てのコメントをまとめた Comments コレクションオブジェクトを利用します。

サンプルコード

以下のコードは、各コメントを順にチェックし、コメントの中に「変換」という文字列が含まれていれば、そのコメントが付いているセルの値を「変換済み」にする事例です。

Sub コメント付きセルを処理する()
    Dim コメント As Comment

    If ActiveSheet.Comments.Count = 0 Then
        MsgBox "コメントは見つかりませんでした。"
        Exit Sub
    End If

    For Each コメント In ActiveSheet.Comments
        ' 例:コメントに「変換」という文字が含まれていればセルの値を変更'
        If InStr(コメント.Text, "変換") > 0 Then
            コメント.Parent.Value = "変換済み"
        End If
    Next コメント
End Sub

このようにコメントを活用すると、コメントの有無でVBAで処理するセルを指定したり、コメント内容でセルに対する処理内容を分岐するなどができます。

コメント抽出の方法比較

基本は上述のとおりですが、処理の目的等でいくつかの方法があります。

目的 おすすめの方法 説明
コメントの一覧を取得し、内容に応じて処理を分岐したい ActiveSheet.Comments 最も簡潔。旧式コメントに限定されるが、一覧取得と条件分岐処理に最適
コメント付きセルを一括で処理したい(範囲操作) SpecialCells(xlCellTypeComments) コメント付きセルを Range として取得できるため、色付けや範囲操作に便利
スレッドコメントも扱いたい ActiveSheet.CommentsThreaded(Excel 365以降) 新しいメモ形式に対応。返信なども含めて扱えるが、やや複雑

コメント付きセルを活用した汎用的なVBAの事例

以下は、コメント付きセルを活用した具体的な事例です。

shikumika.org

以上、Excel VBAでコメント付きセルを抽出してデータ処理する事例でした。