Excel VBAで英語学習ツールをつくってみる
はじめに
エンジニアたるもの英語はやっぱり習得したい。という思いで1か月前から英会話を始めてみました。
ただレッスンの回数を重ねてみても、自分の言いたいことが言えない。
単純な文章のはずなのに出てこない。
そう悩んでいるときに次の書籍に出会いました。
30パターンの型とフレーズを組み合わせるとなんでも英語で言えちゃうよ!
ということが書かれており、30パターンであればなんとかマスターできるのでは?
これで英語をすらすら話せるようになるのでは?と思った私は早速実践することにしました。
ただ実際にやってみると、そもそも練習のために言う文章が思いつかないんですよね。
本当になんでもいいのですが適当な文章もなかなか思いつきません。。
代わりに適当な文章を沢山作ってくれるソフトがあったらいいなぁ。
という訳で、ExcelのVBAで作ってみることにしました。
できたもの
学習したい型とフレーズを記載してVBAを実行すると文章がランダムに生成されます。
日本語としておかしかったり、これどこで使うの?みたいな文章ができてることもありますが、そのインパクトで頭に残るという効果も期待できるんじゃないかなと思います。
コード
以下全文です。
Sub CreateQuestion()
Const GRAMMER_START As String = "A2" '文法(en)の開始セル
Const WORD_START As String = "C2" '単語(en)の開始セル
Const OUTPUT_START As String = "F2" '出力開始セル
'文法のリストを取得する
Dim grammerRange As Range
Set grammerRange = Range(Range(GRAMMER_START).Cells, Range(GRAMMER_START).End(xlDown))
'単語のリストを取得する
Dim wordRange As Range
Set wordRange = Range(Range(WORD_START), Range(WORD_START).End(xlDown))
'文法の並び順をランダムにしたいためシャッフルしたインデックス配列を作成する
shuffledGrammerIndexArr = Shuffle(CreateRange(1, grammerRange.Count))
Dim i As Variant
For i = 0 To UBound(shuffledGrammerIndexArr)
'単語をランダムに1つ選択する
Dim wordIndex As Integer
wordIndex = (wordRange.Count - 1) * Rnd + 1
Dim wordEn As String
Dim wordJa As String
wordEn = wordRange(wordIndex).value
wordJa = wordRange(wordIndex).Offset(0, 1).value
'文法をランダムに1つ選択する(事前にシャッフルしておいた配列により)
Dim grammerIndex As Integer
grammerIndex = shuffledGrammerIndexArr(i)
Dim grammerEn As String
Dim grammerJa As String
grammerEn = grammerRange(grammerIndex).value
grammerJa = grammerRange(grammerIndex).Offset(0, 1).value
'問題と回答の文字列を作成
Dim question As String
Dim answer As String
question = Replace(grammerJa, "~", "[" + wordJa + "]")
answer = Replace(grammerEn, "~", "[" + wordEn + "]")
Cells(Range(OUTPUT_START).row + i, Range(OUTPUT_START).Column).value = question
Cells(Range(OUTPUT_START).row + i, Range(OUTPUT_START).Column + 1).value = answer
Next i
End Sub
'指定した範囲の配列を生成して返す
Private Function CreateRange(ByVal valueFrom As Integer, ByVal valueTo As Integer) As Variant
Dim buf() As Integer
ReDim buf(valueTo - valueFrom)
Dim i As Integer
For i = 0 To (valueTo - valueFrom)
buf(i) = valueFrom + i
Next i
CreateRange = buf
End Function
'配列をシャッフルする
Private Function Shuffle(list)
For i = 1 To UBound(list)
Randomize
rn = Int(UBound(list) * Rnd + 1)
tmp = list(i)
list(i) = list(rn)
list(rn) = tmp
Next
Shuffle = list
End Function
おわりに
VBAの文法が全然分からない状態で臨んだのですが、数時間で欲しかったものができたので満足です。
これを活用して英語力を伸ばしていこうと思います。
Excelで動くので気になった方は是非使ってみてください。
Author And Source
この問題について(Excel VBAで英語学習ツールをつくってみる), 我々は、より多くの情報をここで見つけました https://qiita.com/all_fort/items/a50e765b53d40473b098著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .