【翻訳について】解決していただいた方に高ポイントお約束します。


<状況>
翻訳しなければならない和文原稿がワードファイルであります。
その一方で500語程度の和英の専門用語をまとめたglossaryがエクセルであります。

<やりたいこと>
ワードの和文に、glossaryに該当する和文の英語をその該当する和文の後に(  )でいれたいと考えています。自動化することは可能でしょうか?


回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2009/06/16 08:46:36
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Mook No.3

回答回数1314ベストアンサー獲得回数393

ポイント500pt

sm0k3 さんの提示されたページを参考にしたものですが、Word ファイル内の単語をEXCEL

のデータで置換する例です。


EXCEL のA列に検索語、B列に訳語が並んでいることを想定しています。

(1)上記のシートを引いた状態でALT+F11を押し、

(2)開いたウィンドウで 挿入⇒標準モジュールで開き、

(3)下記をコピーします。

(4)先頭にある翻訳対象のWORDファイルのファイルパスを実際に合わせます。

(5)EXCELに戻ってALT+F8でCATを選んで実行してみてください。

Option Explicit

Sub CAT()
    'オープンするワードのファイル名をパス名付きで入れます
    Const wordFilePath = "C:\test.doc"  '★★★ 実際のファイルパスにしてください。
    
    Dim objWord  As Object
    Set objWord = CreateObject("Word.Application")
    
    'Excelの最後の行を求めます
    Dim lastRow  As Long
    lastRow = Sheets("Sheet1").Range("A1").End(xlDown).Row
    
    'ワードを開きます。
    objWord.Visible = True
    objWord.Documents.Open wordFilePath
    
    
    '1行目から最後の行まで、繰り返します。
    Dim r        As Long
    For r = 1 To lastRow
        '検索するキーワードを設定します。
        objWord.Selection.Find.Text = Sheets("Sheet1").Cells(r, "A").Value
        
        '検索する方向を指定します。
        objWord.Selection.Find.Forward = True
        objWord.Selection.Find.Replacement.Text = Cells(r, "A").Value & "(" & Cells(r, "B").Value & ")"
        objWord.Selection.Find.Replacement.Font.Color = 255
        
        '検索を実行し、全てを置換します。
        objWord.Selection.Find.Execute , , , , , , , , , , wdReplaceAll
    Next
End Sub

不明な点はコメントで補足します。

id:IAMTHESUN2

こちらもすばらしい。

最後の実行で「中断モードでコードを実行することはできません」

というメッセージがでてきました。

2009/06/15 23:42:16

その他の回答2件)

id:sm0k3 No.1

回答回数591ベストアンサー獲得回数39

ポイント27pt

http://www.simple-sys.com/blog/2008/03/29/172/

こちらのブログに書いてある内容でできると思います。

ちょっと勉強しないといけないですが。

id:IAMTHESUN2

解決に近づいていますが、いまの私には無理みたいです。

2009/06/15 20:47:01
id:Nigitama No.2

回答回数311ベストアンサー獲得回数18

ポイント200pt

突貫工事ですけど、やりたいことはこれでできるはずです。

まずは基本的なマクロの形を紹介します。

 

Sub InsertGloss()

 

Dim NumGloss As Long

Dim Rep As Variant

Dim RepWith As Variant

 

Rep = Array("状況", "ワードファイル", "約束", "エクセル")

RepWith = Array("状況 (situation)", "ワードファイル (Word File)", "約束 (promise)", "エクセル (Excel)")

NumGloss = 4

For i = 1 To NumGloss

Selection.Find.ClearFormatting

Selection.Find.Replacement.ClearFormatting

With Selection.Find

.Text = Rep(i)

.Replacement.Text = RepWith(i)

.Forward = True

.Wrap = wdFindContinue

.Format = False

.MatchCase = False

.MatchWholeWord = False

.MatchByte = False

.MatchAllWordForms = False

.MatchSoundsLike = False

.MatchWildcards = False

.MatchFuzzy = False

End With

Selection.Find.Execute Replace:=wdReplaceAll

Next i

End Sub

 

まずは以下の手順を実行してみてください。

手順1. この質問の質問文、「【翻訳について】解決していただいた方に高ポイント~」から「とは可能でしょうか?」をすべてワードファイルに貼り付けます。

手順2. ツール > マクロ > Visual Basic Editor で VB の画面を表示して、上記のマクロを貼り付けます (マクロについて分からなければ再度質問するかご自分で調べてください)。

手順3. マクロを実行します。

 

実行結果を見てください。やりたいことはこのイメージでよいですね?

 

そしたら、次の 2 行をご自分のエクセルファイルの内容に変更する必要があります。

Rep = Array("状況", "ワードファイル", "約束", "エクセル")

RepWith = Array("状況 (situation)", "ワードファイル (Word File)", "約束 (promise)", "エクセル (Excel)")

 

まず、用語集のエクセルですが、A1 に 状況、B1 に Situation、A2 にワードファイル、B2 に Word File という形式で入力されているとします (形式が違ってもなんとかできると思います)。

 

C1 に「=concatenate(A1," (",B1,")")」と入力して、最下部までコピーします。これで、「状況 (situation)」という形式のテキストができましたね。

  

実際に使うのは「原語の A 列」と「原語と訳語併記の C 列」のみです。

A 列だけコピーしてテキストファイルに貼り付けて、改行を "," で置き換えれば、あとは前後に ( と ) を付けるだけでいける感じじゃないですか?

原語訳語併記の方もそれでできるはずです。

 

最後に NumGloss = 4 を自分の用語集のエントリ数してください。用語が 10 種類あったら、NumGloss = 10 にしてください。

 

 

汎用性もへったくれもありませんが、とにかくやりたいことはこれでできるはずです。

何か分からなければ追加で質問ください。

id:IAMTHESUN2

すばらしい。実行結果からやりたいことであると認識しました。

ただよく理解していないのですが、「次の2行をエクセルの内容に変更

する」とありますが、500項目すべて "状況 (situation)" のように

入力しなければならないのでしょうか?

2009/06/15 23:05:30
id:Mook No.3

回答回数1314ベストアンサー獲得回数393ここでベストアンサー

ポイント500pt

sm0k3 さんの提示されたページを参考にしたものですが、Word ファイル内の単語をEXCEL

のデータで置換する例です。


EXCEL のA列に検索語、B列に訳語が並んでいることを想定しています。

(1)上記のシートを引いた状態でALT+F11を押し、

(2)開いたウィンドウで 挿入⇒標準モジュールで開き、

(3)下記をコピーします。

(4)先頭にある翻訳対象のWORDファイルのファイルパスを実際に合わせます。

(5)EXCELに戻ってALT+F8でCATを選んで実行してみてください。

Option Explicit

Sub CAT()
    'オープンするワードのファイル名をパス名付きで入れます
    Const wordFilePath = "C:\test.doc"  '★★★ 実際のファイルパスにしてください。
    
    Dim objWord  As Object
    Set objWord = CreateObject("Word.Application")
    
    'Excelの最後の行を求めます
    Dim lastRow  As Long
    lastRow = Sheets("Sheet1").Range("A1").End(xlDown).Row
    
    'ワードを開きます。
    objWord.Visible = True
    objWord.Documents.Open wordFilePath
    
    
    '1行目から最後の行まで、繰り返します。
    Dim r        As Long
    For r = 1 To lastRow
        '検索するキーワードを設定します。
        objWord.Selection.Find.Text = Sheets("Sheet1").Cells(r, "A").Value
        
        '検索する方向を指定します。
        objWord.Selection.Find.Forward = True
        objWord.Selection.Find.Replacement.Text = Cells(r, "A").Value & "(" & Cells(r, "B").Value & ")"
        objWord.Selection.Find.Replacement.Font.Color = 255
        
        '検索を実行し、全てを置換します。
        objWord.Selection.Find.Execute , , , , , , , , , , wdReplaceAll
    Next
End Sub

不明な点はコメントで補足します。

id:IAMTHESUN2

こちらもすばらしい。

最後の実行で「中断モードでコードを実行することはできません」

というメッセージがでてきました。

2009/06/15 23:42:16
  • id:Nigitama
    IAMTHESUN2 さん
     
    結論から言うと、Mook さんの回答をベースに進めた方がいいと思います。
     
    一応質問にはお答えします。
    >500項目すべて "状況 (situation)" のように入力しなければならないのでしょうか?
    えーっと、そうですね(笑) ありえないくらいやぼったいですね。
    C1 に「=concatenate(A1," (",B1,")")」と入力して、最下部までコピーすれば、簡単に"状況 (situation)"という形式で全項目を作れますが。
     
    一応 500 項目でも問題なく動くか確かめてみましたが、どうやら動くようです。abc という項目を 500 個用意して確認しました。
    ただし、VBA の画面は 1 行に付き 1000 文字くらいで改行しなければならないようでした。VBA のルールだと、同じ命令の文を途中で改行するときは、「 _」 という記号を書かなければなりません。
    例えば、
     
    Array("abc", "def", _
    "ghi", "jkl")
     
    という具合です。半角スペースにアンダースコアの組み合わせです。
    これは見た目上は改行しているけれども命令としては一つの連続した文ですよ、という意味です。
     
    これをやらないとエラーになってしまいます。
    私の場合、エクセルからテキストエディタにコピペして改行を "," に置き換えた後、800 文字目くらいで自動改行するようにエディタを設定しました。エディタの見た目上の各行末に「 _」を書き入れればそれをそのまま VBA の画面にペーストしても問題なく動くようです。

    やりたいことはこれでもできるようですが、もうちっとスマートなやり方をするなら Mook さんの方がいいでしょう。
  • id:IAMTHESUN2
    Nigitama さん
    いろいろありがとうございます。
    Mookさんのものを何度もトライしたのですが知識不足でエラーになってしまいます。
    それでNigitama さんの「ちからわざ」で500個トライしたのですが、
    実行の段階でプログラムが停止してしまいます。
    数が多いいのでどこが通らないのかわからない状況でもう少し粘ってみたいと
    思います。
  • id:IAMTHESUN2
    改行しなければならないんですね。
    これでもう一度トライしてみます。
  • id:Nigitama
    なんだか遠回りさせた間も否めませんがw

    なにかお手伝いできそうなことがあればコメント欄でお答えします。
  • id:Mook
    すでに解決されていれば読み飛ばしてください。

    こちらでは問題なかったのですが、どのような状況になるのでしょうか。
    「最後の実行で」という意味がわからないのですが、処理が一度にされないのですか?

    Word ファイルがすべて閉じている状況、EXCEL はこのシートのみ開いている状況で
    やってみても同様でしょうか。

    提示されたメッセージは、なにかマクロの処理を途中までで実行して、中断した状態で
    マクロを再実行しようとするときにでるメッセージです。
  • id:IAMTHESUN2
    Mook さん
    まだ両方マクロが通らずにいます。

    Word ファイルがすべて閉じている状況、EXCEL はこのシートのみ開いている状況で
    マクロを実行しますと「コンパイラエアー:変数が定義されていません」と
    メッセージされます。wdReplaceAllという文字がドラッグされている状況です。

    アドバイスをいただけると助かります。
    よろしくお願いします。
  • id:Mook
    最初の回答で提示されているURL にあるように、
    VBE の参照設定で「Microsoft Word x.xx Object Library」にチェックを入れて
    実行するか、wdReplaceAll を 2 に置き換えてみてどうでしょうか。
  • id:IAMTHESUN2
    Mook さん
    すばらしい。すべて解決いたしました。ありがとうございました。

    Nigitama さん
    ありがとうございました。ご協力感謝いたします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません