質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

Q&A

1回答

709閲覧

Wordの検索結果を、前後5文字を含めてExcelに抽出したい

mrymikk

総合スコア0

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

0グッド

0クリップ

投稿2022/07/26 01:45

VBA初心者です。
Excelの用語リストをWordで検索をかけ、検索結果の前後5文字を含めてExcelに抽出したいです。

◆実現したいこと
・Wordの本文・表・テキストボックスを対象に、用語リストの単語を検索にかける
・検索してヒットした前後8文字を含めた分を抽出(表・テキストボックスは前後の文字が5文字ない場合もあります)
・該当のページ番号も抽出
・できれば抽出結果は新規Workbookに作成し、シート名は対象のWordファイル名にしたい
・できれば前後の文字数は都度設定できるようにしたい
・できればWordを複数ファイル対象にしたい
・できればWordの検索してヒットした単語を蛍光ペンでマークしたい

◆仕上がりの理想像
Word例文:
7/28PMまでに、6TBの外付けハードディスクを、TBSDXビジネス局の鈴木PM様宛に送って下さい。

Excel用語リスト例:

用語意味
PMプロジェクトマネージャー
SDSDカード
TBテラバイト

希望の抽出結果例:

用語使用部分ページ番号
PM7/28PMまでに、11
PMス局の鈴木PM様宛に送っ1
SDクを、TBSDXビジネス1
TBカードと6TBの外付けハ1
TBィスクを、TBSDXビジ1

発生している問題・エラーメッセージ

実行時エラー’438 オブジェクトは、このプロパティまたはメソッドをサポートしていません

該当のソースコード

VBA

1Sub 用語検索() 2 3Dim wdApp As Word.Application 4Set wdApp = GetObject(, "Word.Application") 5 6Dim i, MaxR, iRow As Integer 7MaxR = Sheets("用語リスト").Cells(Rows.Count, 1).End(xlUp).Row 8iRow = 2 9 10Dim wd As Variant 11Dim Page As Variant 12Dim wdStart, wdEnd As Variant 13Dim myRange As Range 14 15For i = 10 To MaxR 16 wd = ThisWorkbook.Worksheets("用語リスト").Range("A" & i + 1).Value 17 With wdApp.Selection 18 .Move unit:=wdStory, Count:=-1 '文章の先頭にカーソルを移動 19 .Find.Text = wd 20 .Find.Forward = True 21 .Find.MatchWholeWord = True 22 .Find.MatchCase = True 23 .Find.Wrap = wdFindContinue 24 Do While .Find.Execute 25 myRange = Selection.Range(Start:=Selection.Character.Start - 5, End:=Selection.Character.End + 5) 26 Page = .Information(wdActiveEndPageNumber) 27 With ThisWorkbook.Worksheets("結果") 28 .Range("A" & iRow) = wd 29 .Range("B" & iRow) = myRange 30 .Range("C" & iRow) = Page 31 End With 32 iRow = iRow + 1 33 Loop 34 End With 35Next 36 37Application.ScreenUpdating = True 38Set wdApp = Nothing 39 40MsgBox "完了しました" 41 42End Sub

試したこと

myRange = Selection.Range(Start:=Selection.Character.Start - 5, End:=Selection.Character.End + 5)
ここでひっかかるので、おかしいのだと思いますが、どうすればよいかわからず、、

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Selection.CharacterじゃなくてSelection.Charactersのはずです、
とはいえSelection.Charactersだとしても使い方まちがってるっぽいですが(Start,Endプロパティは存在しない)
しかもwdApp.Selectionのwithの中なのにSelection.Rangeしてるあたり
そのSelectionはExcelのSelectionのような気がしますが、意図としてはWordのほうな気がします。

投稿2022/07/26 02:31

RiaFeed

総合スコア2701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問