dポイントプレゼントキャンペーン実施中!

excelで、ミニテストを作っているのですが、いままで作ったものをランダムでえらんだまとめテストを作ろうと思っています。毎回、手動で選んでいるのですが、何種類も作るのが大変なので、Excelで自動に作る方法を教えてください。

現在の形式は
 
l l テスト第1回 l なまえ l
l 01 l 漢字 l 答え l
l 02 l 漢字 l 答え l
       ・
       ・
       ・
l 25 l 漢字 l 答え l
l l テスト第2回 l なまえ l
l 26 l 漢字 l 答え l
l 27 l 漢字 l 答え l

このように25個ずつテストを用意しています。
まとめテストはテスト第1回~第5回の中から25個選んで、別のシートに

l l テスト第1~5回 l なまえ l
l 05 l 漢字 l 答え l
l 29 l 漢字 l 答え l
l 34 l 漢字 l 答え l
l 36 l 漢字 l 答え l


のように選択した範囲内のものを25個出力できるようにしたいと思っています。

よろしくお願いします。

A 回答 (5件)

#02です


エラーが出た行は
 IntRND = Int(MumMAX * Rnd) + 1
にしてみてください
    • good
    • 1

#02です。

お手数をかけます
私の環境 Xp+EXCEL2003では動作したのですが。

恐れ入りますがどのようなエラーメッセージが出たか教えていただけませんか
    • good
    • 0

#02です。

一番簡単そうな方法で説明します。

過去の問題が登録されているBOOKを開いて、ツール→マクロ→新しいマクロの記録 を選びます。「マクロの記録」といウィンドウはそのままOKでよいです。

次にツール→マクロ→記録終了 を選びます。これで(見えませんが)標準モジュールシートが作成されました。次にそのシートを表示させます。そのためには Alt+F11 を押下します。

すると 「Sub Macro1() ・・以下省略」のような、今記録したマクロが表示されているはずです。この1行目のSub Macro1()の上に#02のマクロ全文をペーストしてください。(Option Explicitが先頭行になるように)

元の問題文のシートに戻り、シート名を”過去問”に変更して、Alt+f8 を押下すると、実行可能なマクロのリストが表示されますから、その中から”問題作成”を選んで「実行」ボタンをクリックしてみてください。

なお#02のマクロは夜中に急いで作ったので、美しくありません(→言い訳です)
A列の番号は途中の行が空白でも良いですが、最小値は1で抜け番がないことが前提となっていますのでお気をつけください。抜け番があると
k = Application.Match(NO(l - 1), Worksheets("過去問").Range("A1:A2000"), 0)
の行でエラーとなる場合があります。

過去問(第6回以降)を行の末尾に追加してもマクロは動作するはずです。

この回答への補足

おっしゃる通りにやってみたところ

IntRND = Int((Rnd(Now()) * 1062347) Mod NumMAX) + 1

の行でエラーが出たみたいです。

どうしたらいいでしょうか?

補足日時:2006/06/13 17:02
    • good
    • 0

過去問のシート名を”過去問”とします。

またA列は重複のない数字とします

その前提で以下のマクロを実行してみてください

Option Explicit
Sub 問題作成()
Dim i, j, k, l, NumMAX, IntRND As Integer
Dim NO(25)
Dim SHname As Worksheet
i = 0
IntRND = Rnd(0)
NumMAX = Application.Max(Worksheets("過去問").Range("A:A"))
For Each SHname In Worksheets
If SHname.Name = "新問題" Then
i = 1
End If
Next
If i = 0 Then
Worksheets.Add.Name = "新問題"
Else
Worksheets("新問題").Range("a1:C100").ClearContents
End If

Worksheets("新問題").Range("B1") = "問題1~5"
Worksheets("新問題").Range("C1") = "なまえ"
NO(1) = 0
j = 1
Do
IntRND = Int((Rnd(Now()) * 1062347) Mod NumMAX) + 1
For i = 1 To j
If NO(i) = IntRND Then
i = 9999
End If
Next i
If i < 9999 Then
NO(j) = IntRND
j = j + 1
End If
Loop Until j > 25

For l = 2 To 26
Worksheets("新問題").Cells(l, 1) = NO(l - 1)
k = Application.Match(NO(l - 1), Worksheets("過去問").Range("A1:A2000"), 0)
Worksheets("新問題").Cells(l, 2) = Worksheets("過去問").Cells(k, 2)
Worksheets("新問題").Cells(l, 3) = Worksheets("過去問").Cells(k, 3)
Next
End Sub

この回答への補足

すみません。Excelはほとんど素人なので、マクロとかが良く分かりません。詳しく分かるサイトまたはその方法を教えていただけないでしょうか?

補足日時:2006/06/13 14:03
    • good
    • 0

どこか1列を使います。


そこに
=RAND()
と入れて、問題の行数分コピーします。

このRANDという関数は、再計算([F9]キー)する度に毎回違った数(乱数)を出力するものです。

再計算した後、この関数を入れた列で並び替え([データ]→[並べ替え])をすれば、順序がランダムで並び変わります。
並べ替えの結果、上位25問を、まとめテストにするというのはいかがでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!