Wordファイルにコメントが沢山あるとき、
一覧で見たい場合に、コメントを
抽出するVBAを紹介します。
長文の校正や契約書などで
コメントが多いと抜き出して一覧化した
場面があるかなと考えます。
具体的な動作は、このようにあるコメントを
Excelのこのような一覧にすることができます。
コメントを抜き出すWord VBA
今回テストで作ってみた
コメントを抜き出すVBAは以下の通りです。
Sub CommentsExtract() '変数定義 Dim c As String Dim cmt As Word.Comment Dim doc As Word.Document 'コメントを拾い出す For Each cmt In ActiveDocument.Comments c = c & Left(cmt.Date, 10) & "," & cmt.Author & "," & cmt.Index & "," & cmt.Range.Text & vbCrLf Next '新しいファイルに拾い出したコメントを貼り付ける Set doc = Documents.Add doc.Range.Text = c End Sub
よくわからなくても、こちらを貼り付けて
コメントがあるWordファイルで実行すれば
Wordファイルにコメントを全て
抜き出すことができます。
Wordに抜き出しているのは、
VBAをシンプルに見せるためです。
後述する区切り位置の設定で
EXCELに加工するのは楽なはずなので、
今回はコメントを抽出するところを
中心に説明するためWordに貼り付けてます。
コメントを抜き出すWord VBAの説明
設計手順
設計手順として、
- 変数の定義
- カウンタ
- コメント
- Wordファイル
- Eachによって全てのコメントを抜き出す
- 新しいWordファイルを追加する
- 抜き出したコメントを貼り付ける
というものにしています。
変数定義
まず、変数の定義から。
Dim c As String Dim cmt As Word.Comment Dim doc As Word.Document
cは、コメント1、コメント2、…と
なっていくものの順序を指定する
ためのものです。
1番目のコメント、2番めのコメント、
…、c番目のコメント、のように
変数化して全てを選択するために
定義します。
cmtは、As Word.Commentとしてるように
コメントですよと定義してます。
docは、新しいWordファイルを
追加するためにつけました。
For Each 〜 Next
全てを拾い出す部分です。
For Each XX
〜
Next
という形で全てのXXに対して
〜をするという意味になります。
以下の文章は、現在アクティブになっている
Wordファイルの全てのコメントに対して
c=c…をする
という意味です。
For Each cmt In ActiveDocument.Comments c = c & Left(cmt.Date, 10) & "," & cmt.Author & "," & cmt.Index & "," & cmt.Range.Text & vbCrLf Next
新しいドキュメントに貼り付ける
全てのコメントを改行を込みにした状態で
cという変数に入れ込んでいる状態です。
ここに、新しいドキュメントを挿入します。
Set doc = Documents.Add
次にそのドキュメントに
cとしてまとめた変数を貼り付けます。
doc.Range.Text = c
以上で完了です。
このVBAを実行すると以下のような
カンマ区切りのWordファイルが出来上がります。
あとは、Excelに貼り付けて
区切り位置で分ければできあがりです。
カンマ区切りはEXCELに入れやすくするため
わざわざ下記のWordファイルで仕上げているのは、
プログラムをわかりやすくするためです。
こちらのExcelの状態に一気に仕上げられますが、
人手だけで行った場合に一番手間がかかるのは
抽出作業です。
最低でも、その抽出作業を簡略化するため
上記のプログラムのみ示して、あとは
手作業の加工で見せています。
気が向いたら、一気に仕上げる
プログラムもご紹介します。
【編集後記】
論文の構成を大きく変えてみました。
ある程度形にするまでは、これくらいの
変更が何度か続くのかなと感じてます。
【運動記録】
ジョギング○ ストレッチ○ 筋トレ○ サプリ○
【子育て日記(3歳)】
今日の推し恐竜は、ギガノトサウルスです。