Excelの「コメント」機能、ありますよね。
正直に言うと、僕はこの「コメント」機能があまり好きではありませんでした。以前、業務SEをしていた頃、 大量のコメントがあるExcel設計書やドキュメントの処理をしたことがあります。
しかも、修正の指摘や対応の経緯など、割と「大事なこと」がコメントとして書かれていることもあり、1個ずつコメントを確認したこともありました。
コメントは「検索しにくい」など、ひとクセあるのは確かですが…
今思えば、上記は非効率だったなと思います。。
こんなときは、Excel効率化の定番、VBAマクロの出番ですね。
今回は、すべてのシートのコメントを一括取得するマクロをご紹介します。VBAを使ったことのない方向けにも、画像つきでご紹介します!
ちなみに、同様の悩みがエクセルの「吹き出し(オートシェイプ)」機能でもよくあります。吹き出しの一括取得についてはこちらの記事からどうぞ!
目次
エクセルVBAマクロを使ってコメントを一括で取得する手順①: 準備
実際には仕事で扱っているドキュメントがあればよいので準備は不要ですが、今回はシンプルな例を用意しました。
上記では、2箇所にコメントが入っていると思います。(今回、見やすくするためにコメントを「表示」設定にしています)
修正前の金額はコメントのみに書かれている、のが特徴です。
このExcelから、コメントのみを抽出します。
エクセルVBAマクロを使ってコメントを一括で取得する手順②:実行
準備ができたら実行です。以下の手順で、マクロのプログラムを実行してみてください。
「コードの表示」を開く
エクセルのシート名を右クリックすると、「コードの表示」という項目があるので開きましょう。
ここまで来たらもう少しです。
VBAマクロエディタにプログラムを貼り付けて実行する
「コードの表示」を行うと、次の画面になります。ここに、コメントを取得するプログラムを貼り付けて実行しましょう。
今回貼り付けるプログラムコードは以下のとおりです。
そのままコピーして貼り付けるだけでOKです。
Sub ブック内のコメント情報を取得する()
Dim C As Comment
Dim R As Long
Dim objSheet
Application.ScreenUpdating = False
With Worksheets.Add
.Cells(1, 1).Value = "シート名"
.Cells(1, 2).Value = "セル位置"
.Cells(1, 3).Value = "文言"
.Cells(1, 4).Value = "コメント内容"
R = 2
For Each objSheet In ThisWorkbook.Worksheets
For Each C In objSheet.Comments
'シート名を取得
.Cells(R, 1) = objSheet.Name
'セル位置を取得+簡易リンク作成
.Cells(R, 2) = C.Parent.Address
.Hyperlinks.Add Anchor:=.Cells(R, 2), Address:="#" & objSheet.Name & "!" & C.Parent.Address
'文言を取得
.Cells(R, 3) = objSheet.Cells.Range(C.Parent.Address).Text
'コメント内容を取得
.Cells(R, 4) = C.Text
R = R + 1
Next C
Next
End With
End Sub
エクセルVBAマクロを使ってコメントを一括で取得する手順③:結果確認
さて、先ほどのプログラムを実行すると・・・
エクセル上に、何やら新しいシートができていますね。
コメントの取得結果がここに表示されます。
左から、「シート名」「セル位置(リンクになっています)」「文言」「コメント内容」が出力されます。
あれ?最初の図ではコメントは2つでしたが、他のシートにもう1つありましたね。
今回使ったプログラムでは、ファイル内のすべてのシートのコメントを取得するため、取得漏れがないようにしています。
コメント内容を一覧で確認したら、あとは本文と併せて検索するもよいですし、参考として残しておくもよいです。用途に合わせて活用してみてください!
まとめ
エクセル上すべてのシートのコメントを一括で取得する、Excel VBAマクロの使い方をご紹介しました。
エクセルを使っている方はまだまだ多いです(僕も毎日使っています)。
今回のVBAマクロを覚えておけば「コメント」使いに遭遇しても対処できますね!というか、このコメントも使い方次第ではとても便利ですので、これを機にコメントも活用していただけたらと思います!!
ぜひみなさんの仕事効率化にお役立てください!