• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Wordのマクロについて初歩的な質問です。)

Wordのマクロについて初歩的な質問です。

このQ&Aのポイント
  • Word 2010のマクロについて初心者です。ルーティンで送られてくる文書に頻繁に含まれる単語を日本語から英語に置換したいと思っています。
  • 具体的な置換例として、「住所」を”Address”に、「青年月日」を”Date of Birth”に置換したいです。
  • マクロを実行しようとすると、「オブジェクトが必要です。」とエラーが表示されます。目的のマクロを実行するにはどうすれば良いでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

No.2の回答者です。お礼についての追加アドバイスです。 > 置換対象の言葉が増えて、一行に納まらなくなった場合 どの程度の言葉の一覧によりますが、30語程度ぐらいでしたら 前の回答のArray( )を使う方法でも対応できます。 この場合は、行が長くなると見難くなることと、修正し易さを 考えて、コードを途中で折り返す(改行する)記述を追加して、 管理しやすくすることができます。 半角スペース+アンダースコアを改行したい区切りに適してる 場所に追加します。 http://www.tsucchy.com/Excel/vb5_5.html 書き方の例:月別の置換を6か月単位で折り返しした場合 s1 = Array( _ ”12月”,”11月”,”10月”,”9月”,”8月”,”7月”, _ ”6月”,”5月”,”4月”,”3月”,”2月”,“1月” _   ) s2 = Array( _ “December“,“November“,“October“,“September“,“August“,“July“, _ “June“,“May“,“April“,“March“,“February“,“January“ _   ) Array( )での括弧の前後にある区切りの場合、区切らなくても よいのですが、単語と分けることで見やすくしています。 例の場合のように、検索する単語で12月から開始しているのは、 逆順にしていないと12月が2月として先に置換されてしまって、 1Februaryのようになることを防ぐためです。 検索単語の長いほうを先に書いておかないと、短い単語を先に 置換してしまうので注意が必要です。 もしも単語の数が増えすぎた場合は、Arrayの配列にしないで、 一括置換用のリストファイルを別に用意して、そのファイルを 元に置換をするほうが管理も楽になります。 50語以上になると、検索単語と置換単語の関係が分かりにくく なるかもしれませんので、一括置換用のリストファイルを別に 作ったほうが、修正や追加が楽なので。 その場合については、今回は回答文字数の関係で説明しません。 補足されれば追加するかもしれませんが、期待しないでね。

noname#203727
質問者

お礼

再度の回答ありがとうございます! 大変参考になりました。 本当にありがとうございました!!

その他の回答 (2)

回答No.2

こちら↓の一括置換を使ってみては。 http://okwave.jp/qa/q994495.html これについての質問があった時に説明したもの http://okwave.jp/qa/q7388815.html こちら↑でのマクロの場合、テキストボックス内にある文字列が 置換されないので、ちょっと工夫してみました。 Sub 配列を使った一括置換2() Dim s1, s2 As Variant Dim i As Long Dim sp As Shape Dim rng As Range Set rng = ActiveDocument.Range(0, 0) ' この部分は質問での内容に書き換えています s1 = Array("住所", "生年月日") s2 = Array("address", "Date of Birth") ' 本文領域の場合    For i = 0 To UBound(s1)     With rng.Find       .Text = s1(i)       .Replacement.Text = s2(i)       .Execute Replace:=wdReplaceAll     End With    Next i ' テキストボックスの場合  For Each sp In ActiveDocument.Shapes   If sp.Type = msoTextBox Then   Set rng = sp.TextFrame.TextRange    For i = 0 To UBound(s1)     With rng.Find       .Text = s1(i)       .Replacement.Text = s2(i)       .Execute Replace:=wdReplaceAll     End With    Next i   End If  Next    End Sub

noname#203727
質問者

お礼

ありがとうございます! うまくいきました^^ ちなみにこれ、置換対象の言葉が増えて、一行に納まらなくなった場合、 どうすればよいのでしょう? s1、s2と同じやり方で s3、s4を作成して 実行することになりますか? それとも、他の方法があるのでしょうか? 何度も恐縮ですが、コメントいただけると大変ありがたいです。m(._.)m

  • nao-y
  • ベストアンサー率58% (111/190)
回答No.1

Cells.Replaceって、ExcelVBAの構文になるんじゃないかと思いますが、、、 それともある特定の表の中身が置換範囲ですか? 文書全体が置換対象なら以下のコードになるようです。 Sub Macro1() With ActiveDocument.Content .Text = Replace(.Text, "住所", "Address") .Text = Replace(.Text, "生年月日", "Date of Birth")End With End Sub

noname#203727
質問者

お礼

ありがとうございます! ExcelVBAの構文だったんですねー。。 早速いただいたコードを コピペしてマクロ実行してみたところ、 今度は、 コンパイルエラー: 構文エラー というメッセージが表示されてしまいました・・・。 どうすればよいのでしょう?? 何度もすみません・・・。

関連するQ&A

専門家に質問してみよう