見出し画像

AIプロンプト使いがWord文書の情報を抜いてくるVBAスクリプトを作って見た

記事版LTです。XでWord文書のコメントを取り扱ってごにょごにょしているという業務の投稿を見て、インスピレーションが働きました。

それ、WordのVBAスクリプトで出来るんじゃない?

業務の説明

Word文書にコメントが書かれている
それを文書と切り離してリストとして眺めたい
(たぶん、こういう感じ)

AIプロンプト使いは考えた

WordのVBAマクロ作ろう
(ただ、作りたいだけ。ちょうどいいネタが転がってきたなと)
ところで、、、Wordの変更履歴とコメントって、データ構造どうなってましたっけ?

Wordの変更履歴とコメントを新規のWord文書(以下、コメントリスト)にまとめるVBAスクリプトを作成してください。
コメントリストに書き加えることができる要素を先に提示してください。
そこから出力フォーマットを決めてからVBAスクリプトを書き出してもらうので、先に検討させてください。

いつもの、目的と指示です。今回は目的はゴールまで書いていますが、指示そのものはちょっと手前で止めています。何かしらの経過や結果を見てから判断させてほしい場合は、こんな感じで進めます。

ChatGPTからの回答

抜粋

まぁ、優秀です。ふむふむコレクションがそう組み立てられていると、なるほど勉強になります(絶対忘れる)。
もうなんか上手くいきそうなんで、いきなりVBAスクリプト(VBAマクロ)を書いてもらいました。

まず冒頭に対象の文書名を記載してください。
そのあと
・コメント番号と、作成者、作成日時、ページ番号/段落番号を1行に記載してください
・改行して、コメントの挿入されたテキストを記載してください
・改行して、コメントの本文を記載してください
・改行してください
これをコメントの数分だけ繰り返して、コメントリストを作成するVBAマクロを作成してください。
文章への装飾は不要です。

ChatGPTからの回答

優秀です

Public Sub ExportCommentsToNewDocument()
    ' ===========================
    ' コメント出力マクロ
    ' ===========================
    ' ・対象のWord文書に含まれるすべてのコメントを新しい文書に出力します。
    ' ・出力形式は以下の3行+改行で構成されます:
    '     1. コメント番号、作成者、作成日時、ページ番号/段落位置
    '     2. コメントが挿入された対象テキスト
    '     3. コメントの本文
    '
    ' ・出力文書の冒頭には、対象文書のファイル名を記載します。
    ' ・ページ番号は wdActiveEndPageNumber を使用して取得しています。
    '     - 表示モード(印刷レイアウトなど)によって正確性が変動する場合があります。
    ' ・段落位置は Paragraph の Start プロパティを使用し、挿入位置のオフセットを近似的に表しています。
    ' ・出力には装飾(フォントサイズ、色など)は加えません。
    ' ===========================

    Dim srcDoc As Document
    Dim tgtDoc As Document
    Dim cmt As Comment
    Dim i As Integer
    Dim commentText As String
    Dim rng As Range
    Dim paraIndex As Long
    Dim pageNumber As Long

    Set srcDoc = ActiveDocument
    Set tgtDoc = Documents.Add

    ' 文書名の出力
    tgtDoc.Content.InsertAfter "対象文書: " & srcDoc.Name & vbCrLf & vbCrLf

    ' コメント処理
    For i = 1 To srcDoc.Comments.Count
        Set cmt = srcDoc.Comments(i)
        Set rng = cmt.Scope

        ' ページ番号と段落位置の取得
        pageNumber = rng.Information(wdActiveEndPageNumber)
        paraIndex = rng.Paragraphs(1).Range.Start

        ' 1行目:コメント番号、作成者、日時、ページ/段落
        commentText = "コメント " & i & ": " & _
                      cmt.Author & " - " & _
                      cmt.Date & " - " & _
                      "ページ " & pageNumber & " / 段落位置 " & paraIndex

        tgtDoc.Content.InsertAfter commentText & vbCrLf

        ' 2行目:対象テキスト
        tgtDoc.Content.InsertAfter rng.Text & vbCrLf

        ' 3行目:コメント本文
        tgtDoc.Content.InsertAfter cmt.Range.Text & vbCrLf

        ' 改行
        tgtDoc.Content.InsertAfter vbCrLf
    Next i

    ' 完了メッセージ
    MsgBox "コメントリストを新しい文書に出力しました。", vbInformation
End Sub

Word文書にて

Word文書にてVBEを開く(Alt+F11)
Normal → 標準モジュール → 挿入 → 標準モジュール
の順に辿る

そうすると新規のエディタが開かれるので、そこに上記のソースコードを張り付け、保存する(Ctrl+S)

マクロを実行するため、マクロを表示(Alt+F8)する
そうすると「ExportCommentsToNewDocument」というマクロが居てるので、選択して、「実行」ボタンを押すと。。。

新規Word文書が勝手に立ち上がって、コメントだけが書き込まれています!

まとめ

結構いろんな言語でスクリプトを書いてもらっていますが、めちゃめちゃ品質いいです。今までは公式リファレンス眺めつつネットで検索しながら作っていたものが、サクッと出てくる。

今回の場合だとコメントリストはWord文書の品格の欠片も無いようなただのプレーンテキストになっています(せめて同一の段落で改行いれたらよかった)が、いろいろ装飾したり、もとの文書へハイパーリンク付けたりといった、夢は広がりそうです。

ぜひ、AIを身の回りの課題解決に利用してみてほしいです。

「AIプロンプト使い:ミラノ」(まだ使える)

いいなと思ったら応援しよう!