【英語教材】語順整序問題生成マクロ

おか塾

ここ5年以上、息子の勉強を家で教えています。
世間で「親塾」と呼ばれているやつですが、我が家では「おか塾」と呼んでいます。
言いたいことは山ほど溜まっているのですが、最初から語ると大河ドラマ並みのスケールのため、記事にするのに時間を要しています。

そこで、単体で今すぐ役立つ事柄を記事にしていくことにしました。
第1弾として、英語の語順整序問題を生成するマクロをご紹介します。

目次

はじめに:「パパッと教材作成」というニーズ

補習塾としての「親塾」を考えたとき、そのメリットの一つは、学校の教材に即した指導を行えることでしょう。
市中の塾はどうしても検定教科書ベースの指導になると思います。一方、学校によっては副教材ベース、あるいは先生お手製のプリントベースで授業が進められます。定期テスト対策を考えると、学校で実際に使用している教材を基にした方が効率は良いでしょう。

しかし学校の教材に練習問題がついていない場合は大変です。「親塾」自ら、それを用意しなければなりません。同じ学校に兄弟がいればともかく、そうでなければ過去の教材の蓄積などありません。
そんなわけで、ここ数年、私は「任意の元ネタからパパッと教材を作る」というノウハウを蓄積してきています。

その一例が、今回ご紹介する、英語の語順整序問題を生成するExcel VBAです。

マクロの概要

まずMicrosoft Excelを用意し、本ページで配布しているブックを開いてください。

たとえば以下のような英文を入力します。

This book is worth reading.

すると以下のような出力を得られます。

この本は読む価値がある。
is / this / worth / book / reading / .

複数の英文に対し、上記処理を一括して行うことができます。

開発の背景

先日、小テストの範囲が発表されました。指定されているのは30個ほどの英文。過去のテスト形式から見て、語順整序問題として出されると予想されました。
しかし、手許にあるのは元の英文のみ。これを語順整序問題に仕立てるには、英文を和訳し、かつ、英文を単語に分解してランダムに並べ替えるという作業が必要です。英文30個に対しこれを手作業でやるのは辛い。

生成AIはあと一歩、力及ばず

このご時世、生成AIを使えば一発なのではないかと考えたのですが、ダメでした(2025年5月現在)。

ChatGPTに投げかけたところ、ちょいちょい変な回答が出てきて使い物になりません。課金していないからかもしれませんが。
具体的には、単語が1語抜けていたり、元の文に “the” が3回出てくるのに問題には1回しか出てこなかったり。また、元の文の最初の大文字は、問題では小文字に直してほしいと要望しましたが、これも処理できたりできなかったり。

あと数年すれば十分使い物になりそうな気もしますが、来週の小テストには間に合いません。

ちなみに本記事のアイキャッチ画像も生成AIで作成しましたが、ツッコミどころが色々ありますよね。2025年の生成AIはこんなんだった、という歴史的記録として残しておきたいと思います。

Excelで英訳、こんなに簡単だった!

語順整序問題を生成するニーズは今後もありそうだと考え、Excel VBAでマクロを書くことにしました。

語順整序だけなら余裕ですが、できれば英文和訳もしてもらいたい。
そう思って調べてみると、大きく分けて2つの方法があることが分かりました。

まず1つは、外部の翻訳サービスを利用する方法。多量でなければ無料で利用できるサービスもいくつかあります。
最初に見つかったのがDeepLです。無料でも、この用途には十分な量の翻訳をしてくれます。ただし、APIを通して利用するには、アカウントを作成してKeyを取得する必要があります。

Google翻訳も事情はほぼ同様ですが、APIを通して利用しようとすると、有無を言わさず「課金アカウント」を作らされます。実際には一定の文字数までなら無料なのですが、それを超えると黙って課金してきます。ちょっと怖いなというのが正直なところ。
その後、ウェブベースでGoogle翻訳にアクセスするマクロを発見しました(DeepLでも可能かもしれません)。こちらはアカウントを作成することなく利用できるため、課金の心配はありません。

ただ、ソースを見ると「力技」で、本来の使い方からは若干外れている気もします。また、今後の仕様変更でうまく動かなくなる懸念はあります。

そしてもう1つ。何と知らぬ間に、Excelに「TRANSLATE」というワークシート関数が追加されていました。この関数に英文を食わせれば、マクロを組むこともなく、一発で和訳が出力されます。間違いなくこれが一番簡便です。
ただ、この関数はExcel VBAからは利用できないようです(誤解だったらすみません)。一般的なワークシート関数はExcel VBAからでも利用できるのですが。
もしTRANSLATE関数を利用するのであれば、セルに数式として入力することになります。

ダウンロードと使用方法

前置きが長くなりましたが、語順整序問題生成マクロを含むExcelブックを置いておきます。

参考文献

本マクロの作成にあたり、以下のサイトにあったソースコードを一部使用させていただきました。

まず、DeepLをExcel VBAから使う手法についてはこちら。

次に、Google翻訳をExcel VBAから使う手法についてはこちら。

使用方法

B列の11行目以降に英文を入力します。
「D列にB列の和訳を上書き」ボタンを押すと、D列にその和訳が出力されます。
「E列に整序問題を上書き」ボタンを押すと、E列に語順整序問題が出力されます。

翻訳はGoogleかDeepLか?

和訳について、デフォルトではGoogle翻訳を利用するようになっています。

DeepLを使用したい場合は、まずAPI Keyを取得してください。
その上でソースコードを修正します。具体的には、まずAPI Keyを定数 AUTH_KEY にセットします。次に定数 SelectTranslateService を「2」に修正します。

私の使った感じでは、DeepLの訳は自然すぎて、元の英語を再現するのが難しい場合があります。一方、Google翻訳はDeepLより「直訳感」が残っています。ですので、和文英訳の問題としてはGoogle翻訳の方が親切だと思います。
一例を挙げます。

The story you told me yesterday was interesting.
DeepL:昨日の話は面白かったよ。
Google翻訳:昨日話してくれた話は面白かったです。

DeepLの和訳は会話として自然ですが、この日本語を見て元の英語を再現するのは、語順整序問題であっても少し厳しいと思います。
Google翻訳の方も「you」にあたる訳語が省略されているので、中学レベルだと「あなたが」という語句を補いたくなります。が、DeepLよりは元の英語を再現しやすいといえるでしょう。

ちなみにMicrosoft翻訳(TRANSLATE関数)だとこうなります。
総じて、Microsoft翻訳はGoogle翻訳に近いテイストだと思います。

Microsoft翻訳:昨日お話しいただいたお話は面白かったです。

2単語以上をひとかたまりとして扱うには

語順整序問題では、2単語以上をひとかたまりとして扱うものがあります。
たとえば、I have a dog. の語順整序問題として、have / a dog / I / . のような感じ。「a」と「dog」はこの順で使いますよ、という指定があります。
このような問題を作りたい場合、B列に「I have a*dog.」と入力します。つまり、通常スペースを入力するところ、代わりに「*」を入力します。こうすると「a」と「dog」の間で句が分割されません。

文頭の単語が固有名詞の場合には

また、文頭の大文字については、原則として小文字に変換して問題を生成する仕様です
そうでないと、文頭の語がどれかバレてしまいますからね。

しかし、文頭が「I’ll」あるいは「Mike」の場合、これを「i’ll」「mike」とするのはカッコ悪い。

前者は機械的に判別できるので、特に何もしなくても大文字を維持します。

一方、後者は「文頭の単語が固有名詞か否か」を判定する必要があります。英文をきちんと解釈できないと、正確な判別は無理です。
なので、ここは割り切って手動で判別します。文頭の大文字を小文字にしたくない場合は、C列に「Y」を入力してください。すると「文頭の文字を小文字にしない」という処理を行います。

子サイトはじめました!
本記事をお読みいただき、ありがとうございました。

全くの素人が持ち家を売り、賃貸へ引っ越した記録を時系列でまとめたサイトを運営しています。
お時間があれば、ぜひご一読を!
おか塾
スポンサーリンク
シェアする
夫をフォローする

コメント