仕事をしていると、大量の英語文章を翻訳したいときがあります。
このとき、Google翻訳を使うと簡単に文章を英訳できるのですが、複数の文章をまとめて翻訳するのが難しいというデメリットがあります。
というのもGoogle翻訳を使うと、文章ごとにGoogleのウェブページにコピペしないといけないからです。
翻訳した文章が少なければ問題ありませんが、大量の文章をGoogle翻訳したいときは厄介な作業となります。
そこで、複数行のエクセルに記載された英語文章をまとめて日本語に翻訳するツールを作成しました。
・VBAツールをダウンロード可能
このページではプログラムのダウンロードから解説まで行います。
無料でダウンロードできるので、ぜひ活用ください。
目次
- 1 エクセルの英語文章をまとめてGoogle翻訳|ExcelVBAで自動化
- 2 エクセル文章をまとめてGoogle翻訳するツールの使い方・手順
- 3 VBA入りのエクセルファイルをダウンロード
- 4 注意点
- 5 Word文章をGoogle翻訳
- 6 VBA作成前の準備
- 7 VBAのプログラムソース解説(2021/07/31版)
- 7.1 プログラム0|変数宣言の指定
- 7.2 プログラムA-1|プログラム開始
- 7.3 プログラムA-2|シート設定
- 7.4 プログラムA-3|URL設定
- 7.5 プログラムA-4|最終行を取得
- 7.6 プログラムA-5|翻訳したい英文を取得
- 7.7 プログラムA-6|IEオブジェクト生成と起動
- 7.8 プログラムA-7|IE起動の待ち時間
- 7.9 プログラムA-8|各行の翻訳したい文言を取得
- 7.10 プログラムA-9|翻訳したい文言が空欄の場合は「なし」を入力し処理をスキップ
- 7.11 プログラムA-10|Google翻訳用のurlを取得
- 7.12 プログラムA-11|IEでGoogle翻訳ページにアクセス
- 7.13 プログラムA-12|IE読み込み待ち
- 7.14 プログラムA-13|IEの表示待ち
- 7.15 プログラムA-14|B列に翻訳結果を出力
- 7.16 プログラムA-15|スキップ先
- 7.17 プログラムA-16|IEを閉じる
- 7.18 プログラムA-17|IEオブジェクトの解放
- 7.19 プログラムA-18|プログラム終了
- 7.20 プログラムB-1|プログラム開始
- 7.21 プログラムB-2|待ち時間の設定
- 7.22 プログラムB-3|設定した時間まで待機
- 7.23 プログラムB-4|プログラム終了
- 8 VBAのプログラムソース解説(2021/09/14版)
- 9 ウェブ情報を取得する事例
- 10 Excel VBAについて詳しく理解したいなら
エクセルの英語文章をまとめてGoogle翻訳|ExcelVBAで自動化
このページで紹介するGoogle翻訳ツールは、以下の動画を見ると理解が深まります。
以下ではテキストと画像で説明していきます。
Google翻訳をExcel関数として使う
本ページで紹介しているVBAプログラムを応用して、Google翻訳をExcel関数として使う方法があります。
具体的にはエクセル関数でGoogleTranslateを使う方法を以下で解説しています。
エクセル文章をまとめてGoogle翻訳するツールの使い方・手順
手順2|ボタンを押す
手順3|翻訳が終わるまで待つ
手順では日本語→英語のパターンも紹介していますが、プログラムの解説は別ページで実施します。
手順1|英語もしくは日本語をA列に入力
翻訳したい文章(英語もしくは日本語)をA列に入力します。
1-1. 英語から日本語に翻訳する場合
英語を日本語に翻訳したい場合は、左側のシート(Translate_ENtoJA)を選択し、A列に翻訳したい英語を入力します。
1-2. 日本語から英語に翻訳する場合
日本語を英語に翻訳したい場合は、右側のシート(Translate_JAtoEN)を選択し、A列に翻訳したい日本語を入力します。
手順2|ボタンを押す
ボタンを押下して、VBAプログラム(翻訳)を実行します。
英語から日本語に翻訳する場合
日本語から英語に翻訳する場合
手順3|翻訳が終わるまで待つ
プログラムを実行すると、一行ずつ翻訳結果がエクセルに入力されていきます。
英語から日本語に翻訳する場合
日本語から英語に翻訳する場合
さて、プログラムの都合上、翻訳の待ち時間を設定しています。
なぜならGoogle翻訳の処理時間を待たないとエラーが出るからです。
実際、上記の画像では10行分を翻訳していますが、1行に約4,5秒で結果が表示されます。
そのため行数が増えるほど、翻訳完了までの時間が必要になります。
1行あたり、4,5秒の翻訳時間を目安として考えてください。
なお、文章が記載されていない場合は「なし」とエクセルに出力されます。
ボタンにVBAプログラムを登録
上記の画像では、VBAプログラムをボタンに登録しています。
ボタンにVBAプログラムを登録することで、ボタンを押下しプログラムを実行することができます。
ボタンをVBAプログラムを設定したい場合は、以下で動画も交えて設定方法を紹介しているので、そちらをご覧ください。
使用の注意点|IEが使用できないと、このVBAツールは使えない
このツールを使えるようにするには、Internet Explorer(IE)が使用できることが条件となります。
会社のセキュリティ上、IEが使用できない場合、このツールは使用不可です。
現在使用中のPCでIEを利用可能かどうかを事前に確認しておいてください。
もしIEを使用できる場合は、以下の対応を行い、基本ブラウザがIEとなるように設定を変更する必要があります。
なおIEは2022年にサービス停止となっています。セキュリティ上の課題は残りますので、検討の上、ご利用ください。
基本ブラウザをEdgeからIEに設定変更
使用するPCは、Edgeが推奨だが、IEは使用可能という人もいるはずです。
そのような人は、ブラウザ設定を変更することで、本ツールが使用可能です。
以下の手順で、ブラウザ設定を変更してみてください。
2. URLに「edge://settings/profiles」を入力
3. サイドバーの「規定のブラウザ」をクリック
4. 「Internet Explorer に Microsoft Edge でサイトを開かせる」を「なし」で設定
テキストだけで分かりづらい人は、外部リンク(Microsoftの公式サイト)のページを紹介しておきます。
こちらをご確認の上、ブラウザ設定を変更してから本ツールをご利用ください。
IEのブラウザ操作ではなく、HTTPリクエストに変更
本ページで紹介するプログラムはもともとIE操作でプログラムを作成していました。
しかしHTTPリクエストでGoogle翻訳を実行する方法があるため、プログラムを書き替えました。
VBA入りのエクセルファイルをダウンロード
以下で紹介しているVBAプログラムをそのまま使いたい人は、以下のフォームからダウンロードできます。
登録したメールアドレスへVBA入りのファイルを送信します。
本プログラムの内容をそのまま使用可能です。ぜひお仕事にお役立てください。
上記のフォームからダウンロードできるエクセルには、英語→日本語、日本語→英語の両方の翻訳マクロが保存されています。
Excel関数としてGoogle翻訳を行う場合は、以下のページ
本ページの上位互換でエクセル関数でGoogleTranslateを使う方法を以下で解説しています。
このツールを使うメリット
Googleの翻訳ツールは精度が上がってきています。このツールを活用して、時間を書けるべき仕事に集中できる環境を作ってほしいと思います。
また翻訳を仕事にしている人も、翻訳のアシストツールとして活用できるはずです。
ただし、Google翻訳の精度は上がっていますが、英語の翻訳として不十分なところがあります。
もし取引先に連絡したり、重要な資料を作成したりする場合は、チェックを入れることをおすすめします。
余計なVBAの設定は不要
上記のフォームでダウンロードしたエクセルであれば、以下のVBAプログラムの設定やプログラムを理解する必要はありません。
IEを使える環境であれば、すぐに使用可能です。
もしプログラムに興味がなければ、フォームからエクセルをダウンロードしてみてください。
注意点
このVBAツールを使用する場合の注意点と対処法を列挙しておきます。
1. エラーが起きたときの対処法
プログラムの関係上、上記のようなエラーが発生することがあります。
その場合は以下の対処法を試してみてください。
対処法2|一度Internet Explorerを起動してから試す
対処法3|PCを再起動してやり直す
対処法1|エクセルのセル内に含まれる文字数を減らす
エクセルの翻訳したいセルに含まれる文字数が多いほど、エラーの原因になります。
またgoogle翻訳の性質上、1セル内の文字数が5000を超えると全て翻訳されない場合があります。
一つのセルに5000文字を超える文字数を入れないことが重要です。
対処法2|一度Internet Explorerを起動してから試す
もし文字数を減らしてもエラーが出る場合は、Internet Explorerを閉じてから一度開いて、トップページが開いているかどうか確認してみてください。
その後で、エクセルの翻訳ボタンを押すとうまくいく場合があります。
対処法3|PCを再起動してやり直す
文字数の確認、Internet Explorerの起動確認を試しても難しい場合は、PCを再起動してみてください。
そうすると、うまくいく場合があります。
2. Googleスプレッドシートを使えるなら、VBAは不要
Googleスプレッドシートを使える環境ならば、以下の関数で翻訳が可能です。
わざわざVBAに頼ることはありません。
会社のセキュリティ上、VBAを使わざるを得ない人は、このページのツールをご活用ください。
3. Internet Explorerが使えない場合
VBA以外の外部ツールをダウンロードする必要がありますが、Seleniumを使った方法で代用することが可能です。
またPowerAutomateによる方法も検討の余地があります。
このページでは紹介していませんが、要望によっては今後紹介していきます。
Word文章をGoogle翻訳
上記のリンクでは、Wordの文章を英語から日本語、日本語から英語と自動翻訳するツールを紹介しています。
VBA入りのファイルをダウンロード可能なので、興味がある人はご覧ください。
VBA作成前の準備
ExcelでVBAを使うためにはいくつかの準備が必要です。
具体的には以下です。
準備2. 「Microsoft Internet Controls」と「Microsoft HTML Object Library」の参照設定を変更
上記に関して、以下で説明します。
準備1. ExcelでVBAを使うための事前準備
エクセルVBAを使うためには、保存ファイルの拡張子変更、Excelの基本設定変更の2つをしておきます。
2つともで難しい作業はなく、それぞれ1分もあれば設定変更可能です。
上記に関しては、以下の記事で解説をしています。
もしVBAを使うための準備段階に不安がある人は上記をご覧ください。
この内容は以下の動画で紹介しています。
入門エクセルマクロの使い方|マクロ作成から実行までを徹底解説
文字や画像だけで分かりづらい人は上記の動画をご覧ください。
準備2. 「Microsoft Internet Controls」と「Microsoft HTML Object Library」の参照設定を変更
エクセルVBAでウェブ情報を取得するために、VBAの設定を変更しておく必要があります。
これらの参照設定を変更することで、Internet Explorerを操作してウェブ情報を取得することが可能になります。
参照設定の変更手順は以下のとおりです。
手順2. 「参照設定」を選択
手順3.
手順4. OKをクリック
手順を以下で説明します。
画像が異なりますが、Microsoft XML v6.0にチェックが必要です。
上記の設定をしていないと、本事例で紹介しているプログラムは動作しません。必ずチェックを入れるようにします。
VBAのプログラムソース解説(2021/07/31版)
今回紹介するプログラムの概要は以下です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
'プログラム0|変数設定の指定 Option Explicit 'プログラムA-1|プログラム開始 Sub GetGoogleTranlationByIE_ENtoJA() 'プログラムA-2|シート設定 Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Translate_ENtoJA") 'プログラムA-3|URL設定 Dim baseurl As String baseurl = "https://translate.google.co.jp/?hl=ja&sl=auto&tl=ja&text=" 'プログラムA-4|最終行を取得 Dim cmax As Long cmax = ws.Range("A65536").End(xlUp).Row 'プログラムA-5|翻訳したい英文を取得 Dim texts As Variant texts = ws.Range("A2:A" & cmax).value 'プログラムA-6|IEオブジェクト生成と起動 Dim objIE As New InternetExplorer Set objIE = New InternetExplorer objIE.Visible = True 'プログラムA-7|IE起動の待ち時間 Call WaitFor(3) 'n秒停止 'プログラムA-8|各行の翻訳したい文言を取得 Dim i As Long For i = 1 To UBound(texts) 'プログラムA-9|翻訳したい文言が空欄の場合は「なし」を入力し処理をスキップ If texts(i, 1) = "" Then ws.Range("B1").Offset(i, 0).value = "なし" GoTo Continue End If 'プログラムA-10|Google翻訳用のurlを取得 Dim url As String url = baseurl & texts(i, 1) 'プログラムA-11|IEでGoogle翻訳ページにアクセス objIE.navigate url 'プログラムA-12|IE読み込み待ち Do While objIE.Busy Or objIE.readyState < 4 DoEvents Loop 'プログラムA-13|IEの表示待ち Call WaitFor(3) 'n秒停止 Debug.Print objIE.document.getElementsByTagName("textarea")(1).innerText 'プログラムA-14|B列に翻訳結果を出力 ws.Range("B1").Offset(i, 0).value = objIE.document.getElementsByTagName("textarea")(1).innerText 'プログラムA-15|スキップ先 Continue: Next 'プログラムA-16|IEを閉じる objIE.Quit 'プログラムA-17|IEオブジェクトの解放 Set objIE = Nothing 'プログラムA-18|プログラム終了 End Sub 'プログラムB-1|プログラム開始 Function WaitFor(ByVal second As Integer) 'プログラムB-2|待ち時間の設定 Dim futureTime As Date futureTime = DateAdd("s", second, Now) 'プログラムB-3|設定した時間まで待機 While Now < futureTime DoEvents Wend 'プログラムB-4|プログラム終了 End Function |
それでは、以下でプログラムを詳しく説明していきます。
プログラム0|変数宣言の指定
1 |
Option Explicit |
「Option Explicit」とは、変数宣言を強制するためのものです。
予期しないエラーを防止できるため「Option Explicit」を入力することを習慣化することを推奨しています。
詳しい説明は以下のページで紹介しています。
また変数については、以下のページで紹介しています。
プログラムA-1|プログラム開始
1 |
Sub GetGoogleTranlationByIE_ENtoJA() |
「Sub GetGoogleTranlationByIE_ENtoJA()」のプログラムを開始することを意味します。
VBAではプロシージャという単位でプログラムを呼び出します。
プロシージャの構文は下記となっています。
1 2 3 |
Sub プロシージャ名() '実行プログラム End Sub |
「Sub」で始まり「End Sub」で終わります。
プロシージャに関連するmoduleの話については以下で説明しています。
プログラムA-2|シート設定
1 2 |
Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Translate_ENtoJA") |
「Translate_ENtoJA」をwsとして設定します。
なお「ThisWorkbook」を付けることで、VBAプログラムが含まれるエクセルファイルの「Sheet1」を細かく指定しています。
プログラムA-3|URL設定
1 2 |
Dim baseurl As String baseurl = "https://translate.google.co.jp/?hl=ja&sl=auto&tl=ja&text=" |
上記のURLで英文をGoogle翻訳した結果(日本語)を取得することができます。
ここでは前半部分「https://translate.google.co.jp/?hl=ja&sl=auto&tl=ja&text=」をbaseurlとして設定します。
なお、後半部分「翻訳したい英文」はプログラムA-7で取得します。
プログラムA-4|最終行を取得
1 2 |
Dim cmax As Long cmax = ws.Range("A65536").End(xlUp).Row |
最終行を取得してcmaxとします。
この事例ではcmaxは10です。
Debug.Printでの検証結果
1 2 3 4 5 6 |
Dim cmax As Long cmax = ws.Range("A65536").End(xlUp).Row Debug.Print cmax >>>10 |
cmax=10であることが確認できました。
プログラムA-5|翻訳したい英文を取得
1 2 |
Dim texts As Variant texts = ws.Range("A2:A" & cmax).value |
エクセル上の翻訳したい英文を取得します。
ここではセルA2:A10(cmax)まで範囲を取得します。
このとき、途中で空欄が入ると、すべてのセルを翻訳できないので注意が必要です。
A列に途中の空欄セルがないようにします。
プログラムA-6|IEオブジェクト生成と起動
1 2 3 |
Dim objIE As New InternetExplorer Set objIE = New InternetExplorer objIE.Visible = True |
IEオブジェクトを生成し、IEを起動します。
参照設定を実施していないと、ここでエラーが出ます。事前準備のとおり参照設定を変更しておきます。
参考情報
VBAによるIE操作の基本プログラムについては、以下で詳しく説明しています。
プログラムA-7|IE起動の待ち時間
1 |
Call WaitFor(3) |
IEの起動には時間がかかる場合があります。
そこで数秒間、IE起動の待ち時間を設定します。
ここではプログラムBを呼び出して、3秒間の待ち時間を設定しています。
プログラムA-8|各行の翻訳したい文言を取得
1 2 |
Dim i As Long For i = 1 To UBound(texts) |
エクセルの2行目から最終行まで1行ずつ値をtext(i)として取り出します。
Debug.Printでの検証結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Dim i As Long For i = 1 To UBound(texts) Debug.Print "i:" & i, texts(i) Next >>>i:1 Each component of wellness is equally important in the pursuit of life fulfillment. While there are a number of different wellness dimensions discussed, many articles agree on some combination of the following: >>>i:2 Intellectual: maintaining memory, improving cognitive abilities, satisfying our natural curiosity and learning new skills >>>i:3 Physical: dedication to physical exercise and nutritious eating >>>i:4 Emotional: self-acceptance and acknowledging a wide range of feelings in ourselves and others as normal >>>i:5 Social: connecting with others, traveling outside our comfort zone, getting close to other people, and getting to know other cultures >>>i:6 Occupational: gaining expertise in a chosen field of study and achieving professional-level mastery >>>i:7 Spiritual: a set of beliefs, core values, principles and a guiding purpose for one’s life >>>i:8 Environmental: active participation in the reduction of pollution and waste regulation >>>i:9 CVM’s Work-Life/Wellness Program was implemented in an effort to keep each of these components of wellness at the forefront of employees’ minds. The different aspects of the program were developed based on feedback from employees across all offices, and the execution of program initiatives and activities are driven by Center representatives. It is our sincere hope that this program always represents the needs and desires of CVM employees and their quest to get healthy and stay healthy in all areas of life. |
これでエクセルの各行の値を取り出せていることが分かります。
参考情報
ここでは配列を使っていますが、別ページで事例を交えて説明をしています。
プログラムA-9|翻訳したい文言が空欄の場合は「なし」を入力し処理をスキップ
1 2 3 4 |
If texts(i, 1) = "" Then ws.Range("B1").Offset(i, 0).value = "なし" GoTo Continue End If |
texts(i)から取り出した値が空欄だった場合は、B列に「なし」と出力します。
この場合、プログラムA-10~プログラムA-14をスキップし、プログラムA-15に移行させます。
なお、翻訳したい文言が空欄の状態でプログラムを進めると、A-14でエラーが発生します。
参考情報
ここでは「GoTo Continue」を使って処理をスキップしています。
以下のページで、ForNext文の使い方の一つとして事例を交えて説明しています。
プログラムA-10|Google翻訳用のurlを取得
1 2 |
Dim url As String url = baseurl & texts(i, 1) |
url= baseurl & texts(i,1)でGoogle翻訳のためのURLを設定します。
ここでは、プログラムA-4「baseurl」とプログラムA-5「texts(i)」を活用して、Google翻訳にアクセスするurlを設定しています。
ここで設定したurlを使って、Google翻訳を実施します。
プログラムA-11|IEでGoogle翻訳ページにアクセス
1 |
objIE.navigate url |
IEでGoogle翻訳ページにアクセスします。
これによりブラウザ上で、Google翻訳の結果が表示されます。
参考情報
VBAによるIE操作の基本プログラムについては、以下で詳しく説明しています。
プログラムA-12|IE読み込み待ち
1 2 3 |
Do While objIE.Busy Or objIE.readyState < 4 DoEvents Loop |
IEの読み込み待ちを行います。
読み込み状態は「.Busy」プロパティと「.readyState」を確認することで、完了状況を判断することができます。
参考情報
VBAによるIE操作の基本プログラムについては、以下で詳しく説明しています。
プログラムA-13|IEの表示待ち
1 |
Call WaitFor(3) |
IEでGoogle翻訳ページを表示するための待ち時間を設定します。
処理が完了する前に次のプログラムへ進むのを回避します。
ここではプログラムBに3を受け渡して、3秒ほど待機時間を設けています。
プログラムA-14|B列に翻訳結果を出力
1 |
ws.Range("B1").Offset(i - 1, 0).value = objIE.document.getElementsByTagName("textarea")(1).innerText |
B列に翻訳結果を出力します。
ここでは「objIE.document.getElementsByTagName(“textarea”)(1).innerText」を使って、翻訳結果を取得しています。
この取得方法について説明します。
getElementsByTagName(“textarea”)(1).innerText
2. getElementsByTagName(“textarea”)(1).
3. innerText
上記を解釈すると、以下のようになります。
1. objIEオブジェクトのHTMLのデータ構造の
2. “textarea”で指定されるタグ要素の1番目要素の
3. テキスト
要はウェブページの「textarea」で指定される要素の1番目のテキスト部分を取得しています。
それでは、これら3つの要素について説明します。
1. objIE.document.
プログラムA-11で読み込んだウェブページ(objIE)の情報をdocumentオブジェクトを取得します。
イメージとしては、ウェブページ上でF12で確認できるDevToolsで確認できるソースコードを指します。
2. getElementsByTagName(“textarea”)(1).
WebではHTMLを解析し、DOM(Document Object Model)と呼ばれるデータ構造に変換します。
ここではDOMのデータ構造の内、「textarea」で指定されるタグ名をもとに要素を選択し、その1番目の要素を取得します。
そして、F12で確認できるDevTools上で、「textarea」で検索をかけると、2種類のtextareaが存在することが分かります。
なおプログラムの都合上、0,1,2,・・・という順番で要素番号が割り振られるため、(1)と記述しますが、実質的な要素番号は2番目となります。
今回のページでは以下のように「textarea」は(0)と(1)の2つが存在します。
上記の2つのtextareaはDevToolsの中で確認できます。
3. innerText
「getElementsByTagName(“textarea”)(1).」で指定した要素のなかのテキスト情報を取得します。
他にも「innerHTML」、「outerText」、「outerHTML」といったプロパティを使えます。
ここではinnerTextで翻訳結果を過不足なく取得できるので、innerTextとしています。
プログラムA-15|スキップ先
1 2 |
Continue: Next |
「Continue:」はプログラムA-9のGoTo Continueの移行先を指します。
このContinue:を設定することで、ForNext文の途中でプログラムをスキップすることが可能です。
参考情報
ここでは「GoTo Continue」を使って処理をスキップしています。
以下のページで、ForNext文の使い方の一つとして事例を交えて説明しています。
プログラムA-16|IEを閉じる
1 |
objIE.Quit |
IEを閉じます。
参考情報
VBAによるIE操作の基本プログラムについては、以下で詳しく説明しています。
プログラムA-17|IEオブジェクトの解放
1 |
Set objIE = Nothing |
今回生成したIEオブジェクトであるobjIEを解放します。
プログラムA-18|プログラム終了
1 |
End Sub |
プログラム終了させる記載です。
「End Sub」を読み込むと、プログラムが終了します。
プログラムB-1|プログラム開始
1 |
Function WaitFor(ByVal second As Integer) |
プログラムA-7およびプログラムA-13で受け取った値をもとにFunctionプロシージャ「WaitFor」を実行します。
プログラムA-7およびプログラムA-13ともにsecondとして「3」を受け取るため、3秒のプログラム待機時間を作ります。
プログラムB-2|待ち時間の設定
1 2 |
Dim futureTime As Date futureTime = DateAdd("s", second, Now) |
futureTimeというDate型の変数を設定し、Now(現在の日時)にsecond(引数)秒を加算した日付とします。
ここではsecond=3なので、プログラムBを実行する日時(Now)に3秒加算した日時をfutureTimeとします。
プログラムB-3|設定した時間まで待機
1 2 3 |
While Now < futureTime DoEvents Wend |
プログラムB-2で設定したfutureTimeになるまで処理を止めます。
プログラムB-4|プログラム終了
1 |
End Function |
プログラムBを終了させて、プログラムAに戻ります。
プログラムの解説はここまでです。
VBAのプログラムソース解説(2021/09/14版)
プログラムをIE操作からHTTPリクエストに書き換えました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
'プログラム0|変数設定の指定 Option Explicit 'プログラムA-1|プログラム開始 Sub GetGoogleTranlationByJatoEn() 'プログラムA-2|シート設定 Dim ws As Worksheet Set ws = ThisWorkbook.ActiveSheet Dim translateFrom As String, translateTo As String translateFrom = "ja" translateTo = "en" 'プログラムA-3|URL設定 Dim baseurl As String baseurl = "https://translate.google.pl/m?hl=" & translateFrom & "&sl=" & translateFrom & "&tl=" & translateTo & "&ie=UTF-8&prev=_m&q=" 'プログラムA-4|最終行を取得 Dim cmax As Long cmax = ws.Range("A65536").End(xlUp).Row 'プログラムA-5|翻訳したい英文を取得 Dim texts As Variant texts = ws.Range("A2:A" & cmax).value 'プログラムA-6|HTTPリクエストの設定 Dim objHTTP As Object Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") 'プログラムA-7|IE起動の待ち時間 'Call WaitFor(1) 'n秒停止 'プログラムA-8|各行の翻訳したい文言を取得 Dim i As Long For i = 1 To UBound(texts) 'プログラムA-9|翻訳したい文言が空欄の場合は「なし」を入力し処理をスキップ If texts(i, 1) = "" Then ws.Range("B1").Offset(i, 0).value = "なし" GoTo Continue End If 'プログラムA-10|Google翻訳用のurlを取得 Dim url As String url = baseurl & EncodeURL(texts(i, 1)) 'プログラムA-11|HTTPリクエスト With objHTTP .Open "GET", url, False .setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" .send ("") End With 'プログラムA-12|HTTPリクエストのレスポンステキストを取得 Dim oHtml As New MSHTML.HTMLDocument Set oHtml = New MSHTML.HTMLDocument oHtml.body.innerHTML = objHTTP.responseText 'プログラムA-14|B列に翻訳結果を出力 Dim transtext As String ws.Range("B1").Offset(i, 0).value = Clean(oHtml.getElementsByClassName("result-container")(0).innerText) 'プログラムA-15|スキップ先 Continue: Next 'プログラムA-17|IEオブジェクトの解放 Set objHTTP = Nothing 'プログラムA-18|プログラム終了 End Sub '翻訳後のテキスト内の文言を変換 Function Clean(str As String) str = Replace(str, """, """") str = Replace(str, "%2C", ",") str = Replace(str, "'", "'") Clean = str End Function '日本語をURLエンコード Function EncodeURL(ByVal str As String) As String EncodeURL = Application.WorksheetFunction.EncodeURL(str) End Function |
プログラムの解説は入れておりませんが、基本的にはIEのときと同じです。
IE操作の部分をHTTPリクエストに書き換えてあります。
ウェブ情報を取得する事例
ウェブ情報を取得する事例は別ページでも紹介しています。
1. IE操作でウェブ情報を取得
2. HTTPリクエストでウェブ情報を取得
3. APIを使ってウェブ情報を取得
4. VBA以外のプログラミング言語でウェブ情報を取得
Excel VBAについて詳しく理解したいなら
VBAを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にVBAを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
動画でも解説しています。
エクセルマクロVBAで出来ることを15の事例で紹介|日常業務をラクにするヒントを見つけよう!
(音声が小さいので、ボリュームを上げてご覧いただければと思います)
VBAの勉強方法
私はプログラミング初心者からVBAを勉強を始めて少しずつレベルアップしていきました。
成長の過程は以下で紹介しています。
学習の過程では、意識すべきポイントがあります。
特に独学の場合だと、勉強を優先してしまい、肝心な実践を疎かにしがちです。
私の経験では、実践から逆算した勉強が必要だと考えています。
目指すべきは会社でお金をもらいながら勉強することです。
要はVBAを仕事の一つとして上司に認めてもらうのです。
そうすればわざわざ高いお金を払って勉強をする必要がなくなります。
しかも作業を自動化して、会社やチームに貢献しつつ、自らのスキルアップできます。
そのために必要な考え方を以下で紹介しています。
とはいえ、プログラミング初心者でVBAについて知識ゼロの人もいるはずです。
いきなり会社でVBAで使うことさえ、とてつもなくハードルが高く見えてしまうものです。
その場合は、VBAの基本について学ぶ必要があります。
たとえば車の運転も慣れてしまえば、たいしたことではありません。
しかし教習所で運転の基本を学び、免許を取得することで、公道で運転できるようになります。
VBAも同じです。VBAに免許はありませんが、まずは基本を学ばないことには会社で使えるレベルにはなりません。
実際に私もプログラミング初心者のときは、動画を見たり書籍を読んだりして勉強しました。
今はオンラインの教材で無料で学習できるものも多いです。
上記のリンクでは、私の経験から勉強にオススメの教材を紹介しています。
興味がある人はご覧ください。