今回は、Excel に含まれる コメント を一覧に出力してくれる Excel VBA の ツール を作ってみたのでシェアしますね。
こんにちは、ゆう(@ProgYuki)です。
以前、
全シートの全てのオートシェイプの文字列を抽出して一覧に出力するツール
を作りましたが、今回はそれを応用して
全シートの全てのコメントを一覧に出力するツール
を作ってみたので、シェアしますね。
とは言っても、コード的には大した違いはないのですが、どうやらExcel VBAでは、オートシェイプの文字列の扱い方とコメントの文字列の扱い方が異なるようだったので、別のツールとして分けました。
普段業務の中で、Excelのコメント機能を使う場面があると思いますが、コメントのままだとデータとして扱いにくいので、
「全てのコメントをセルに出力したい」
って場合はたまにあると思います。
私も以前、欲しいなと思っていた機能でして、アイディアリストにストックしておいたので、今回作成してみることにしました。
同じようなニーズがある方やこれからVBAを学びたい方は、この記事内にプログラムコード全文も含めてますので、利用してもらえればと思います。
なお、ツールの利用は自己責任でお願いします。特にVBAは、一旦処理が走るとエラーがあってもctl + z 等で戻ることができませんので、必ず初めて使うときはバックアップ等を取ってから利用してくださいね。
Excel VBA ツール : 全シートの コメント をセルに一覧に出力する
マクロ ツール の機能、使用用途、使い方
機能
このツールの機能は、
Excel ブックに含まれる全てのシートの全てのコメントを抽出して、
- シート名
- コメントの文字列
を指定したセルに一覧に出力する、というものです。
使用用途
使用用途は、想定としては
- コメントをセルに一覧表示して対応の漏れをなくしたい
- コメントで記入した文字列を他で再利用したい
等です。
コメントに記載した文字列を一つづつコピーしたりするのは面倒ですし、データとして扱いにくいので、セルに一覧出力しておくと何かと便利だと思います。
使い方
コードをコピーする場所やプログラムの起動の仕方は後ほど説明しますが、使い方としては、
- 何かしらのコメントがある状態で
- マクロを起動して
- コメント一覧を出力したいセルを指定すると
- 自動的にコメント一覧のテーブルが作成される
という感じです。
画像つきで示すと、
①何かしらのコメントがある状態で
例として適当にコメントを作ってみました。
各コメント内に書いてある文字列(Comment1 , Hello World! ..etc)が今回セルに出力したい文字列です。
②マクロを起動して
起動の仕方はいろいろとあります。
ご自身でも調べてみると良いと思いますが、一番わかりやすい方法としては、
「開発」→「マクロ」
と進むと実行できるマクロの一覧が表示されるので、そこで今回は「commentExtract」という名前にしているので、それを選択して「実行」を押せば実行されます。
うまくできましたかね?
もし、何かエラー等があれば、コメントかTweetでご連絡いただけると幸いです。
③コメント一覧を出力したいセルを指定すると
今回のツールは起動するとポップアップが出てきて、出力先のセルを指定できるようにしてます。
適当なセルをクリックして指定ください。
④自動的にコメント一覧のテーブルが作成される
セルを指定した後に「OK」をクリックすれば自動的にコメント一覧の表が作成されます。
なお、今回のツールを使うときは基本的にコメントが記入してあるシートとは別の新しいシートを作成して、そこでマクロを実行してください。
VBA コードの表示
コードの全文は下記の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
Sub accelerate() With Application .ScreenUpdating = False .DisplayAlerts = False .EnableEvents = False .Calculation = xlCalculationManual End With End Sub Sub clearAccelerate() With Application .ScreenUpdating = True .DisplayAlerts = True .EnableEvents = True .Calculation = xlCalculationAutomatic End With End Sub Sub commentExtract() On Error GoTo Err Dim sheets As Worksheet, i As Integer, m As Integer, thisSheet As Worksheet Set thisSheet = ActiveSheet Dim rng As Range Set rng = Application.InputBox(prompt:="Choose the cell to open the table", Type:=8) Dim n As Integer Dim com As Comment i = rng.Row m = rng.Column Call accelerate Done: With thisSheet .Cells(i, m).Value = "Sheet Name" .Cells(i, m + 1).Value = "Comment Text" End With With thisSheet.Range(Cells(i, m), Cells(i, m + 1)) .Interior.ColorIndex = 48 .Font.ColorIndex = 2 .Font.Bold = True End With For Each sheets In ActiveWorkbook.Worksheets If sheets.Comments.Count > 0 Then For Each com In sheets.Comments thisSheet.Cells(i + 1, m).Value = sheets.Name thisSheet.Cells(i + 1, m + 1).Value = com.Text i = i + 1 Next com End If Next sheets For n = 1 To 3 thisSheet.Columns(m).EntireColumn.AutoFit m = m + 1 Next n Call clearAccelerate Exit Sub Err: End Sub |
- どこにコードをコピーすれば良いのか
- VBAマクロを起動する上での注意点
については下記の記事で詳しく書いているので、そちらを参考にされてください。
この記事もツール紹介の記事ですが、「VBA プログラムの表示」の項目の後に詳しいコピーの仕方や注意点について書いてます。
ということで本日は以上になります。
私もまだまだVBA含めプログラミングを学習中の身なので、
「もっとこうした方が効率的に書けるよ!」
「こんな業務効率化したいんだけど、VBAでできるかな?」
など、ご指摘やアイディアなどをいただけると嬉しいので、コメントやいただけると幸いです!
また、Excel VBAを独学したい方向けに記事を書きましたので、興味がある方はご参考にされてみてください↓
それでは、お読みいただきありがとうございました。
Twitter(@ProgYuki)でも情報発信しているので、ぜひフォロー、いいね、RT等お願いします!
ゆう
コメント