excel room

事務作業で役に立つエクセル関数などを解説します。

ExcelVBAで単語テストを自動作成する方法

 ExcelVBAは、Excelのあらゆる単純作業を自動化することができます。

今回はVBAで、指定した出題範囲から単語テストをランダムで作成するVBAをご紹介します。

 

目次

 

単語テストのファイルを公開 

単語テスト生成.xlsm - Google スプレッドシート

Excelファイルのアップロードができないため、

まずは上のスプレッドシートからExcelにシートをコピーしてください!

f:id:omulife:20210503152312p:plain

f:id:omulife:20210503152449p:plain

シート1.2はそれぞれ上の通りになっていますでしょうか?

シート名はそれぞれ変更可能です。

単語表には例として単語を入れていますが、書き換えてください!

また、単語テストのB列は最後に非表示にしますので、今は気にしないでください。

 

単語テスト自動作成のVBAコードの公開 

以下のコードをVisual Basicに丸々コピペしてください!

Sub テスト()

Dim MaxNum As Long

Dim Minnum As Long

Dim flg() As Boolean

Dim num As Long

Dim i As Long

Dim Number() As Long

MaxNum = Worksheets(1).Range("E6").Value '←出題範囲の最大値

Minnum = Worksheets(1).Range("C6").Value '←出題範囲の最小値

ReDim Number(Minnum To MaxNum) As Long

ReDim flg(Minnum To MaxNum) As Boolean

Randomize

For i = Minnum To MaxNum

Do

num = Int*1をセルに書きだす処理 Worksheets(1).Range("B8:C27").ClearContents

'一度テストのセルに入っている文字を削除する。

For j = 8 To 27 'テストページのセルの行

Cells(j, 2).Value = Number(o)

o = o + 1

Cells(j, 3) = WorksheetFunction.VLookup(Cells(j, 2), SearchRange, 2, False)

'vlookupを使用し、英単語をいれる

If o > MaxNum Then

'出題範囲が20問を下回ってもエラーにならないコード

Exit Sub

End If

Next

End Sub

 

コードをコピペする場所

Visual Basicは「開発タブ」→「Visual Basic」→「挿入」→「標準モジュール」

の手順で「Module 1」が出てくると思うので、そこにコピペしましょう。

f:id:omulife:20210503154228p:plain

 

f:id:omulife:20210503155156p:plain

(写真はMacExcelなので、少し画面が異なります。)

また、開発タブがない方は1分で表示できますので、以下の動画を参考にしてください!

Excelの開発タブの出し方 - YouTube

 

コードの解説

Dim MaxNum As Long

Dim Minnum As Long

Dim flg() As Boolean

Dim num As Long

Dim i As Long

Dim Number() As Long

ここは変数の定義となりますので、無視してください。

 

MaxNum = Worksheets(1).Range("E6").Value '←出題範囲の最大値

Minnum = Worksheets(1).Range("C6").Value '←出題範囲の最小値

出題範囲を指定します。

E6が最大値、C6が最小値となります。

f:id:omulife:20210503160057p:plain

最大値と最小値が逆や同じ数値、空白、数値以外であればエラーとなりますので、

注意しましょう。

 

ReDim Number(Minnum To MaxNum) As Long

ReDim flg(Minnum To MaxNum) As Boolean

Randomize

変数の定義

 

For i = Minnum To MaxNum

Do

num = Int*2をセルに書きだす処理

 

これらも修正することはないと思うので、無視してください。

 

Worksheets(1).Range("B8:C27").ClearContents

'一度テストのセルに入っている文字を削除する。

For j = 8 To 27 'テストページのセルの行

 

B8:C27は、単語テストのNo1~No20を表します。

単語テストをNo10までにする場合や、行を削除する場合などは、

この数値を変更しなければいけません。

 

例)No10までにする場合

Worksheets(1).Range("B8:C17").ClearContents

For j = 8 To 17 'テストページのセルの行

 

 

テスト自動作成ボタンを作ろう

あと少しで単語テストの自動化ができます!

続いてはテストが自動で作成されるボタンを作ります。

f:id:omulife:20210503161514p:plain

 

「開発タブ」→「ボタン」を押し、ボタンを置きたい場所をクリックします。

f:id:omulife:20210503162045p:plain

先ほどコードを書いた「テスト」というマクロが表示されると思うので、

「テスト」を選択し、「OK」を押します。

f:id:omulife:20210503161922p:plain

適当な名前に変更しボタンを押すと、出題範囲から自動で単語テストが作成されました!

f:id:omulife:20210503162343p:plain

B列は単語の番号が入りますので、非表示にしてください!

 

まとめ

 

以上のように、VBAを使用すれば単語テストが自動で作成することができます。

これまで手動で入力していた作業も、VBAを使用すれば自動化することが可能です。

単語テスト以外にもこんなことを自動化して欲しい等のご要望があれば、ご相談ください!

VBAを使用すればどんなことでも圧倒的に効率化することができます。

 

coconala.com

excelの資料・データ作成をお手伝いします 高度な関数を使用し、excel作業をラクにします! | データ整理・集計・エクセル作成 | ココナラ

 

*1:MaxNum - Minnum + 1) * Rnd + Minnum)

If flg(num) = False Then

flg(num) = True

Number(i) = num

Exit Do

End If

Loop

Next i '重複しないランダムな数字を生成し終える

 

Dim j As Long

Dim o As Long

Dim SearchRange As Range 'vlookupの範囲を定義する

Set SearchRange = Worksheets(2).Range("A:C")

o = Minnum 'ここからは、生成した乱数(Number(

*2:MaxNum - Minnum + 1) * Rnd + Minnum)

If flg(num) = False Then

flg(num) = True

Number(i) = num

Exit Do

End If

Loop

Next i '重複しないランダムな数字を生成し終える

 

最小値から最大値までの値をランダムに並べるコードです。

これによって、ランダムに単語が出てくるようになります。

 

Dim j As Long

Dim o As Long

Dim SearchRange As Range 'vlookupの範囲を定義する

Set SearchRange = Worksheets(2).Range("A:C")

o = Minnum 'ここからは、生成した乱数(Number(