業務効率化

VBA:選択範囲&シートを選択言語で一括翻訳マクロ

以前紹介したアクティブシート自動和英訳マクロ(https://gakuhenn.com/vba-sheet-autojnentranslation/)の改良版です。シート上の自動取得範囲と自動和英訳に加え、今マクロではユーザーフォームから選択範囲と翻訳元/先言語を指定できるようにしています。これにより選択したシート上の一部範囲翻訳、和英訳以外の柔軟な翻訳ができます。

記事の内容

・挙動

・コード

・ポイント機能

・挙動

UFを開くと、翻訳対象範囲が自動取得され、該当範囲に図形が点滅して表示されます。既定では翻訳元/先言語に日本語と英語が記載されており、この場合はセル値に基づいて自動和英訳がされます。

言語はコンボボックスから選択か、Lngシートに設定したキーワード直接入力することで指定可能です。直接入力時はLngシート設定のワードを指定すると部分一致でセル位置が取得され、値が自動変換されます。

セル範囲翻訳の場合

UFを開くと値がある範囲が自動強調されます。

今回はその内の一部だけ翻訳するため、「範囲再選択」を選択します。選択された箇所が同様に強調されます。

UFで指定した言語に基づいて翻訳が実行されます。今回はUF上の言語を特に指定しなかったため、自動和英訳がされています。

終了時の通知

指定シート翻訳

指定シート自体を翻訳することも可能です。UFを開く前にCtrlでシートを複数選択するか、UFが開いている間に選択することでも可能です。

実行前は、選択されているシートを翻訳するか確認メッセージが出ます。

実行を押すとステータスバーに、選択したシート名と進捗が表示されます。

選択した分のシートが複製されます。

シート翻訳の場合は図形内の文字もすべて翻訳がされます。なお高速化のため空欄や数値のみなどはスキップしています。

翻訳前
翻訳後:図形内も翻訳

・コード

下記表示が出る場合はご自身のマクロブックに保存されているUF、標準プロシージャ、ユーザーフォームをドラッグアンドドロップしてください。

・ポイント機能

・翻訳範囲自動取得と強調

・翻訳元/先言語の指定

・高速化、エラー処理等(Doevents等,Statusbar)

・Gootransl_DefJPandEN関数

・複数シート一括翻訳

翻訳範囲自動取得と強調

UFを開くと値に応じて範囲が自動取得されます。範囲はセルに値が入っている左上と右下を起点として範囲としています。どの範囲かは点滅する図形で強調されます。セルフォントプロパティに設定する方法もありますが、チェックシート上にフォント設定がある際に上書き化されてしまうため図形を配置しています。

UF上の範囲再取得時はInputboxから範囲を選択します。下記のように再選択した場合は、その範囲が対象範囲となり翻訳されます。

再選択した範囲に図形が点滅する

翻訳元/先言語の指定

今マクロでは翻訳先と翻訳元の言語はコンボボックスから選択するか、入力することで指定します。既定では日本語と英語が入っており、この2言語はセル値の日本語割合に応じて自動和英訳されます。和英訳の場合は自動で和文判定し和英訳します(https://gakuhenn.com/vba-sheet-autojnentranslation/)。

ドロップダウンリストからも選択することができますがキーワード入力でも指定可能です。選択できる言語と入力時の置換キーワードはLngシートに記載します。置換キーワードはA列に記載され、スラッシュごとの値がキーワードになっています。コンボボックスの入力値と部分一致した場合に該当せる右B列にある言語表記/ISO言語表記に変換されます。

Lngシート。A列がキーワードで一致するとB列に置き換えられる
Enを入力するとB列の英語/enに置き換えられる

B列はUF表示用の表記で、日本語と、/ ISO-639言語表記が記載されています。スラッシュの後ろがISOの言語コードとなっており、Google翻訳で必要なものとなっているため、変更はできません。

Google翻訳で指定する言語はISO-639に準拠しています。Lngシートには下記に記載されている言語を記載しています。A列のキーワードはご自身で置き換えたいキーワードをスラッシュと共に入力して追加できます。参考:https://cloud.google.com/translate/docs/languages?hl=ja

初期値に戻したい場合(自動和英訳)は両方のコンボボックスの値を削除してください。

高速、エラー処理等(Doevents等,Statusbar)

高速化のため、空欄や数値、2文字以下で英語、平仮名片仮名がない場合は処理をスキップしています(漢字はエラーでコメントアウトし)。それ以外の場合にGootransl_DefJPandEN関数を呼びだし、引数にある翻訳元/先言語を元に翻訳します。一方で1シート全てHttpリクエストしてGetする動作を繰り返しているため、セルが多いと多少時間がかかります。翻訳ループ中には、操作のためにDoeventsを記載し処理中の操作可能にしています。

また、進捗確認のためファイルステータスバーから進捗%を表示させています。これにより実行中操作と進捗確認が可能です。

実行中の進捗確認:左下ステータスバーに進捗%表示

Gootransl_DefJPandEN関数

マクロ内で使っているGootransl_DefJPandEN関数はPublic Functionとして宣言され、ワークシート上でも利用可能です。引数は翻訳対象言語と、翻訳元、先言語の合計3つです。翻訳対象言語はVariantで宣言しているため、セルの他、テキストでも翻訳可能です。翻訳元、先言語は、Optionalで指定せずにも使用可能です。設定しない場合は和英訳として内部スクリプトの和文安定に基づいて自動和英訳されます。

シート上からセル値のみ指定し引数無しで実行
日本語と判断し、自動で英訳される

今マクロではプロシージャで、UF上で指定された言語を指定していますが、指定がない場合のために下記の和英訳自動指定スクリプトを残しています。

和英訳自動指定スクリプト

複数シート一括翻訳

UF上でシート翻訳コマンドボタンを押すことで、現在選択しているシートを一括翻訳します。

シート翻訳の場合はUF表示時に範囲取得されるロジックと同様に範囲が選択され、選択シート分ループして翻訳が実行されます。なおシート翻訳時は、セル値の他に図形内の値も翻訳対象にして同様のロジックの元で処理されます。

翻訳前
翻訳後:図形内も翻訳

UFを表示する前にシートを選択するか、UF表示中に選択することでシート翻訳可能です。UF表示後にシート選択すると、下記の強調表示が残る場合があります。これ等は最終的にUFを閉じると削除されます。

UF表示中に複数選択すると強調図形が残る

-業務効率化