読者です 読者をやめる 読者になる 読者になる

fastapple's blog

時系列関係なく、情報を追記・分割・統合などします。ブログに記載の内容のうち、引用ではなく、私自身が記載している文章・コードなどについては、自由にご利用ください。

エクセルでささっと作る暗記ツール


エクセルでささっと暗記ツールを作って、何度も練習する方法について書く。イメージとしては、赤い下敷きで隠す暗記用ノートに近い。暗記カードでは通常、情報のI(インプット)/O(アウトプット)に使用する五感が、I(目)/O(頭)1チャネル対1チャネルとなってしまう。エクセルであれば、タイピングして、正解の時だけ赤くするという処理ができるので、I(目)/O(頭・手)と、1チャネル対2チャネルになるため、記憶の定着度が高くなると考えられる。※一般的に、情報のI/Oに使う五感のチャネルが多いほど、記憶を定着させることができるとされているようだ。

さて、まえがきはこの辺にして、どのように作成するか書く。
まず、今回は次の3つの日本語訳から、英文を想起できるようにしたいとする。(話がやや脱線するが、このように暗記では、「覚える」ことより「思い出す」ことに焦点を置くほうがいい。)

なお、今回の例文はweblioから拝借した。weblioは大変便利なサイトだ。

うまくいくかどうか心配だ
I am worried about whether it will go ok.

行く行かないは君次第だ.
It's up to you whether to go or not.

損得などどうでも構わん.
I don't give a damn whether I gain or lose.

今回は、whetherの練習ということで、whetherで調べて3つほど例文をピックアップした。
これを以下の図のように、エクセルの2つの列に、打ち込むか、コピー&ペーストする。

f:id:fastapple:20140204224103j:plain

その次に、このB,C列を選択し、ホームメニューの条件付き書式から、「セルの強調表示ルール」、「重複する値」の順に選択する。

f:id:fastapple:20140204225156j:plain

ポップアップがでるので、OKを選択すれば、重複する値が赤く塗られて表示される。勘のいい人ならもう何をやろうとしているか気付いたかもしれない。この状態で、C列を選択し、右クリック、非表示にする。

f:id:fastapple:20140204225758j:plain

この状態で、B列の英文が書いてあるセルの、英文を削除すれば、暗記ツールの完成である。

f:id:fastapple:20140204230120j:plain

あとは、先ほど削除した英文を頑張って思い出してタイピングする。あっていれば、赤く切り替わるのでちょっとうれしい。

f:id:fastapple:20140204231448g:plain

これで、できてないところを何度もやってみよう。なお、非表示だと、答えを確認するのに、いちいち表示するのが手間だと感じる場合は、ウインドウ枠の固定を利用したり、色付きの図形を隠したい列の上に乗せるなどするといいだろう。

注意だが、これはあくまで重複する値を赤く表示するだけなので、同じ値が隣同士のセルではなく、別の場所にあっても正解とみなされてしまう。厳密にやりたい場合は、隣同士のセルに対して、条件付き書式を設定するのがよいだろうが、今回はてっとり早さを重視し、この方法を紹介した。

追記:例文のシャッフル

さて、例文をシャッフルしたいという状況が出てきて、ちょっと頑張ったのでここに共有したい。暗記ツールという用途からして、いつも同じ順番で例文が出てくるより、時折シャッフルさせることができればうれしい。これには、行のシャッフルができればよい。まずは、以下のURLを参考にした。
Excel でデータをシャッフルする方法 - アジャイルプログラマの日常

引用のURLでは、1行をシャッフルする方法が記載されている。今回は、複数行はまとめた状態でシャッフルしたいという要求がある。そこで、(完成形ではないが)一列目を追加して、次のような数式を埋めることを考えればいい。

=IF(MOD(ROW(),3)=1,RAND(),INDEX($1:$1048576,ROW()-1,COLUMN()))

これは、3というのは、行がまとまっている単位であるので、これを行がまとまっている単位に変えて使えばいい。
TODO:後でもう少し補足したい。
しかし、詳しいことはよくわからないが、excelでは1行目を開けておいたほうがフィルタを使うときにうまくいくようだ。そのため、1行目を空白行にしてフィルタのみに使用し、2行目から3行ずつをひとまとまりとして利用することを考える。すると次のようになる。

=IF(MOD(ROW(),3)=2,RAND(),INDEX($1:$1048576,ROW()-1,COLUMN()))

MOD(ROW(),3)=2となった。これは、2行目から3行ずつということである。n行目から開始したいなら、nを3で割ったあまりを入れてやればいい。今回は2行目なので、2mod3=2で結局2である。

これで、フィルタで適当に昇順とかやれば、問題がシャッフルされるようになる。なお、excelのrand()関数は、excel2013では、1マイクロ(0.000001)まで異なるので、精度はそこそこある。また、もしかしたらまとまった行の内部でシャッフルが発生してしまうのではないかと危惧したが、別にそういうことはないらしい(直観的にはあってもおかしくないが、動作に助けられた格好だ。)