Yotazo Lab.

ほぼ自分用。でも誰かの役に立つかもしれない話題

VBAを使って英単語暗記シートを作ってみた

f:id:yotazo:20171013095546g:plain

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()内で名前を決め打ちしているので注意。

使い方

f:id:yotazo:20171019162625p:plain
Weblioのテスト結果の画面から、結果をコピー

f:id:yotazo:20171019162627p:plain
エクセルのシートにペーストします

f:id:yotazo:20171019162630p:plain
「整理」ボタンを押すと、暗記シートのかたちに成型されます

f:id:yotazo:20171019162924p:plain
3列目に英字の「z」を入れて「zを削除」ボタンを押すとその行は削除されるので、不要な単語、覚えなくてもいい単語はzを入れて削除!

※テストで正解した単語は「整理」を押した時点で「z」が自動で入ります

f:id:yotazo:20171013095546g:plain
これで英単語暗記シートの完成です。

カーソルのある行だけ英単語の意味が見えるので頑張って暗記します。

もちろん単語リストの追加も可能です。

Weblioの意味だけだと怪しいので、他の辞書サイトでも意味を確認したいと思い、英辞郎googleに自動でリンクが張られるようになっています。

「印刷用生成」ボタンをを押すと、印刷に適したフォーマットのリストを生成します。

f:id:yotazo:20171019172300p:plain

印刷プレビューはこんな感じ。日付が入ったりします。

エクセルって色々できておもしろいですね。

以上。


メモ

クラスを作ったりすればもっとスッキリしそうですが、なんせVBAは初めてなのでこの辺で勘弁。

おもしろいなと思ったのが最終行を取得するこの部分。

max_Row = Cells(Rows.Count, 2).End(xlUp).Row

エクセルのエンドモードで2列目の最終セルを取得、そこが何行目なのかという方法で最終行を判断しています。ここらへん、エクセルならではないでしょうか。実はエクセルをよく知らないので勉強になります。

いつもの作業を自動化したい人の Excel VBA 1冊目の本

いつもの作業を自動化したい人の Excel VBA 1冊目の本