<状況>
翻訳しなければならない和文原稿がワードファイルであります。
その一方で500語程度の和英の専門用語をまとめたglossaryがエクセルであります。
<やりたいこと>
ワードの和文に、glossaryに該当する和文の英語をその該当する和文の後に( )でいれたいと考えています。自動化することは可能でしょうか?
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
不明な点はコメントで補足します。
解決に近づいていますが、いまの私には無理みたいです。
突貫工事ですけど、やりたいことはこれでできるはずです。
まずは基本的なマクロの形を紹介します。
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 にしてください。
汎用性もへったくれもありませんが、とにかくやりたいことはこれでできるはずです。
何か分からなければ追加で質問ください。
すばらしい。実行結果からやりたいことであると認識しました。
ただよく理解していないのですが、「次の2行をエクセルの内容に変更
する」とありますが、500項目すべて "状況 (situation)" のように
入力しなければならないのでしょうか?
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
不明な点はコメントで補足します。
こちらもすばらしい。
最後の実行で「中断モードでコードを実行することはできません」
というメッセージがでてきました。
こちらもすばらしい。
最後の実行で「中断モードでコードを実行することはできません」
というメッセージがでてきました。