システムwiki

特定の単語または記号を含むすべての段落を選択します[段落の収集]

JPH_B1 解決済 最終更新日:2022-05-24 11:05

単語または記号を含むすべての段落を選択して、元のテキストに表示されるのと同じ連続した順序でコピーして貼り付けることはできますか?

そうでない場合、マクロはおそらくこれを行うことができますか?

返信リスト(回答:10)

10 #
JayFree 1

いいえ、Wordはそれを直接行うことはできません.

マクロがない場合は、ナビゲーションペインの検索ボックスを使用し、そこにある[結果]タブを表示することで、検索語が表示されている場所だけを強調表示できます.次に、各結果をクリックし、その段落を選択して、コピーして貼り付ける必要があります.

マクロを使用すると、簡単に作業を実行できますが、Wordマクロを使用しているため、すべてのオカレンスを一度に選択する必要はありません. 不連続な選択はできません ドキュメント内の.代わりに、各オカレンスがループ内で検出されると、マクロは段落をコピーできます.

以下は、テクニックを説明する最低限のマクロです.より多くのコードを使用すると、[高度な検索]ダイアログで使用できるすべてのオプションを提供するように検索を行うことができます.

Sub CopyFoundParagraphs()
Dim sourceDoc As Document
Dim destDoc As Document
Dim srchRg As Range
Dim copyRg As Range
文字列としての薄暗いsearchTerm
Dim count As Long
searchTerm= InputBox( "検索する単語またはフレーズを入力してください:"、 "検索語")
searchTerm= ""の場合、Subを終了します
sourceDoc=ActiveDocument
を設定します destDoc=Documents.Add
を設定します srchRg=sourceDoc.Range
を設定します カウント=0
srchRg.Findを使用
.Text= searchTerm
実行中
カウント=カウント+1
copyRg=destDoc.Range
を設定します copyRg.Collapse wdCollapseEnd
copyRg.FormattedText= srchRg.Paragraphs(1).Range.FormattedText
ウェンド
で終わる
count=0の場合Then
destDoc.Range.Text="インスタンスが見つかりません"
Ifを終了
サブの終了

応答10# ->にスキップ
9 #
JPH

それは機能し、本当に感謝しています.

1つの問題は、クエリWordが見出しにある場合です.この場合、マクロは見出しとその内容を何度もコピーします(10ページのテストファイルから500ページのファイルを作成しました).

私はそれが起こらないことを簡単に確かめることができるので、それは問題ではありません.しかし、それは私が理想的にやりたいこと、つまり段落ではなく見出しとその内容を収集することにつながります.3つの見出しに*記号があるとします(テキストにはありません).私はあなたのマクロを実行しました
*を含む3つの見出しタイトルが正しく抽出されました.コンテンツもコピーするのはどれほど難しいでしょうか?

PS:見出しのみを表示するアウトラインモードでマクロを実行しましたが、動作が異なります.3つの見出しのタイトルはコピーされますが、不思議なことにテキストの一部もコピーされます(テキスト自体に*がない場合でも).

応答9# ->にスキップ
7 #
DougRob

ジェイが寝ている間...

興味のあるのは見出し1のスタイルの見出しであるとすると、次のようになります.

Dim sourceDoc As Document
Dim destDoc As Document
Dim srchRg As Range
Dim copyRg As Range
文字列としての薄暗いsearchTerm
Dim count As Long
Dim i As Long
Dim rngfound As Range
searchTerm= InputBox( "検索する単語またはフレーズを入力してください:"、 "検索語")
searchTerm= ""の場合、Subを終了します
sourceDoc=ActiveDocument
を設定します destDoc=Documents.Add
を設定します srchRg=sourceDoc.Range
を設定します カウント=0
srchRg.Findを使用
.Text= searchTerm
実行中
カウント=カウント+1
copyRg=destDoc.Range
を設定します copyRg.Collapse wdCollapseEnd
If srchRg.Style= "Heading 1" Then
rngfound= srchRg.Paragraphs(1).Range
を設定します rngfound.End= sourceDoc.Range.End
rngfoundを使用
For i= 2 To.Paragraphs.count
If.Paragraphs(i).Style= "Heading 1"またはInStr(.Paragraphs(i).Range、searchTerm)>0 Then
rngfound.End= rngfound.Paragraphs(i-1).Range.End
終了
Ifを終了
次は
で終わる
Ifを終了
copyRg.FormattedText= rngfound.FormattedText
ウェンド
で終わる
count=0の場合Then
destDoc.Range.Text="インスタンスが見つかりません"
終了する場合

応答7# ->にスキップ
3 #
JPH

レベル2の見出しと、レベル3などを含むその下のテキストをコピーするように、マクロを変更しようとしました.

「見出し1」を「見出し2」に変更するだけでは、次のレベル1やその他すべてを含む、選択基準を満たす最初に検出された見出し2の下のすべてのテキストがマクロによってコピーされるため、明らかに十分ではありません.

>

編集:最初の「見出し1」だけを「見出し2」に変更する必要があり、2番目の「見出し2」は機能しないことがわかりました.

応答3# ->にスキップ
1 #
DougRob

そのためには、以下を使用する必要があります:

Dim sourceDoc As Document
Dim destDoc As Document
Dim srchRg As Range
Dim copyRg As Range
文字列としての薄暗いsearchTerm
Dim count As Long
Dim i As Long
Dim rngfound As Range
searchTerm= InputBox( "検索する単語またはフレーズを入力してください:"、 "検索語")
searchTerm= ""の場合、Subを終了します
sourceDoc=ActiveDocument
を設定します destDoc=Documents.Add
を設定します srchRg=sourceDoc.Range
を設定します カウント=0
srchRg.Findを使用
.Text= searchTerm
実行中
カウント=カウント+1
copyRg=destDoc.Range
を設定します copyRg.Collapse wdCollapseEnd
If srchRg.Style= "Heading 2" Then
rngfound= srchRg.Paragraphs(1).Range
を設定します rngfound.End= sourceDoc.Range.End
rngfoundを使用
For i= 2 To.Paragraphs.count
If.Paragraphs(i).Style= "Heading 1" Or.Paragraphs(i).Style= "Heading 2" Or InStr(.Paragraphs(i).Range、searchTerm)>0 Then
rngfound.End= rngfound.Paragraphs(i-1).Range.End
終了
Ifを終了
次は
で終わる
Ifを終了
copyRg.FormattedText= rngfound.FormattedText
ウェンド
で終わる
count=0の場合Then
destDoc.Range.Text="インスタンスが見つかりません"
終了する場合

応答1# ->にスキップ
2 #
JPH

もちろんその通りです.私の解決策は、コピーする見出しの後に見出し2がなくなったためにのみ機能しました.

応答7# ->にスキップ
4 #
JayFree

それは私に真夜中頃に眠くならないように教えてくれるでしょう...ありがとう、ダグ!

応答7# ->にスキップ
6 #
JPH

実行すると、行に変数が設定されていないというエラーメッセージが表示されます

copyRg.FormattedText= rngfound.FormattedText

見出し1を使用していませんでした...

したがって、意図したとおりに機能し、これは非常に便利です.

応答9# ->にスキップ
8 #
JayFree

何百回もの繰り返しがどのように発生するのかわかりません.ドキュメント内のテキストか、マクロに検索するように指示したテキストのいずれかに、私が考慮していない何かがあるはずです.テストファイルをそのような共有サイトにアップロードしていただけませんか
Dropboxまたはonedriveとして、ダウンロード用のリンクをここに投稿しますか?

「見出しとその内容」とは、見出しとその下のすべてのテキストを意味しますが、同じレベルの次の見出しは含まれません.その状況は今まで見たことがないので、どれだけの仕事になるのかわかりません.聞こえます
アウトラインビューで処理する必要があるようですが、簡単なテストでは、そのようには機能しないことが示されています.何ができるかを確認するために、翌日か2日かけて実験します.

応答8# ->にスキップ
5 #
JPH

ジェイ、私は小さなテストファイルで問題を再現しようとしましたが、再現されません.初めて試したときに何かが起こったに違いないと思いますが、それを再現することもできないようです.