VBAを使って英単語暗記シートを作ってみた
VBAの勉強がてら英単語の暗記シートを作ってみたので、その記録。
暗記シートの機能
モノは、Weblioの語彙力診断テストでテスト→結果の英単語一覧をコピペして利用するエクセルシートです。
・不要な単語や覚えた単語は簡単に削除できる
・カーソルのある行だけ単語の意味が見える
・他の辞書サイトへのリンクを張る
・印刷用の単語リストが生成できる
こんな感じ。
とりあえずスクリプト
'「整理」ボタン用 Sub set_column() max_Row = Cells(Rows.Count, 2).End(xlUp).Row Application.ScreenUpdating = False For i = max_Row To 2 Step -1 If Cells(i, 2).Value <> "" Then Cells(i, 5).Value = Cells(i, 2) Cells(i, 6).Value = Cells(i, 2) Hyperlinks.Add Anchor:=Cells(i, 5), Address:="http://eow.alc.co.jp/search?q=" & Cells(i, 2) Hyperlinks.Add Anchor:=Cells(i, 6), Address:="https://www.google.com/search?safe=off&hl=en&q=Dictionary&gws_rd=cr&dcr=0&dobs=" & Cells(i, 2) End If If Cells(i, 3).Value <> "" And Cells(i, 3).Value <> "z" Then Cells(i, 3).Cut Cells(i, 4) End If If Cells(i, 1).Value = "○" Then Cells(i, 3).Value = "z" End If Next i Application.ScreenUpdating = True End Sub '「zを削除」ボタン Sub del_z_rows() max_Row = Cells(Rows.Count, 2).End(xlUp).Row Application.ScreenUpdating = False For i = max_Row To 2 Step -1 If Cells(i, 3).Value = "z" Then Range(i & ":" & i).Delete End If Next i Application.ScreenUpdating = True End Sub Sub Worksheet_SelectionChange(ByVal Target As Range) Columns(4).Font.Color = RGB(255, 255, 255) If Not Target.Row Then Cells(Target.Row, 4).Font.Color = RGB(0, 0, 0) End If End Sub '「印刷用生成」ボタン Sub for_print() max_Row = Cells(Rows.Count, 2).End(xlUp).Row Application.ScreenUpdating = False Worksheets("印刷用").Cells.Clear For i = max_Row To 2 Step -1 If Cells(i, 2).Value <> "" Then Worksheets("印刷用").Activate ActiveSheet.Cells(i, 1).Value = "□" ActiveSheet.Cells(i, 2).Value = Cells(i, 2) ActiveSheet.Columns(3).ColumnWidth = 5 ActiveSheet.Cells(i, 4).Value = Cells(i, 4) ActiveSheet.Rows(i).RowHeight = 20 ActiveSheet.Range("A:D").EntireColumn.AutoFit With ActiveSheet.Range(ActiveSheet.Cells(i, 1), ActiveSheet.Cells(i, 4)).Borders(xlEdgeBottom) .LineStyle = xlDash .Weight = xlHairline .ColorIndex = xlAutomatic End With End If Next i Application.ScreenUpdating = True With ActiveSheet.PageSetup .RightHeader = "&D" .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = False End With End Sub
準備
メインのシートにスクリプト発動用のボタンを3つ用意。
名前は適当でOKですが、例えば「整理」「zを削除」「印刷用生成」にして、それぞれスクリプトを割り当てます。
「整理」 → set_column()
「zを削除」 → del_z_rows()
「印刷用生成」 → for_print()
こんな感じ。
それと「印刷用」という名前のシートを用意しておきます。
このシートはfor_print()内で名前を決め打ちしているので注意。
使い方
Weblioのテスト結果の画面から、結果をコピー
エクセルのシートにペーストします
「整理」ボタンを押すと、暗記シートのかたちに成型されます
3列目に英字の「z」を入れて「zを削除」ボタンを押すとその行は削除されるので、不要な単語、覚えなくてもいい単語はzを入れて削除!
※テストで正解した単語は「整理」を押した時点で「z」が自動で入ります
これで英単語暗記シートの完成です。
カーソルのある行だけ英単語の意味が見えるので頑張って暗記します。
もちろん単語リストの追加も可能です。
Weblioの意味だけだと怪しいので、他の辞書サイトでも意味を確認したいと思い、英辞郎とgoogleに自動でリンクが張られるようになっています。
「印刷用生成」ボタンをを押すと、印刷に適したフォーマットのリストを生成します。
印刷プレビューはこんな感じ。日付が入ったりします。
エクセルって色々できておもしろいですね。
以上。
メモ
クラスを作ったりすればもっとスッキリしそうですが、なんせVBAは初めてなのでこの辺で勘弁。
おもしろいなと思ったのが最終行を取得するこの部分。
max_Row = Cells(Rows.Count, 2).End(xlUp).Row
エクセルのエンドモードで2列目の最終セルを取得、そこが何行目なのかという方法で最終行を判断しています。ここらへん、エクセルならではないでしょうか。実はエクセルをよく知らないので勉強になります。

いつもの作業を自動化したい人の Excel VBA 1冊目の本
- 作者:大村 あつし
- 発売日: 2017/06/20
- メディア: 単行本(ソフトカバー)