中3の娘、実力テストで英語の点数が思うように取れなくなってきました。
しかも、よく見ると簡単な英単語のスペルミスまで……。
これはまずい!と、受験に向けて英単語を基礎からやり直すことにしました。
ところが、順番に覚えていくだけでは「本当に覚えているのか分からない」という問題が!!!
そこで、間違えた単語をランダムに出題できる英単語テストをExcelで作ることにしました。
とはいえ、VBAなんて20年近く前に仕事で使ったきり。
そこで今回は、AIにVBAを作ってもらって、家庭学習用の英単語テストを作ってみました。
間違いやすい単語をチェックして優先に出してもらう等々、具体的な指示の出し方はもちろん実際に作ったプログラムも貼り付けているのでオリジナル単語テストを作りたい!という方はぜひ参考にしてみてください♪
※この方法は、マクロ(VBA)が使えるデスクトップ版Excel向けです。Googleスプレッドシートではそのまま使えません。
💡実力テスト(入試問題)の類題をAIに作ってもらう方法もこちらで紹介しています
👉中学実力テストの過去問がない?AIで類題を作って英作文対策!
ランダム英単語帳(紙で印刷するタイプ)の完成例
まずは、ランダム単語帳の完成図をご紹介。
アプリ等でもランダム表示してくれるものはたくさんあるのですが、中学生の場合は「単語を書かせる」問題も多く出るためにA4用紙に印刷できるものを作りたくて・・・
これは問題番号950から1000の50問、1から500の500問の中から100問をピックアップ。

ピックアップした印刷用の単語シート。完成図はこちら。

丸付けする用に解答シートも作ってます。

間違えた問題を優先的に出題するためにテスト後に間違えた問題を入力し

出題回数と不正解回数もインプットされるシートも作りました(これはあくまで確認用)。不正解回数から優先して出題するようにしています。

実力テストで英語が散々……簡単な英単語まで書けていなかった
中3になってから実力テストの点数が思ったより取れなくなった娘。えぇ、右肩下がりです...
中でも英語が悪い!!悪すぎる!!!!
英語に関しては類題をAIに作ってもらって対策をしているのですが(👉中学実力テストの過去問がない?AIで類題を作って英作文対策!)
単語のスペルミスも何問かあったので受験までは英単語を徹底的に覚えることを目標にしました。
まずは家にあった「ターゲット1200」をやらせてみることにしたけど...

カバー取ってます...。息子が中3の時に配られたターゲット1200が転がっていたので、ターゲット1200をさせることに。
ただ、ここでつまずきました。
「200までは順調だったのにそこから覚えるのにめちゃくちゃ時間がかかる!!!!」
実はターゲット1200の構成は
- 1~200:中学校で習った200語
- 251~550:基礎を固める300語
- 611~1110:テーマで身に付ける500語
- 1171~1370:語法で覚える200語
- 1431~1630:入試によく出る200語
と分かれていて、200以降でつまずいたのはまぁ単語が苦手な娘にとっては当たり前と言いますか...早すぎました(笑)
そこで中学の単語をしっかり固めることを優先にしました。
ちなみに息子校の場合は定期的に広範囲の単語テストがあり娘の時程単語が覚えられないーーーと焦った記憶がありません。
娘校の場合はその単元の単語テストはあるみたいですが、まとめて複数範囲からの単語テストはないので...もし同じような状況の方は早めに単語対策必要かもしれません!
まずは基礎をしっかり固めるために『出る順パス単3級』に切り替え
そこで選んだ単語帳が英検®3級でる順パス単。

昨年受けた英検®3級の対策時に購入したものです。我が家にはターゲット1200以外に息子が受けた英検®準2級のもパス単、中学版システム英単語もあったのですが3級のでる順を選んだ理由は
- 英検®3級は中学卒業程度の英単語+熟語が収録されていて中学単語が網羅できる
- 英検®3級は取得済みだがでる順Aをパラパラ見た程度
- 音声が収録されているので発音練習ができる
- 1問1答をまずは定着させたかった
中学版システム英単語はキーセンテンスが書いてあって便利なのですが受験まで時間がない我が家はとにかく基礎から!1問1答の方が先かなと思いでる順を選びました。
「でる順パス単3級」の単語を1日100語!
英検®3級にギリギリ合格したことで娘はもちろん親の私も今までそこまで英語が悪かったことがなかったので完全に油断しており、ヤバいと思ったのが中3の2学期に入ってから。
部活は引退していたのでスケジュール的には
- 1日目:1~100語
- 2日目:101~200語
- 3日目:201~300語
- 4日目:301~400語
- 5日目:1~400復習
- 6日目:1~400復習
- 7日目:テスト
このペースで進めて行きました。このやり方は息子が高校生になって通った塾のやり方です。
1日100語って多くなーい?と私は息子がしているのを見ながら思ったのですが、1日10個を見るよりも1日100個を覚えてそれを何周もすることで英単語を見る機会が増えるのが良いのだそう。
ただし、今日は帰宅時間が遅くなったとか、別の課題が出ている場合は1日50語に減らすなどその辺はその日の娘の状況に合わせて単語学習を進めました。
単語表を作成
単語帳を見ながら勉強でも良かったのですがこれも息子が通う塾のフォーマットに合わせて単語表を作る事にしました。

間違えたらAにチェック、2回目も間違えたらBにチェック・・・することで苦手な単語が一目でわかります。
息子の「順番で覚えても意味ないよ」の一言
怪しいなとは思ってたんです。毎日その日の単語で書けなかった所をチェックしているのですが
その次の単語いつも覚えられないのー。次の次の単語も~
と娘が言っていて、これ並び順で覚えてるんじゃないか?と・・・すると息子が
順番に覚えても意味ないよ
と・・・。息子の塾の様子と塾のテストを見せてもらったところランダムに問題が提示されておりました。
そこで、7日目のテストはランダムに提示することにしました。
昔使っていたVBAでランダムテストを作ろうと思ったけど……
エクセルで単語表を作ったので単語は一覧にしてました。
画像の感じで番号と英単語、日本語訳(1問1答なので日本語訳は1つだけ)です。

これをランダムに100問提示するには・・・あ、会社員時代に使っていたマクロ組もうかと考えました。
20年近く前の話。もちろん、ほとんど覚えてない!!
一から調べるのも超面倒だし時間もかかる。そんな時、私の相棒(笑)AIが作ってくれるじゃないかと思い立ちました。
VBAを書くのは面倒…そこでAIにプログラム(マクロ)を作ってもらった
私のような初心者だとめちゃくちゃ時間がかかる作業でも、AIに作ってもらえばコードを書く時間を大幅に減らせます。
同じように単語テストを作りたい方がいたらぜひ参考にしてみてください。
今回使ったのはGemini(ジェミニ)。Claudでも良いと思います。
英語7割日本語3割のボタンを押すと

出題範囲を指定するボックスが出てきます。

すると、指定した範囲からランダムに100問を選んで、単語テストを作ってくれます。

さらに、同じ問題に対応した解答リストも作成。

最初は単語リストだけ作るようにしていたのですが、実際に使ってみると、丸付けのときに「解答が別にあったほうが便利!」となったので、解答リストも作ってもらいました。
また、単純にランダムに出題するだけではなく、これまでの間違いの記録を利用して、間違いが多い単語ほど出題されやすくなるようにもしました。
AIに単語テストを作ってもらう具体的な指示内容
では、実際どのような指示(プロンプト)を出して作ってもらったのかをご紹介します。
Excelに「単語一覧」というシートがあります。
この単語一覧を使って、100問の英単語テストを作成するVBAを作ってください。
【シート構成】
1. 「単語一覧」シート(マスターデータ)
・A列:番号
・B列:英単語
・C列:日本語訳
2. 「出題履歴」シート(履歴データ/シートがなければ自動作成する)
・A列:番号
・B列:英単語
・C列:出題回数
・D列:不正解回数
【基本仕様】
・データは2行目から始まり、1行目はヘッダー。
・出題範囲を「1-500」「150-300」だけでなく、「950-1000,1-500」のようにカンマ区切りで複数の範囲を指定できるようにする
・指定した範囲内から100問をランダムに選ぶ(同じ単語の重複は不可)
・「出題履歴」シートの「不正解回数(D列)」が多い単語ほど、優先して出題されやすくする(※まだ履歴がない場合は均等に出題)
・テストを作成した際、「出題履歴」シートの選ばれた単語の「出題回数(C列)」に+1加算する
【問題の種類】
①「日本語→英語70%、英語→日本語30%」の混合テスト
・日本語→英語:70問 / 英語→日本語:30問(ランダムに混ぜる)
②「全問日本語→英語」のテスト(100問すべて日本語を見て英単語を書く)
③「全問英語→日本語」のテスト(100問すべて英単語を見て日本語訳を書く)
【採点後の間違い一括記録機能】
・テスト作成完了後、丸付けが終わった後に間違えた問題番号(例:1,7,50)を入力できる画面(インプットボックス)を表示する
・入力された問題番号の単語について、「出題履歴」シートの「不正解回数(D列)」に+1加算する
【出力】
・「テスト出力」シートと「解答シート」を作成し、問題と解答を同じ順番で左右2列(50問ずつ)に表示する
・問題には単語番号も表示し、出題範囲、目標時間、解答時間、得点の記入欄を作る
・既に「テスト出力」「解答シート」がある場合は内容を消去して新しく作成する
・データが100問未満の場合やキャンセル時はメッセージを表示して安全に処理を中断する
上記の条件をすべて満たすVBAコードを作成してください。
コピペOK!実際にAIが作ったVBAを公開
もし「自分で指示を出してもうまく作れない…」という方がいたら、以下のVBAコードをそのままコピペして使ってみてください!
※使用するExcelファイルは、あらかじめ次のように作成しておいてください。
- シート名:単語一覧
- 1行目:見出し行(「番号」「英単語」など)
- A列:単語番号(例: 1, 2, 3...)
- B列:英単語
- C列:日本語訳
Option Explicit
' ============================================================
' ボタン登録用プロシージャ(Excelのボタンに割り当てる用)
' ============================================================
Sub テスト作成_7割3割()
CreateTest 1
End Sub
Sub テスト作成_全問英訳()
CreateTest 2
End Sub
Sub テスト作成_全問和訳()
CreateTest 3
End Sub
' ============================================================
' メイン処理(テスト作成)
' ============================================================
Sub CreateTest(testMode As Long)
Dim wsList As Worksheet
Dim wsHist As Worksheet
Dim wsOut As Worksheet
Dim wsAns As Worksheet
Dim inputStr As String
Dim modeTitle As String
' --------------------------------------------------------
' シート取得・自動作成
' --------------------------------------------------------
On Error Resume Next
Set wsList = ThisWorkbook.Worksheets("単語一覧")
Set wsHist = ThisWorkbook.Worksheets("出題履歴")
Set wsOut = ThisWorkbook.Worksheets("テスト出力")
Set wsAns = ThisWorkbook.Worksheets("解答シート")
On Error GoTo 0
If wsList Is Nothing Then
MsgBox "「単語一覧」シートが見つかりません。" & vbCrLf & _
"シート名を確認してください。", vbCritical
Exit Sub
End If
If wsHist Is Nothing Then
Set wsHist = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
wsHist.Name = "出題履歴"
End If
If wsOut Is Nothing Then
Set wsOut = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
wsOut.Name = "テスト出力"
End If
If wsAns Is Nothing Then
Set wsAns = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
wsAns.Name = "解答シート"
End If
' --------------------------------------------------------
' モード設定
' --------------------------------------------------------
Select Case testMode
Case 1: modeTitle = "7割:訳→英 / 3割:英→訳"
Case 2: modeTitle = "全問:英→訳"
Case 3: modeTitle = "全問:訳→英"
Case Else
MsgBox "テストモードが正しくありません。", vbCritical
Exit Sub
End Select
' --------------------------------------------------------
' 範囲指定インプットボックス
' --------------------------------------------------------
inputStr = InputBox( _
"出題範囲を入力してください。" & vbCrLf & vbCrLf & _
"例:" & vbCrLf & _
"1-500" & vbCrLf & _
"1150-1200,1-500" & vbCrLf & _
"1-100,300-400,800-900" & vbCrLf & vbCrLf & _
"モード:" & modeTitle, _
"出題範囲指定", _
"1-1200")
If Trim(inputStr) = "" Then Exit Sub
' 履歴の同期
InitializeHistory wsList, wsHist
Application.ScreenUpdating = False
Application.EnableEvents = False
' 単語抽出
Dim allWords As Collection
Set allWords = CollectWordsFromListSheet(wsList, inputStr)
If allWords.Count < 100 Then
Application.ScreenUpdating = True
Application.EnableEvents = True
MsgBox "指定範囲内の単語が100問未満です。" & vbCrLf & _
"該当:" & allWords.Count & "問" & vbCrLf & vbCrLf & _
"100問以上になるように範囲を広げてください。", vbExclamation
Exit Sub
End If
' 重み付き抽選で100問選出
Dim selectedWords As Collection
Set selectedWords = Pick100WordsWeighted(allWords, wsHist)
' 問題形式の決定
Dim qTypes() As Long
Dim i As Long
If testMode = 1 Then
qTypes = GetShuffledQuestionTypes(70, 30)
Else
ReDim qTypes(1 To 100)
For i = 1 To 100
qTypes(i) = IIf(testMode = 3, 1, 2)
Next i
End If
' シートの初期化とレイアウト
wsOut.Cells.Clear
wsAns.Cells.Clear
SetupTestSheetLayout wsOut, inputStr, "英単語テスト (" & modeTitle & ")"
SetupTestSheetLayout wsAns, inputStr, "英単語テスト【解答】"
' --------------------------------------------------------
' 問題書き込み
' --------------------------------------------------------
Dim wordItem As Variant
Dim numVal As Long, engWord As String, jpnWord As String
Dim qText As String, aText As String, targetRow As Long
For i = 1 To 100
wordItem = selectedWords(i)
numVal = CLng(wordItem(0))
engWord = CStr(wordItem(1))
jpnWord = CStr(wordItem(2))
If qTypes(i) = 1 Then
qText = jpnWord
aText = engWord
Else
qText = engWord
aText = jpnWord
End If
If i <= 50 Then
targetRow = i + 4
wsOut.Cells(targetRow, 1).Value = numVal
wsOut.Cells(targetRow, 2).Value = qText
wsAns.Cells(targetRow, 1).Value = numVal
wsAns.Cells(targetRow, 2).Value = qText
wsAns.Cells(targetRow, 3).Value = aText
wsAns.Cells(targetRow, 3).Font.Color = RGB(200, 0, 0)
Else
targetRow = (i - 50) + 4
wsOut.Cells(targetRow, 5).Value = numVal
wsOut.Cells(targetRow, 6).Value = qText
wsAns.Cells(targetRow, 5).Value = numVal
wsAns.Cells(targetRow, 6).Value = qText
wsAns.Cells(targetRow, 7).Value = aText
wsAns.Cells(targetRow, 7).Font.Color = RGB(200, 0, 0)
End If
' 出題回数を+1
IncrementQuestionCount wsHist, numVal
Next i
wsOut.Activate
Application.ScreenUpdating = True
Application.EnableEvents = True
MsgBox "100問のテストを作成しました!" & vbCrLf & vbCrLf & _
"モード:" & modeTitle & vbCrLf & _
"出題範囲:" & inputStr & vbCrLf & vbCrLf & _
"「テスト出力」=問題" & vbCrLf & _
"「解答シート」=答え", vbInformation, "テスト作成完了"
End Sub
' ============================================================
' 不正解一括記録マクロ(丸付け後に実行する用)
' ============================================================
Sub 不正解記録()
Dim wsHist As Worksheet
Set wsHist = GetOrCreateHistorySheet()
Dim s As String
s = InputBox("間違えた問題番号を入力してください。" & vbCrLf & vbCrLf & _
"複数ある場合はカンマで区切ってください。" & vbCrLf & _
"例:12,45,78,103", "不正解記録")
If Trim(s) = "" Then Exit Sub
Dim nums() As String: nums = Split(s, ",")
Dim i As Long, numVal As Long, hRow As Long
Dim successCount As Long, errorCount As Long, oneNum As String
For i = LBound(nums) To UBound(nums)
oneNum = Trim(nums(i))
If oneNum <> "" And IsNumeric(oneNum) Then
numVal = CLng(oneNum)
hRow = FindHistoryRow(wsHist, numVal)
If hRow > 0 Then
If IsNumeric(wsHist.Cells(hRow, 4).Value) Then
wsHist.Cells(hRow, 4).Value = CLng(wsHist.Cells(hRow, 4).Value) + 1
Else
wsHist.Cells(hRow, 4).Value = 1
End If
successCount = successCount + 1
Else
errorCount = errorCount + 1
End If
Else
If oneNum <> "" Then errorCount = errorCount + 1
End If
Next i
Dim msg As String
msg = successCount & "問の不正解を記録しました。"
If errorCount > 0 Then msg = msg & vbCrLf & "確認できなかった番号:" & errorCount & "件"
MsgBox msg, vbInformation, "不正解記録完了"
End Sub
' ============================================================
' 内部処理・関数群
' ============================================================
Private Sub InitializeHistory(wsList As Worksheet, wsHist As Worksheet)
Dim lastRow As Long, r As Long, numVal As Long, engWord As String
Dim hRow As Long, nextRow As Long
wsHist.Cells(1, 1).Value = "番号"
wsHist.Cells(1, 2).Value = "単語"
wsHist.Cells(1, 3).Value = "出題回数"
wsHist.Cells(1, 4).Value = "不正解回数"
wsHist.Range("A1:D1").Font.Bold = True
lastRow = wsList.Cells(wsList.Rows.Count, 1).End(xlUp).Row
For r = 2 To lastRow
If IsNumeric(wsList.Cells(r, 1).Value) Then
numVal = CLng(wsList.Cells(r, 1).Value)
engWord = Trim(CStr(wsList.Cells(r, 2).Value))
If engWord <> "" Then
hRow = FindHistoryRow(wsHist, numVal)
If hRow = 0 Then
nextRow = wsHist.Cells(wsHist.Rows.Count, 1).End(xlUp).Row + 1
If nextRow < 2 Then nextRow = 2
wsHist.Cells(nextRow, 1).Value = numVal
wsHist.Cells(nextRow, 2).Value = engWord
wsHist.Cells(nextRow, 3).Value = 0
wsHist.Cells(nextRow, 4).Value = 0
Else
wsHist.Cells(hRow, 2).Value = engWord
End If
End If
End If
Next r
wsHist.Columns("A:D").AutoFit
End Sub
Private Function FindHistoryRow(wsHist As Worksheet, numVal As Long) As Long
Dim lastRow As Long, r As Long
lastRow = wsHist.Cells(wsHist.Rows.Count, 1).End(xlUp).Row
For r = 2 To lastRow
If IsNumeric(wsHist.Cells(r, 1).Value) Then
If CLng(wsHist.Cells(r, 1).Value) = numVal Then
FindHistoryRow = r
Exit Function
End If
End If
Next r
FindHistoryRow = 0
End Function
Private Function FindHistoryRowByNumber(wsHist As Worksheet, numVal As Long) As Long
FindHistoryRowByNumber = FindHistoryRow(wsHist, numVal)
End Function
Private Function CollectWordsFromListSheet(ws As Worksheet, rangeText As String) As Collection
Dim col As New Collection
Dim lastRow As Long, r As Long, cellVal As Variant, numVal As Long
Dim engWord As String, jpnWord As String, weight As Double, hRow As Long
Dim rangesText() As String, addedNumbers As Object
Set addedNumbers = CreateObject("Scripting.Dictionary")
rangesText = Split(rangeText, ",")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For r = 2 To lastRow
cellVal = ws.Cells(r, 1).Value
If IsNumeric(cellVal) Then
numVal = CLng(cellVal)
If IsNumberInMultipleRanges(numVal, rangesText) Then
If Not addedNumbers.Exists(CStr(numVal)) Then
engWord = Trim(CStr(ws.Cells(r, 2).Value))
jpnWord = Trim(CStr(ws.Cells(r, 3).Value))
If engWord <> "" Then
hRow = FindHistoryRowByNumber(ThisWorkbook.Worksheets("出題履歴"), numVal)
If hRow > 0 Then
If IsNumeric(ThisWorkbook.Worksheets("出題履歴").Cells(hRow, 4).Value) Then
weight = CDbl(ThisWorkbook.Worksheets("出題履歴").Cells(hRow, 4).Value) + 1
Else
weight = 1
End If
Else
weight = 1
End If
col.Add Array(numVal, engWord, jpnWord, weight)
addedNumbers.Add CStr(numVal), True
End If
End If
End If
End If
Next r
Set CollectWordsFromListSheet = col
End Function
Private Function IsNumberInMultipleRanges(numVal As Long, rangesText() As String) As Boolean
Dim i As Long, oneRange As String, parts() As String, startNo As Long, endNo As Long
For i = LBound(rangesText) To UBound(rangesText)
oneRange = Trim(rangesText(i))
If oneRange <> "" Then
parts = Split(oneRange, "-")
If UBound(parts) = 1 Then
If IsNumeric(Trim(parts(0))) And IsNumeric(Trim(parts(1))) Then
startNo = CLng(Trim(parts(0)))
endNo = CLng(Trim(parts(1)))
If startNo > endNo Then
Dim tmp As Long: tmp = startNo: startNo = endNo: endNo = tmp
End If
If numVal >= startNo And numVal <= endNo Then
IsNumberInMultipleRanges = True
Exit Function
End If
End If
End If
End If
Next i
IsNumberInMultipleRanges = False
End Function
Private Function Pick100WordsWeighted(allWords As Collection, wsHist As Worksheet) As Collection
Dim selectedCol As New Collection
Dim tempWords As New Collection
Dim item As Variant, i As Long, totalWeight As Double, rndVal As Double, currentWeight As Double
Dim pickedIndex As Long
For i = 1 To allWords.Count
tempWords.Add allWords(i)
Next i
Randomize
Do While selectedCol.Count < 100 And tempWords.Count > 0
totalWeight = 0
For i = 1 To tempWords.Count
item = tempWords(i)
totalWeight = totalWeight + CDbl(item(3))
Next i
rndVal = Rnd() * totalWeight
currentWeight = 0
pickedIndex = 1
For i = 1 To tempWords.Count
item = tempWords(i)
currentWeight = currentWeight + CDbl(item(3))
If currentWeight >= rndVal Then
pickedIndex = i
Exit For
End If
Next i
selectedCol.Add tempWords(pickedIndex)
tempWords.Remove pickedIndex
Loop
Set Pick100WordsWeighted = selectedCol
End Function
Private Function GetShuffledQuestionTypes(countType1 As Long, countType2 As Long) As Long()
Dim total As Long: total = countType1 + countType2
Dim arr() As Long: ReDim arr(1 To total)
Dim i As Long, j As Long, tmp As Long
For i = 1 To countType1: arr(i) = 1: Next i
For i = countType1 + 1 To total: arr(i) = 2: Next i
Randomize
For i = total To 2 Step -1
j = Int(Rnd() * i) + 1
tmp = arr(i): arr(i) = arr(j): arr(j) = tmp
Next i
GetShuffledQuestionTypes = arr
End Function
Private Sub IncrementQuestionCount(wsHist As Worksheet, numVal As Long)
Dim hRow As Long
hRow = FindHistoryRow(wsHist, numVal)
If hRow > 0 Then
If IsNumeric(wsHist.Cells(hRow, 3).Value) Then
wsHist.Cells(hRow, 3).Value = CLng(wsHist.Cells(hRow, 3).Value) + 1
Else
wsHist.Cells(hRow, 3).Value = 1
End If
End If
End Sub
Private Function GetOrCreateHistorySheet() As Worksheet
Dim ws As Worksheet
On Error Resume Next
Set ws = ThisWorkbook.Worksheets("出題履歴")
On Error GoTo 0
If ws Is Nothing Then
Set ws = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
ws.Name = "出題履歴"
ws.Cells(1, 1).Value = "番号"
ws.Cells(1, 2).Value = "単語"
ws.Cells(1, 3).Value = "出題回数"
ws.Cells(1, 4).Value = "不正解回数"
ws.Range("A1:D1").Font.Bold = True
End If
Set GetOrCreateHistorySheet = ws
End Function
Private Sub SetupTestSheetLayout(ws As Worksheet, rangeStr As String, titleName As String)
ws.Cells(1, 1).Value = titleName & " (出題範囲: " & rangeStr & ")"
ws.Cells(1, 1).Font.Size = 14
ws.Cells(1, 1).Font.Bold = True
ws.Cells(2, 1).Value = "目標時間[10分/100問]"
ws.Cells(2, 6).Value = "解答時間( )分"
ws.Cells(2, 7).Value = "得点: / 100"
ws.Cells(4, 1).Value = "番号"
ws.Cells(4, 2).Value = "問題"
ws.Cells(4, 3).Value = "解答"
ws.Cells(4, 5).Value = "番号"
ws.Cells(4, 6).Value = "問題"
ws.Cells(4, 7).Value = "解答"
Dim rngList As Variant
rngList = Array(ws.Range("A4:C54"), ws.Range("E4:G54"))
Dim k As Long
For k = LBound(rngList) To UBound(rngList)
With rngList(k).Borders
.LineStyle = xlContinuous
.weight = xlThin
End With
rngList(k).Rows(1).Interior.Color = RGB(220, 230, 242)
rngList(k).Rows(1).Font.Bold = True
Next k
ws.Columns("A").ColumnWidth = 8
ws.Columns("B").ColumnWidth = 22
ws.Columns("C").ColumnWidth = 20
ws.Columns("D").ColumnWidth = 3
ws.Columns("E").ColumnWidth = 8
ws.Columns("F").ColumnWidth = 22
ws.Columns("G").ColumnWidth = 20
End Sub
マクロボタンの設置手順(記事用メモ)
ボタンを配置したい場合は下記の設定をします。
- ボタンの作成
- Excelの「挿入」タブ ➔「図形」から好きな形(角丸長方形など)を選んでシート上に配置
- 文字を編集で「単語テスト作成」などと入力
- マクロの登録
- 作成した図形を右クリック ➔ 「マクロの登録」 を選択
- リストから実行したいマクロ(例 など)(例:テスト作成_7割3割)を選んで「OK」
- ファイルの保存
- Excelファイルを保存する際は、必ず 「Excel マクロ有効ブック(.xlsm)」 形式で保存
まとめ|英単語テストもAIを使えば家庭で作れる
実力テストで簡単な英単語まで書けていなかった娘のために、まずは『でる順パス単3級』で基礎からやり直すことにしました。
そして、順番に覚えるだけではなくランダムに確認できるよう、AIにVBAを作ってもらいました。
今回は娘の日本語→英語のテストだけでなく、息子が使っているシステム英単語にも使えるように、「日本語→英語」「英語→日本語」「日本語→英語+英語→日本語」の3パターンを作っています。
自分でVBAを書くのは大変ですが、AIに具体的な希望を伝えれば、家庭の勉強に合わせた単語テストを作ることができます。
「こんなテストがあったら便利なのに」というときに、AIを活用してみるのもおすすめです。
※実力テスト(入試問題)の類題をAIに作ってもらう方法もこちらで紹介しています
👉中学実力テストの過去問がない?AIで類題を作って英作文対策!
🖌️あわせて読みたい🖌️
👉中3実力テスト範囲や平均点など
👉中2実力テスト範囲や平均点など
👉中1実力テスト範囲や平均点など
👉実力テストまとめ
👉テストまとめ
👉オンライン塾まとめ