重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

wordマクロについて教えてください

文字列A~文字列B
必要部分
文字列A’~文字列B’

という構成で必要部分だけ残したいのですが、難しくて。。
※文字列A、B、A'、B'は文中に1度しか出てこない事は確認済みです

3万文字の中から100文字程度残したいのですが、1000ファイルあるので手作業ではとても出来なくてマクロでやってみようかと思ったのですが

1.文字列Aを検索→範囲指定開始 文字列Bを検索→範囲指定終了 という考えで合っているのか
2.コード、参考になるWEBなど教えてください
3.文字列に「”」が含まれている場合の処置

以上よろしくお願いします

A 回答 (3件)

もっとスマートな書き方があると思いますが、とりあえずは提示できる


マクロの例です(記録マクロそのままを利用しています)。

文字列A~文字列B
必要部分
文字列C~文字列D
として処理しています。

Sub test()
Call Macro1
Call Macro2
End Sub

Private Sub Macro1()
 Selection.Find.ClearFormatting
 With Selection.Find
  .Text = "文字列A"
  .Replacement.Text = ""
  .Forward = True
  .Wrap = wdFindContinue
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = False
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchWildcards = False
  .MatchFuzzy = True
 End With
 Selection.Find.Execute
 Selection.Extend
 Selection.Find.ClearFormatting
 With Selection.Find
  .Text = "文字列B"
  .Replacement.Text = ""
  .Forward = True
  .Wrap = wdFindContinue
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = False
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchWildcards = False
  .MatchFuzzy = True
 End With
 Selection.Find.Execute
 Selection.Delete Unit:=wdCharacter, Count:=1
End Sub

Private Sub Macro2()
'
' Macro1 Macro
'
'
 Selection.Find.ClearFormatting
 With Selection.Find
  .Text = "文字列C"
  .Replacement.Text = ""
  .Forward = True
  .Wrap = wdFindContinue
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = False
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchWildcards = False
  .MatchFuzzy = True
 End With
 Selection.Find.Execute
 Selection.Extend
 Selection.Find.ClearFormatting
 With Selection.Find
  .Text = "文字列D"
  .Replacement.Text = ""
  .Forward = True
  .Wrap = wdFindContinue
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = False
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchWildcards = False
  .MatchFuzzy = True
 End With
 Selection.Find.Execute
 Selection.Delete Unit:=wdCharacter, Count:=1
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます うまく動きました
これで大きく削れるのであとは細かいところは参考にしてやってみます

お礼日時:2020/03/02 20:09

(´・ω・)...ファイルごとに条件が違うなら、一つずつ手作業が基本だお。


そもそもの考え方が間違っているじょ。
    • good
    • 0
この回答へのお礼

文字列A、B、A'、B'は同じで間が違うって書いてるんですけど。。
理解できないので書き方が悪かったみたいですね

お礼日時:2020/03/02 20:09

(´・ω・`)たかだか1000ファイルなら、手作業で良いと思うんだ。


それが10万ファイルとか100万ファイルとかだったら、さすがに考えるけどね。
マジで。

・・・本題・・・

とりあえず、「マクロの記録」で ”Word” という文字列を ”ワード” という文字列に「全て置き換える」動作を記録してみました。


Sub Macro1()
'
' Macro1 Macro
'
'
 Selection.Find.ClearFormatting
 Selection.Find.Replacement.ClearFormatting
 With Selection.Find
  .Text = "Word"
  .Replacement.Text = "ワード"
  .Forward = True
  .Wrap = wdFindContinue
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = False
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchWildcards = False
  .MatchFuzzy = True
 End With
 Selection.Find.Execute Replace:=wdReplaceAll
End Sub


こんな感じになる。
必要な「置換」を必要な回数繰り返すマクロにすれば良いでしょう。
※「置換」で ”ワード” を空白にすれば「削除」になります。

・・・
あ。上のコードは行頭の連続した半角スペースを全角スペースにしています。注意してください。
    • good
    • 0
この回答へのお礼

ありがとうございます 文字を置換するのは出来るんですけど、文字列A~Bまでの内容はファイルによって違うので単純に置換では処理できませんでした
今後、同じような処理が必要になってくるので手作業では厳しいんですよね

お礼日時:2020/03/02 17:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!