プロが教えるわが家の防犯対策術!

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

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

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

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

A 回答 (7件)

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



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のコードは、基本的に著作権を主張できません。もちろん、ここの掲示板に、私個人の著作権が存在していませんが、プログラミングコードは、特別なもの以外は著作権がありません。だから、本来、必要以上の内容は、公開しないようにしなければなりません。その限度は心得ているつもりです。この程度のコードは、私の感覚では、そんなに難しいものではないということです。
「Wordで複数の単語を一括置換するマクロ」の回答画像7
    • good
    • 0
この回答へのお礼

Wendy02さん、何度もアドバイスを下さり恐縮です。感謝致します
早速、秀丸マクロの書籍を購入して勉強を始めましたが、切り貼りだった知識が少しまとまってきた感じです。
どうもありがとうございました!

お礼日時:2010/07/31 04:37

ご質問の中に、「リスト自動作成」という内容がありますが、



YouTube の「【Word】辞書引きと文字入力を自動化するマクロ 」は、誤解されているような気がします。自動化されている部分と、手動の部分の間に、省略されたものがあるようです。

画面でみているリストは、単にテキストファイルを開いただけで、それをコマンドで開きはするものの、マクロとして作っても、あまり意味がありません。

単語のリスト化も可能ですが、以下のようなスタイルのマクロは作っています。
使い方が、かなり特殊です。

ワードベーシックで、離れた二つの箇所を取得する方法
http://oshiete.goo.ne.jp/qa/5059719.html

で、目的は違いますが、リストを作る特殊なマクロです。コードとしては大したことありませんが、使った感じとしては、非常に複雑なものです。今回の目的に、そのままは使えません。

ところで、今のところ、試したことがありませんが、MS-Wordでは、PDICのDDEが呼び出せるようですから、ある程度、基本的な訳は呼び出せるように思っています。(Excelでは、呼び出せません)

翻訳用にするには、いろいろ工夫したほうがよいのですが、私は、思ったツールがありません。それから、Word VBAは、あくまでも、趣味の範囲のつもりです。

それと、YouTube の「カット&ペーストで高速・高品質の翻訳を」という内容は、特許翻訳のようですね。そのようなマクロでうまくいくものなのでしょうか?
    • good
    • 0
この回答へのお礼

Wendy02さん、ご回答ありがとうございます。

>YouTube の「【Word】辞書引きと文字入力を自動化するマクロ 」は、誤解されているような気がします。自動化されている部分と、手動の部分の間に、省略されたものがあるようです。

そうなんですね!
省略部分があるとは思いませんでした。
今回のことでWendy02さんのご回答と、その他に自分で調べていく中で、マクロについて関心が深くなりました。
先のコメントにも書いて下さったように、翻訳にはWordよりテキストの方がいい、と思うようにもなりました。
秀丸マクロを少しずつ勉強してみようと思います。


>それと、YouTube の「カット&ペーストで高速・高品質の翻訳を」という内容は、特許翻訳のようですね。そのようなマクロでうまくいくものなのでしょうか?

産業翻訳、特にマニュアルや特許の分野では、かなり使い勝手の良い作業方法だと思います。
カット&ペースト以外にももちろん手作業の部分が残るのですが。

いろいろと本当にありがとうございました!

お礼日時:2010/07/30 08:59

'//続き


Sub ReplaceWordsList2()
  Const MYCOLOR As Long = wdGray25 'グレー25
 Dim FNames As Variant
 Dim ComDlg As Object
 Dim fNum As Integer
 Dim rc As Long
 Dim buf() As Variant
 Dim textLine As String
 Dim i As Long, j As Long, k As Long
 Dim fName As String
 Dim fn As Variant
 Dim lpofn As OPENFILENAME
 Dim MyPath As String
 
 MyPath = ThisDocument.Path 'リストのパス
 
 With lpofn
  .hwndOwner = 0
  .Flags = OFN_PATHMUSTEXIST Or _
  OFN_FILEMUSTEXIST Or _
  OFN_HIDEREADONLY
  .lStructSize = Len(lpofn)
  .lpstrTitle = "ファイルを開く"
  .lpstrFilter = "Text File(*.txt)" & vbNullChar & "*.txt"
  .lpstrFile = String(256, Chr(0))
  .nMaxFile = 256
  .lpstrInitialDir = MyPath
  .nFilterIndex = 1
 End With
 rc = GetOpenFileName(lpofn)
 
 If rc = 0 Then Exit Sub
 fName = lpofn.lpstrFile
 fName = Left(fName, InStr(fName, vbNullChar) - 1)
 
 
 Options.DefaultHighlightColorIndex = MYCOLOR
 fNum = FreeFile()
 i = 0
 Open fName For Input As #fNum
 Do While Not EOF(fNum)
  Line Input #fNum, textLine
  If Len(textLine) > 1 Then
   ReDim Preserve buf(i)
   buf(i) = Split(textLine, vbTab)
   i = i + 1
  End If
 Loop
 Close fNum
 If UBound(buf) > 0 Then
  If UBound(buf(0)) < 1 Then MsgBox "正しいリストではありません。", vbExclamation: Exit Sub
  For i = LBound(buf) To UBound(buf)
   Selection.Find.ClearFormatting
   Selection.Find.Replacement.ClearFormatting
   With Selection.Find
    .Text = buf(i)(0)
    .Replacement.Text = buf(i)(1)
    .Replacement.Highlight = MYCOLOR
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = False
    .MatchFuzzy = True
   End With
   Selection.Find.Execute Replace:=wdReplaceAll
  Next
 End If
 Options.DefaultHighlightColorIndex = wdNoHighlight
End Sub
    • good
    • 0
この回答へのお礼

Wendy02さん、どうもありがとうございます。

せっかく作って戴いたのですが、プログラミングに関して初心者なので、「標準モジュールを挿入して~」というあたりが分かりません。
ネットで調べたのですが、そのレベルの作業は私にはまだ敷居が高いようです…。
とても残念です。そして申し訳ありません…。

これから少しずつ秀丸マクロを勉強して、既存マクロを自分用に作り変えられるようにしようと思います。
そうしたら、標準モジュールなども分かるようになるかもしれませんし。

いろいろ教えて戴いて、マクロの知識だけでなく今後の勉強に対する刺激にもなりました。
どうもありがとうございました。

お礼日時:2010/07/30 08:51

>DAO360.DLL


今回は、これは、使っていません。なお、DAO360は、標準に入っているはずですが……。

原因は、「Comdlg32.ocx」というライブラリが入っていないからですが、Office では、2003 以降では、標準で、CommonDialog は入るはずです。エラーが出るというのは、Office のVesion は、それら以外かもしれません。

入っていないようなら、以下を読んでいれてもよいです。通常は、何かのツールを使うと入るものだったと思います。

VisualBasic6.0 SP5 ランタイムパッケージ
http://www.hmpage.jp/vb6rtest.htm
内容の説明は
http://support.microsoft.com/default.aspx?scid=k …

ただし、使わない方法で新たに書き直しました。OSとか、Office の範囲は多少広がります。
Win32APIは、大げさになってしまうので、最初使わなかったのです。Wordは、バージョンによって、挙動が違うので、思ったようにならないことも多いです。また、Word 2007 は、また、挙動が変わってきています。Word VBAは、底が浅いせいか、最近、Word VBAついて書いているブログやホームページも増えたようです。しょせん、Perl には敵わないように思っています。

前のお礼の部分:
今、書籍は、手元にはありませんが、大野悟さんの翔泳社のものだったはずです。あまり初歩的なのでほとんど読んでいません。それと、MS のプログラマーズガイドです。西上原裕明さんの本の内容は知っていますが、購入するまでには至りませんでした。

今は、97の頃とは、勢いが違い、Word VBAでめぼしいものはあまりありませんが、後は、

以下のサイトとか、
http://word.mvps.org/FAQs/index.htm

MSのリソースガイド
http://www.kayodeok.btinternet.co.uk/favorites/k …

ただ、日本語環境では、2byte 文字の関係があるので、それらは自分で勉強しなければなりません。

コードは、長いので、二つに分けました。つなげてお使いください。

'//新たに標準モジュールを挿入して、そこにいれたほうが良いです。モジュール上部から書く
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (lpofn As OPENFILENAME) As Long

Private Type OPENFILENAME
 lStructSize As Long
 hwndOwner As Long
 hInstance As Long
 lpstrFilter As String
 lpstrCustomFilter As String
 nMaxCustFilter As Long
 nFilterIndex As Long
 lpstrFile As String
 nMaxFile As Long
 lpstrFileTitle As String
 nMaxFileTitle As Long
 lpstrInitialDir As String
 lpstrTitle As String
 Flags As Long
 nFileOffset As Integer
 nFileExtension As Integer
 lpstrDefExt As String
 lCustData As Long
 lpfnHook As Long
 lpTemplateName As String
End Type

Private Const OFN_FILEMUSTEXIST = &H1000
Private Const OFN_HIDEREADONLY = &H4
Private Const OFN_PATHMUSTEXIST = &H800
    • good
    • 0
この回答へのお礼

ありがとうございます。
後ほど、この次に戴いたご回答にコメント致します。

お礼日時:2010/07/30 08:42

'//以下はマクロ(ThisDocument)


Private Const MYPATH As String = "C:\My Documents\WordDoc" 'リストを置く場所
'Private fNames as String
Sub ReplaceWordsList()
 Const MYCOLOR As Long = wdGray25 'グレー25
 Dim ComDlg As Object
 Dim fNum As Integer
 Dim buf() As Variant
 Dim textLine As String
 Dim i As Long, j As Long
 Dim fName As String
OpenText:
 Set ComDlg = CreateObject("MSComDlg.CommonDialog")
 ComDlg.MaxFileSize = 256
 ComDlg.InitDir = MYPATH
 
 ComDlg.Filter = "テキスト ファイル (*.txt)|*.txt|"
 ComDlg.ShowOpen
 
 fName = ComDlg.FileName
 If fName = "" Then
  Exit Sub
 Else
'  fNames = "," & fName & fNames
'  If InStr(3, fNames, "," & fName, vbTextCompare) > 3 Then
'  If MsgBox("既に、処理済みファイルです。", vbExclamation + vbOKCancel, "Execution") = vbCancel Then Exit Sub
'   GoTo OpenText
'  End If
 End If
 Options.DefaultHighlightColorIndex = MYCOLOR
 fNum = FreeFile()
 i = 0
 Open fName For Input As #fNum
 Do While Not EOF(fNum)
  Line Input #fNum, textLine
  If Len(textLine) > 1 Then
   ReDim Preserve buf(i)
   buf(i) = Split(textLine, vbTab)
   i = i + 1
  End If
 Loop
 Close fNum
 '//置換
 If UBound(buf) > 0 Then
  For i = LBound(buf) To UBound(buf)
   Selection.Find.ClearFormatting
   Selection.Find.Replacement.ClearFormatting
   With Selection.Find
    .Text = buf(i)(0)
    .Replacement.Text = buf(i)(1)
    .Replacement.Highlight = MYCOLOR
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = False
    .MatchFuzzy = True
   End With
   Selection.Find.Execute Replace:=wdReplaceAll
  Next
 End If
 Options.DefaultHighlightColorIndex = wdNoHighlight
End Sub
    • good
    • 0
この回答へのお礼

Wendy02さん、コメントありがとうございます。

このマクロを試してみたのですが、
「実行時エラー429 ActiveXコンポーネントはオブジェクトを作成できません」
というメッセージが出て実行できません。
対処法として下記<対処法>を以下実行すると「......DAO360.DLLのDllRegisterServerは成功しました。」というメッセージが出るのですが、マクロを再度実行するとまた同じ「ActiveXコンポーネントは~」というメッセージが出ます。

  <対処法>
    [スタート] 中の[ファイル名を指定して実行] 内に、
     regsvr32 "C:\Program Files\Common Files\Microsoft Shared\DAO\DAO360.DLL" 
     を入力して[OK]

デバックすると、マクロの「OpenText:」のすぐ下の
 「Set ComDlg = CreateObject("MSComDlg.CommonDialog")」で止まっているようです。

もし思い当たることがおありでしたら、教えて戴けると有り難く思います。

お礼日時:2010/07/28 22:54

>テキスト文書に対し、手作業では不可能な大量の単語を、自作の辞書を使って一括置換しています。



私は、何度か発表してきたつもりですが、いろんな人がいますから、そのリストが、Excelだったりワードのテーブルであったり、いろいろなリクエストがありますから、今回のリクエストは初めてになります。ありそうで、ここではありませんでした。

「辞書引きと文字入力を自動化するマクロ 」

は、問題は特にないと思います。コードを探してみましたが、公開しない理由は、サポートが面倒だからです。また、YouTube の動きは、途中の動作がどうやら省略しているような気がしましたので、マルチセレクト方式は辞めました。

あえて、翻訳の仕事をされているということで、関連のアドバイスをしますが、Wordは仕上げ用でしかないように思います。私個人は、Wordは、とても、翻訳作業で使えるとは思えないのです。

産業翻訳をされているなら、成田一(BuckEye)さんのSimplyTerms はご存じありませんか?後々、知りましたが、翻訳業界では偉い人のようで、彼のツールなどは、ご希望のものに該当すると思います。また、産業翻訳の世界では、何人かの方が個人用のツールを出しています。しかし、私個人はプライドもあって、氏のものを素直に使うという気にはなれませんが、以下のようなものがあります。

その代わり、VBAの世界では、私の知っているグループの人は現れることはないようです。私は、Perlは極めることが出来ませんでしたし、AWKには触り程度で、せいぜい、SEDだけなので、彼らから比較すると、MS系は、なんとなく気後れします。VBAの世界は、おんぶに抱っこで、出来るつもりになってしまいます。ちょっと出来るようになるとオメデタくなってしまう人が多いような気がします。私は、相変わらず、PDICと専門辞書のみです。切り分けツールの良いものがあれば、それで十分ですが、見つかりません。一行ずつ手動で読みながら切り分けます。文学ではないので、A4で、改行が2つしかないものもあります。(James Joyce は、もっとないようですが)

http://homepage2.nifty.com/buckeye/software/tran …
http://homepage2.nifty.com/buckeye/software/help …


検索・置換用のテキストファイルは、(間は、タブで区切る)拡張子は、必ず、.txt にしてください。
strand髪の毛
regrettable悲しむべき
chancellor大蔵大臣
beverage飲物
idol偶像
muse詩神

続きは、次のレスの中に書き込みます。
なお、書籍は、私個人は持っていますが、古いものでも、プレミアがついて安くありませんし、内容は、初歩的なものです。
    • good
    • 0
この回答へのお礼

Wendy02さん、早速のコメントをありがとうございます。
今はSimplyTermsを使っていて便利なソフトなので重宝しているのですが、水野さんのマクロにある2つの機能はテキスト文書用のものにはついておらず、でもまさに私の欲しい機能なので、これをぜひ試してみたかったのです。

購入された書籍というのは以下の3冊でしょうか?
今回のマクロのためだけでなく今後のために以下の購入を考えていたのですが、これらがあっても今回のマクロ作成には至らなさそうなのですね。
 ・実務翻訳者のためのWordマクロ 基礎の基礎 (水野さん著)
 ・自分で作るWordマクロ(1),(2)(水野さん著)

Wordマクロの本というと他に以下がありますが、ご存知でしょうか?
 ・Wordで実践 やさしくて役に立つ「マクロ」事?例集 2003/2002対応 (西上原裕明 著)
 (他にもこのシリーズで何冊か出ています)

もう一つ戴いていたコメントにも後ほど返信します。

お礼日時:2010/07/28 22:39

参考になりそうな処を紹介します。



Microsoft Word 文書のテキストを検索、置換する
http://www.microsoft.com/japan/technet/scriptcen …

あるWordの文章中に二重下線があります。その部分を探しマーカーを付け...
http://oshiete.goo.ne.jp/qa/5632086.html
Word VBAで文書内のUnicode文字を赤色にしたい
http://questionbox.jp.msn.com/qa3816807.html
Word 文書で強調表示されているテキストを検索し、書式を設定し直す方法はありますか
http://www.microsoft.com/japan/technet/scriptcen …
検索語句を強調表示する方法
http://www.f3.dion.ne.jp/~element/msaccess/AcTip …
    • good
    • 0
この回答へのお礼

ご回答くださりありがとうございます。
今回の質問に伴っていろいろと調べたりアドバイスを戴いた結果、今後は秀丸マクロを中心に作業し、足りない機能をWordで探してみることにしようと思います。
ご紹介下さったサイトも参考にさせていただきます。

どうもありがとうございました。

お礼日時:2010/07/31 04:42

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