『ボヘミアン・ラプソディ』はなぜ人々を魅了したのか >>

ワード(Word)で複数の文字を一括・連続置換するマクロを作りたいのです。
次の回答を参考にしてマクロを作ってみました。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=994495

ところが、置換したい単語が100くらいになってきて扱いづらいので、
ワード(又はテキストやエクセルでも可)の置換文字のリストのファイルを参照して、同じように連続置換させたいのですが、どのような方法があるでしょうか?

シェアウェアでも同様の機能をもつものがありますが、自由にカスタマイズできないので使えません。
(置換後の文字列に蛍光ペンをかけたいので)

このQ&Aに関連する最新のQ&A

A 回答 (2件)

過去質問に回答が出ている者です。


ファイルのもっとも原始的なものはテキストファイルです。
この際はCSVファイルを使います。
ワードの文章に
名称 関東大会
開催地 東京都
時刻  1時
参加  小学生
とあるとして
メモ帳に
関東,東北
東京都,宮城県
小学,中学
1時,2時半
のようなのを(実際例では100行ばかり)作り、名前をつけて保存します。
各行の、各ペアーはカンマの左を、右の語句で置き換えるつもりです。
この場合は「置換2.csv」にしてます。
VBEの標準モジュールに
Sub test06()
Open "置換2.csv" For Input As #1
While Not EOF(1)
Line Input #1, a
s = Split(a, ",")
MsgBox s(0) & " " & s(1)
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = s(0)
.Replacement.Text = s(1)
.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
Wend
Close #1
End Sub
を貼り付け実行します。
結果
名称 東北大会
開催地 宮城県
時刻  2時半
参加  中学生
ただ注意事項は
東京都と東京など1部共通語があるときは語数が長いほうを、CSVファイルの先に置くこと。
先に出現の語で変換後、後出の語に当てはまり、後出のペアーで変換されて、うまく思い通りに行かない場合があるかもしれないので、ロジック的に難しい面を含んでいるように推測するが、普通のケースでは使えるように思う。
    • good
    • 0
この回答へのお礼

ありがとうございます!!
VBAは素人ですが、見よう見まねで少しいじってみました。
変更履歴をONにするために、次の文を追加して、
With ActiveDocument
.TrackRevisions = True
.ShowRevisions = True
CommandBars("Reviewing").Visible = True
End With

置換語のダイアログは隠すようにしました。
'MsgBox s(0) & " " & s(1)

ちなみに、Openのファイルのパスの設定がよく分からないので、とりあえず"c:\置換2.csv"にしたらうまくいきました。
「取扱い注意=OK」「取(り)扱います=NG」のようなものは、置換よりもコメント付与でチェックするなどの工夫が必要。
自分のイメージに近いものが出来上がりそうです。ありがとうございました!

お礼日時:2005/12/03 12:47

単にテキストの文字列置換であれば、「Speeeeed」というフリーソフトはいかがでしょう。

(参考URL)
私も実際に使用していましたが、動作も快適だと思います。
宜しければ試してみて下さい。

参考URL:http://akky.cjb.net/download/index.html
    • good
    • 0
この回答へのお礼

ありがとうございます。Speeeeedは気になっていましたが、既に書式やレイアウトが完成しているワード文書を置換して、変更履歴で確認したいのでNGなのです。

お礼日時:2005/12/03 11:56

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QWordで複数の単語を一括置換するマクロはありませんか?

Wordで複数の単語を一括置換するマクロはありませんか?

産業翻訳をしています。
現在は、テキスト文書に対し、手作業では不可能な大量の単語を、自作の辞書を使って一括置換しています。
水野麻子さんのブログhttp://ameblo.jp/saglasie/entry-10519224366.htmlによると、
この作業をWordでできて、さらに置換部分をハイライト表示したり、置換した単語のリストが自動的に作成されるマクロがあるようなのですが、ネット上で検索しても見つかりません。
無料公開はされていないのでしょうか?
こうした一括置換機能はどんなソフトにも標準装備されている、といった記述もネット上で見つかるのですが、どこにあるのかわかりません。
簡易版なら同サイトで公開されていますが、ハイライト表示やリスト自動作成は付加されていません。

もし無料公開がないのでしたら、このマクロの電子版や本の購入も考えています。

このマクロの入手経路をご存知の方おられませんか?

Aベストアンサー

>プログラミングに関して初心者なので、「標準モジュールを挿入して~」というあたりが分かりません。

Alt + F11 ->(VBEditor)-プロジェクト・ウィンドウで、開いたブックになっていることを確認して、- 挿入--標準モジュール をクリックすれば、そのモジュールが現れます。(図を参照)

たぶん、インターネット検索で、「マクロの基本」「標準モジュール」で出てくるのではないかと思います。VBAを扱うには、もう少し、基本的なマクロの使い方は知ったほうがよいですね。

ただ、今回のものは、新しいブックのThisDocument に貼り付けてしまってもエラーは発生しません。今回書いた内容のマクロは、偶然に、他のモジュールでも動くように書かれていますが、既に書いた所に、付け加えて貼り付ける場合は、一番トップから書かないといけません。今回のようなスタイルのものは、出来るなら、基本的には標準モジュールに書きます。

今回のようなスタイルは全バージョン向けにはできておりません。基本的には、97以降なら変わらないはずですが、どうしても、Wordにはない機能を補う必要性が出てきます。ExcelのVBAに借りるという方法もないわけではないのですが、せっかく、Office 2003 以降では、VB6 RunTime も標準ではインストールされていますから、それを使わない手はありません。水野さんのマクロは、その辺りは、どこまでサポートされているか分かりません。

それと、Excel VBAと大きな違いは、MS-Wordにはマクロを保存しておく場所に困るということです。私は、個別のドキュメントのモジュールに置くということをしていますが、最終の設計には、アドインを要求させられているように感じます。

しかし、その後、バージョンが上がって、MS-Wordは、COMアドインに移行しつつあるようです。Excel VBAよりもワンレベルもツーレベルも高い技術が要求されます。特に、MS-Word 2003 は、一部では、クラス・インスタンスの知識を要求されます。また、2007となると、一部で、Word Basic が出てきます。

それから、私は、「秀丸エディタ」は詳しくは知りませんが、いろいろツールが出ているようですね。当初、使おうと思ったこともあったのですが、当時は、正規表現で、いわゆる、Multiline 設定というか、改行を越えての検索・置換が出来ないという問題があって、私は利用しなかった覚えがあります。

私は、VZ エディタ→ Wz で続いていますが、Ver.6は、経営母体が変わったので、更新はしませんでした。こちらのマクロは、Cライクなので、なかなか飛びつきにくいです。その代わり、記録マクロの機能を持っています。正規表現は、新しい「秀丸エディタ」の正規表現ライブラリには劣りますが、その代わり、見米さんという方の、"YGrep"というアドインがあるので、マクロのように文章の置換が可能です。

産業翻訳でも、分野がありますから、コンピュータの英文に慣れていれば、MS-Word Macro の専門書は、例えば、オライリーなどで出ている本があります。日本語よりもマシだと思います。英語を勉強すれば、分かるようになると言っていた方がいましたが、ネイティブでも分からない人は分かりません。慣れしかありません。

MS-Wordで開発するなら、まだ、いろんな手段がありますが、簡単に使うならともかく、本格的には、なかなか入れない世界かもしれません。とにかく、MS-Word VBAは、Excelとは違ってユニークな世界かもしれません。

最後に、私の書いたようなVBAのコードは、基本的に著作権を主張できません。もちろん、ここの掲示板に、私個人の著作権が存在していませんが、プログラミングコードは、特別なもの以外は著作権がありません。だから、本来、必要以上の内容は、公開しないようにしなければなりません。その限度は心得ているつもりです。この程度のコードは、私の感覚では、そんなに難しいものではないということです。

>プログラミングに関して初心者なので、「標準モジュールを挿入して~」というあたりが分かりません。

Alt + F11 ->(VBEditor)-プロジェクト・ウィンドウで、開いたブックになっていることを確認して、- 挿入--標準モジュール をクリックすれば、そのモジュールが現れます。(図を参照)

たぶん、インターネット検索で、「マクロの基本」「標準モジュール」で出てくるのではないかと思います。VBAを扱うには、もう少し、基本的なマクロの使い方は知ったほうがよいですね。

ただ、今回のものは、新しいブックのT...続きを読む

QWORDで一括置換

WORDの文書内で複数の単語を一括置換したいのですがどうしたらよいですか?またmacでも同様にできますか?教えて下さい。

Aベストアンサー

ワードにおいて、1語の置換で、全て置換を選択する、マクロの記録を取り、複数語の配列を作って、置換操作の繰り返しを行うための、コードの改変を行うと出来そうです。
人手の操作をプログラムの繰り返しに置換えただけのものです。
Sub Macro17()
s1 = Array("京都", "本町", "2-")
s2 = Array("大阪", "伏見町", "3-")
For i = 0 To UBound(s1)
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = s1(i)
.Replacement.Text = s2(i)
.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
Next i
End Sub
s1とs2の行は、上下に付いて、左から対応していて、
s1--->S2に置換します。
配列の要素を増やせば、相当数までペアーを増やせます。
VBの行継続の仕方など、勉強は必要ですが。

ワードにおいて、1語の置換で、全て置換を選択する、マクロの記録を取り、複数語の配列を作って、置換操作の繰り返しを行うための、コードの改変を行うと出来そうです。
人手の操作をプログラムの繰り返しに置換えただけのものです。
Sub Macro17()
s1 = Array("京都", "本町", "2-")
s2 = Array("大阪", "伏見町", "3-")
For i = 0 To UBound(s1)
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = s1(i)
.Re...続きを読む

QEXCEL VBA でのワード置換

EXCEL VBA でのワード置換を教えてください。

EXCELからワードをオープンして文字列置換をしたいです。

Dim wdObj As Object
Dim wdDoc As Object
Dim objSelect As Object
Dim xResult As Boolean

Set wdObj = CreateObject("Word.Application")

wdObj.Visible = True
Set wdDoc = wdObj.Documents.Open(ActiveWorkbook.Path + "\Sample.doc")
Set objSelect = wdObj.Selection

objSelect.Find.Text = "*****"
objSelect.Find.Replacement.ClearFormatting
objSelect.Find.Replacement.Text = Format(35000, "###,###,###")

objSelect.Find.Execute(Replace:=wdReplaceAll)


上記コードで実行したところ、検索はできるのですが、置換ができません。
手動で置換フォームを出してみると、検索文字列、置換文字列ともに目的の文字列が入っています。
そのまま「全て置換」のボタンを押すと、問題なく置換されます。

色々調べてみたのですが、どのサイトもExecuteで置換できるように書かれていて、煮詰まってしまいました。

お知恵をお貸し下さい。

EXCEL VBA でのワード置換を教えてください。

EXCELからワードをオープンして文字列置換をしたいです。

Dim wdObj As Object
Dim wdDoc As Object
Dim objSelect As Object
Dim xResult As Boolean

Set wdObj = CreateObject("Word.Application")

wdObj.Visible = True
Set wdDoc = wdObj.Documents.Open(ActiveWorkbook.Path + "\Sample.doc")
Set objSelect = wdObj.Selection...続きを読む

Aベストアンサー

以下のマクロで試してみて。

Sub test()
 Dim wdObj As Object
 Dim wdDoc As Object
 Dim objSelect As Object
 Dim xResult As Boolean

 Set wdObj = CreateObject("Word.Application")
 wdObj.Visible = True

 Set wdDoc = wdObj.Documents.Open(ActiveWorkbook.Path + "\Sample.doc")
 Set objSelect = wdObj.Selection

 objSelect.Find.ClearFormatting
 objSelect.Find.Replacement.ClearFormatting
 
 With objSelect.Find
  .Text = "*****"
  .Replacement.Text = Format(35000, "###,###,###")
  .Forward = True
  .MatchFuzzy = True
  .MatchWholeWord = False
  .MatchCase = True
  .MatchWildcards = False
  .Forward = True
  .Wrap = 1 'wdFindContinue
  .Format = False
  .Execute , , , , , , , , , , 2 'wdReplaceAll
 End With

End Sub

ExcelでWordの置換を操作する場合
Find.Execute のパラメータを省略する場合「, , , , , , , , , , 2」の
ように書くほうが確実みたい。
https://msdn.microsoft.com/ja-jp/library/microsoft.office.interop.word.find.execute(v=office.11).aspx

それと、Selection.Find を使う場合は、条件を省略しないほうが良い
らしいです。
https://oshiete.goo.ne.jp/qa/5559086.html

以下のマクロで試してみて。

Sub test()
 Dim wdObj As Object
 Dim wdDoc As Object
 Dim objSelect As Object
 Dim xResult As Boolean

 Set wdObj = CreateObject("Word.Application")
 wdObj.Visible = True

 Set wdDoc = wdObj.Documents.Open(ActiveWorkbook.Path + "\Sample.doc")
 Set objSelect = wdObj.Selection

 objSelect.Find.ClearFormatting
 objSelect.Find.Replacement.ClearFormatting
 
 With objSelect.Find
  .Text = "*****"
  .Replacement.Text = Format(350...続きを読む

QエクセルVBAでワードの文字を検索して置換えたい

エクセル置換表を基に、開いてあるワードの文書内を検索して、該当の旧番号があれば、新番号に置換えるVBAのプログラムを
教えていただけませんか。
また、参考になる書籍等があれば教えていただけませんか。 

【実施内容詳細】
エクセル置換表を基に、開いてあるワードの文書内(ヘッダー、フッター含)を検索して、該当の旧番号があれば、新番号に置換える。
使用ソフト ワード エクセル 2003
使用ファイル名  A.doc B.xls

ステップ1 ワードの文書内に旧番号A1がないか検索して、A1があれば、新番号B1に置き換える。
ステップ2 ワードの文書内に旧番号A2がないか検索して、A2があれば、新番号B2に置き換える。
ステップ3 エクセルA列の最後(空欄)まで実施して終了する。

エクセル置換表

     A列  B列
    旧番号 新番号
 行2  A1    B1
 行3  A2    B2
 以下同様  

追記:
マクロを使用したことはありませんので事前設定方法も教えていただけませんか。 

Aベストアンサー

.Find.Executeの処理結果がうまく拾えなかったので、置換表のC列に出したのは、単に通過した、という意味、、、

Option Explicit
Sub WORD検索置換()
Const xPath = "D:\tmp\tmp\aho.doc"
Const xKey = "A"
Const xKey_Rep = "B"
Const wdReplaceAll = 2
Dim objWord As New Word.Application
Dim objDoc As Word.Document
Dim objSelection As Object
Dim xSheet As Worksheet
Dim xResult As Boolean
Dim xLast As Long
Dim kk As Long
Dim nn As Long
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set xSheet = Sheets("Sheet1")
xLast = xSheet.Cells(Rows.Count, "A").End(xlUp).Row
' Word文書を開く
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Open(xPath)
Set objSelection = objWord.Selection
With objSelection
For nn = 2 To xLast
If (xSheet.Cells(nn, xKey).Value <> Empty) Then
'objSelection.Find.Text = "Contoso"
.Find.Text = xSheet.Cells(nn, xKey).Value
.Find.Forward = True
.Find.MatchWholeWord = True
.Find.Replacement.Text = xSheet.Cells(nn, xKey_Rep).Value
xResult = .Find.Execute(Replace:=wdReplaceAll)
xSheet.Cells(nn, "C").Value = Empty
'if (xResult) then
xSheet.Cells(nn, "C").Value = "Done??"
'End If
End If
Next
End With
objWord.Documents.Close
'objWord.Quit
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

.Find.Executeの処理結果がうまく拾えなかったので、置換表のC列に出したのは、単に通過した、という意味、、、

Option Explicit
Sub WORD検索置換()
Const xPath = "D:\tmp\tmp\aho.doc"
Const xKey = "A"
Const xKey_Rep = "B"
Const wdReplaceAll = 2
Dim objWord As New Word.Application
Dim objDoc As Word.Document
Dim objSelection As Object
Dim xSheet As Worksheet
Dim xResult As Boolean
Dim xLast As Long
Dim kk As Long
Dim nn As Long
On Error Resume Next
Application.ScreenUpdating = Fal...続きを読む

QWORD VBA 繰り返し処理

WORD VBAについて教えてください。

つぎのようなマクロがあり、これを検索する文字列がなくなるまで、繰り返して、処理するようにしたいのですが、どうすればよいのでしょうか?

Sub Macro1()
Selection.Find.ClearFormatting
With Selection.Find
.Text = "あ"
.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.MoveRight Unit:=wdCharacter, Count:=1
End Sub

WORD VBAについて教えてください。

つぎのようなマクロがあり、これを検索する文字列がなくなるまで、繰り返して、処理するようにしたいのですが、どうすればよいのでしょうか?

Sub Macro1()
Selection.Find.ClearFormatting
With Selection.Find
.Text = "あ"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
...続きを読む

Aベストアンサー

こんにちは。

>繰り返し処理の書き方を知りたい
それは、サンプルが良くないですね。
直接の回答にはならないかもしれませんが、こういうのはどうかしら?

Sub SampleTest1()
Dim blnFound As Boolean
Dim rngContent As Range
Dim intCount As Integer

blnFound = True
Set rngContent = ActiveDocument.Content
intCount = 0

Do While blnFound = True
  With rngContent.Find
    .ClearFormatting
    .Wrap = wdFindStop
    .Text = "あ"
    .Execute
  End With
  blnFound = rngContent.Find.Found
  If blnFound = True Then intCount = intCount + 1
Loop
MsgBox (intCount & "個見つかりました。")
End Sub

こんにちは。

>繰り返し処理の書き方を知りたい
それは、サンプルが良くないですね。
直接の回答にはならないかもしれませんが、こういうのはどうかしら?

Sub SampleTest1()
Dim blnFound As Boolean
Dim rngContent As Range
Dim intCount As Integer

blnFound = True
Set rngContent = ActiveDocument.Content
intCount = 0

Do While blnFound = True
  With rngContent.Find
    .ClearFormatting
    .Wrap = wdFindStop
    .Text = "あ"
    .Execute
  End...続きを読む

Q複数のword文書の中の語句(単語)を一度に検索するにはどうすればよい

複数のword文書の中の語句(単語)を一度に検索するにはどうすればよいでしょうか。
(word2007 vistaを使用しています)

Aベストアンサー

ワードの範囲内の機能では、ないのではないでしょうか。
ワードのVBA(プログラム)を作り、2以上の文書の語句検索を行う(文書ごと繰り返し。検索のプログラムコードはWEBにあふれている。マクロの記録を修正することでも出来る)。
検索用に文書を1つにまとめる。
(または、書式を考えなくて良い検索なら、それぞれの文書をテキストファイル化して1つにまとめ(比較的易しい)、検索機能の優れたテキストエディターを使う)
他のぴったりの検索用ソフト(多ファイル一括検索)を探す。
などを思いつきますが。

QWordで複数の単語を一括置換するマクロはありませんか?

Wordで複数の単語を一括置換するマクロはありませんか?

産業翻訳をしています。
現在は、自作の辞書を使ってテキスト文書内の登録単語を一括置換しています。
水野麻子さんのブログhttp://ameblo.jp/saglasie/entry-10519224366.htmlによると、
この作業をWordでできて、さらに置換部分をハイライト表示したり、置換した単語のリストが自動的に作成されるマクロがあるようなのですが、ネット上で検索しても見つかりません。
無料公開はされていないのでしょうか?
こうした一括置換機能はどんなソフトにも標準装備されている、といった記述もネット上で見つかるのですが、どこにあるのかわかりません。

もし無料公開がないのでしたら、このマクロの電子版や本の購入も考えています。

このマクロの入手経路をご存知の方おられませんか?

Aベストアンサー

簡易版なら、水野麻子さんのブログにて紹介していますよ。
http://ameblo.jp/saglasie/entry-10562628443.html

本来は書籍のほうも参考にするようですが、蛍光ペンによる
ハイライトやリストの作成などは作者から直接入手するしか
ないかと思います。

私はマクロの基礎程度の知識しかないので、希望してされた
マクロを紹介できませんが、ここの回答者の中にはある程度
Wordマクロについて知識をお持ちの方もいますので、個々の
質問をすることでヒントを得ることができるかもしれません。
その場合、カテゴリとしてMS OfficeまたはOffice系ソフト
にて質問されたほうが回答者の目に触れる可能性があります。

蛍光ペンを二重下線された文字列の検索結果から、置換にて
設定する簡単なマクロを紹介して参考まで紹介しておきます。

Sub test01()
'
' 検索条件で二重下線、置換条件で蛍光ペン
'
 With Selection.Find
  .ClearFormatting
  .Replacement.ClearFormatting
'検索で二重下線
  .Font.Underline = wdUnderlineDouble
  .Text = ""
'置換で蛍光ペン
  .Replacement.Highlight = True
  .Replacement.Text = "^&"
'その他の条件
  .Forward = True
  .Wrap = wdFindContinue
  .Format = True
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = False
  .CorrectHangulEndings = False
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchWildcards = False
  .MatchFuzzy = False
 End With

 Selection.Find.Execute Replace:=wdReplaceAll
End Sub

ちなみに、ココ以外でもWordマクロの質問ができるサイト
がありますので、ある程度Wordマクロの知識があるのなら
簡単なマクロを提示して質問されてはいかが。
http://moug.net/faq/viewforum.php?f=6

簡易版なら、水野麻子さんのブログにて紹介していますよ。
http://ameblo.jp/saglasie/entry-10562628443.html

本来は書籍のほうも参考にするようですが、蛍光ペンによる
ハイライトやリストの作成などは作者から直接入手するしか
ないかと思います。

私はマクロの基礎程度の知識しかないので、希望してされた
マクロを紹介できませんが、ここの回答者の中にはある程度
Wordマクロについて知識をお持ちの方もいますので、個々の
質問をすることでヒントを得ることができるかもしれません。
その場合、カテゴリと...続きを読む

QExcelからワード文書の文字置換を実行する(ワードでのマクロも)

ワードの文書中の文字列をマクロで書き換える。
準備:ワード文書(「文書1.docx」)にて 
本文中に 「すずき」
表に 「すずき」
ヘッダー、フッターに 「すずき」
ふたつのTextBox中に 「すずき」

ワードのマクロ、エクセルでのマクロを、とにかく、試行錯誤で完成させました。
しかし、意味が分からない部分があります。
下記にて①、②、③、そして、安定の観点からのサジェスチョンを
お願いしたいと思います。
方法は、これだけではないと思います。多分、使うクラス、メンバーの違い
だと思います。何がしかのサジェスチョンをいただければ幸いです。
宜しくお願い致します。
尚、環境は Windows10(Windows8.1 32bitからup),Office2010です。

'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Sub ワードでのマクロ()
Dim sec As Section
Dim hdr As HeaderFooter
Dim i as Integer

' 文章全体に対して、置換を実行する=====================
ActiveDocument.Range(0, 0).Select ’①必要性はない
Selection.WholeStory       ’①仮に入れるなら、どんな場合?

strFind = "すずき"
strReplace = "鈴木"

With Selection.Find
.Text = strFind
.Replacement.Text = strReplace
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With

' フッターに対して、置換を実行する=====================
For Each sec In ActiveDocument.Sections ’②For eachの必然性?
For Each hdr In sec.Footers        ’②同様に
With hdr.Range.Find ’3回,回るが、フッタが3つあるわけではない!?
.Text = strFind
.Replacement.Text = strReplace
.Forward = True
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next
Next

' ヘッダーに対して、置換を実行する=====================
For Each hdr In ActiveDocument.Sections.Item(1).Headers
’③Itemを使うことでも、OKであったが、やはりメンバーはitem(1)だけのようだ。
' このからくりはどうなっているのであろうか?
With hdr.Range.Find
.Text = strFind
.Replacement.Text = strReplace
.Forward = True
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next

'Shapeオブジェクトに対して置換実行=================
For i = 1 To ActiveDocument.Shapes.Count 
’For NextはTextBoxの数だけ。従って理解可。
ActiveDocument.Shapes(i).Select
Selection.Find.ClearFormatting       
Selection.Find.Replacement.ClearFormatting 
With Selection.Find
.Text = strFind
.Replacement.Text = strReplace
.Forward = True
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next i
End Sub

'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sub エクセルでのマクロ()
Dim WdApp As Word.Application
Dim WdDoc As Word.Document

'ワード 文章全体に対して、置換を実行する===================
Set WdDoc = GetObject("C:\文書1.docx") ’ワード文書をオープン
Set WdApp = WdDoc.Application
WdApp.Visible = True
WdDoc.Activate
strFind = "すずき"
strReplace = "鈴木"
With WdDoc.Content.Find
.Text = strFind
.Replacement.Text = strReplace
.Forward = True
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With

' フッターに対して、置換を実行する=====================
Dim sec As Word.Section
Dim hdr As Word.HeaderFooter
For Each sec In WdDoc.Sections
For Each hdr In sec.Footers
With hdr.Range.Find
.Text = strFind
.Replacement.Text = strReplace
.Forward = True
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next
Next

' ヘッダーに対して、置換を実行する=====================
For Each hdr In WdDoc.Sections.Item(1).Headers
With hdr.Range.Find
.Text = strFind
.Replacement.Text = strReplace
.Forward = True
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next

'Shapeオブジェクトに対して置換実行=================
Dim myShape As Word.Shape
For Each myShape In WdDoc.Shapes
myShape.TextFrame.TextRange.Find.ClearFormatting
myShape.TextFrame.TextRange.Find.Replacement.ClearFormatting
With myShape.TextFrame.TextRange.Find
.Text = strFind
.Replacement.Text = strReplace
.Forward = True
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next
WdApp.Quit

End Sub

ワードの文書中の文字列をマクロで書き換える。
準備:ワード文書(「文書1.docx」)にて 
本文中に 「すずき」
表に 「すずき」
ヘッダー、フッターに 「すずき」
ふたつのTextBox中に 「すずき」

ワードのマクロ、エクセルでのマクロを、とにかく、試行錯誤で完成させました。
しかし、意味が分からない部分があります。
下記にて①、②、③、そして、安定の観点からのサジェスチョンを
お願いしたいと思います。
方法は、これだけではないと思います。多分、使うクラス、メンバーの違い
だと思い...続きを読む

Aベストアンサー

No.1の回答者です。
お礼を読みました。VBAでステップインを使ってマクロの動作確認を
しているのですね。
私は、マクロについて少しずつ理解している最中であり、高度な処理を
するようなものは、理解もできていませんし書くこともできません。
ですから、いくつかの疑問に対しては、私なりに理解している範囲での
回答になりますので、違っている場合もあります。


お礼の1.について
> Selectionを入れることで、動きました
そうですか。私も理解しているわけではないのですが。
'ActiveDocument.Range(0, 0).Select
このコメントブロックを解除してもダメだったのでしょうか?

変数rngを本文領域でも使えるようにする方法もあります。
Set rng = ActiveDocument.Range(Start:=0, End:=0)
With rng.Find
.Text = strFind
.Replacement.Text = strReplace
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
私の環境では、これで動作します。


お礼の2.について
> ' セクションごとのヘッダー・フッターで指定
> For Each sec In ActiveDocument.Sections

繰り返しが必要なのは、SectionオブジェクトにはHeadersプロパティと
Footersプロパティがあり、HeadersFootersコレクションオブジェクト
を持つためです。ここには3つの定数があり、それぞれに対して指定を
する必要があるためです。
http://www.relief.jp/itnote/archives/word-vba-header-footer-link-previous.php

さらに、セクション数が複数の場合に、セクション1と次のセクション
との関係で、前セクションとリンク(前と同じ)が切れている場合に、
指定した置換設定が続いているセクションでは実行されないためです。

このことから、セクションを指定する場合は、必要なので記入します。


お礼の3.について
お礼の2.と関連しますが、HeadersFootersコレクションオブジェクト
の3つの定数ごとに処理をしますので、3回の処理をします。
 wdHeaderFooterEvenPages
 wdHeaderFooterFirstPage
 wdHeaderFooterPrimary
これをセクションごとのヘッダーとフッターで繰り返すためです。


お礼の4.について
テキストボックスのみのロックなどがあることすら知りません。
Wordだけで作成したテキストボックスなのでしょうか?
(Excelなら、個別にロックできるので)
Wordにも[編集の制限]がありますが、保護を開始して制限する範囲に、
テキストボックスのみがあるとは思えないのですが?
エラーになる部分のテキストボックスを直接確認してみてはいかが。

今回のエラーが、何が影響しているのか私にはわかりません。
On Errorステートメントでエラーを無視することはできそうですが、
これを使うのは原因がわかっている場合のほうが良いみたいです。
http://officetanaka.net/excel/vba/statement/OnError.htm

ちなみに、Wordのバージョンなどの環境を書いたほうが、お互いの
違いによるトラブルを避けることができると思いますよ。
私の場合はWord2013なのですが、No.1の回答で提示したマクロは、
以前所持していたWord2002でも実行できたと思います。

No.1の回答者です。
お礼を読みました。VBAでステップインを使ってマクロの動作確認を
しているのですね。
私は、マクロについて少しずつ理解している最中であり、高度な処理を
するようなものは、理解もできていませんし書くこともできません。
ですから、いくつかの疑問に対しては、私なりに理解している範囲での
回答になりますので、違っている場合もあります。


お礼の1.について
> Selectionを入れることで、動きました
そうですか。私も理解しているわけではないのですが。
'ActiveDocument.Range(0, 0)...続きを読む

Qエクセルのマクロ 大量の置換の記述を簡略化

Cells.Select
Selection.Replace What:="東京", Replacement:="東京都", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

このような置換のマクロが何十個とあって
置換前の語句と置換後の語句ごとに
すべて記述していますが
「置換の記述そのものはまったく同じなので
 その中に語句を順番に入れ込んでいく」
という風な記述はできるものでしょうか?
もし方法があるならば御教授願いたいです
宜しくお願い致します

Aベストアンサー

一例です。
2つの配列にいれてぐるぐる廻します。
一つの配列で済ませる方法もあります。

範囲が決まっているなら、Range("A5:A100")のように決めうちしても良いかと思います。

Sub Rp1()

Dim SCN As Variant
Dim REP As Variant
Dim i As Integer

SCN = Array("東京", "愛知", "大阪")
REP = Array("東京都", "愛知県", "大阪府")

For i = LBound(SCN) To UBound(SCN)

Selection.Replace What:=SCN(i), Replacement:=REP(i)

Next

End Sub

Qエクセルの複数同時置換

エクセルで文字列を同時に複数置換することって出来ますか?

たとえば、ABCという文字列があった場合、

A→1
C→2

の置換を同時にやりたいんです。

ABC→1B2 に一度に置換する方法はありますか?
よろしくお願いします。

Aベストアンサー

マクロでしか出来ないと思います。
一応、標準モジュールに貼り付けることを想定していますが、どこでも構いません。フォームボタンなどに登録すると、簡単に使えるようになると思います。

Sub MultiReplacement()
 Dim MyWords As Variant
 Dim MyRepWords As Variant
 Dim Ans As Integer
 Dim Rng As Range
 MyWords = Array("A", "C") 'ここに検索語を入れてください。
 MyRepWords = Array(1, 2) 'ここに置換語を入れてください。
 '検索語と置換語を調べる
 If UBound(MyWords) <> UBound(MyRepWords) Then
  MsgBox "検索語数( " & UBound(MyWords) & _
  " )と置換語数( " & UBound(MyRepWords) & " )数が違います。", 64
  Exit Sub
 End If
 
 Set Rng = Selection 'マウスで範囲を選択してください。
 If Rng.Count = 1 Then
  Ans = MsgBox("セル1つしか選択されていませんが、よろしいですか?", vbYesNo)
  If Ans = vbNo Then
   Exit Sub
  End If
 End If
 '実行
 For i = LBound(MyWords) To UBound(MyWords)
  Cells.Replace What:=MyWords(i), Replacement:=MyRepWords(i), _
  LookAt:=xlPart, _
  MatchCase:=True
 Next i
End Sub

マクロでしか出来ないと思います。
一応、標準モジュールに貼り付けることを想定していますが、どこでも構いません。フォームボタンなどに登録すると、簡単に使えるようになると思います。

Sub MultiReplacement()
 Dim MyWords As Variant
 Dim MyRepWords As Variant
 Dim Ans As Integer
 Dim Rng As Range
 MyWords = Array("A", "C") 'ここに検索語を入れてください。
 MyRepWords = Array(1, 2) 'ここに置換語を入れてください。
 '検索語と置換語を調べる
 If UBound(MyWords) <> UBo...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング