-PR-
  • 困ってます
  • 2006-06-12 20:34:50
  • 質問No.2211678

締切り
済み
Q Excelでランダムで選んだ行を別のシートに出力

  • 閲覧数166
  • ありがとう数1
  • 気になる数0
  • 回答数5
freebird11

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個出力できるようにしたいと思っています。

よろしくお願いします。
  • 回答数5
  • 気になる数0

Aみんなの回答(全5件)

回答 (全5件)

  • 2006-06-14 01:42:53
  • 回答No.5
#02です エラーが出た行は  IntRND = Int(MumMAX * Rnd) + 1 にしてみてください
#02です
エラーが出た行は
 IntRND = Int(MumMAX * Rnd) + 1
にしてみてください
  • 同意数0(0-0)
  • ありがとう数0
なるほど、役に立ったなど
感じた思いを「ありがとう」で
伝えてください
  • 2006-06-13 17:46:25
  • 回答No.4
#02です。お手数をかけます 私の環境 Xp+EXCEL2003では動作したのですが。 恐れ入りますがどのようなエラーメッセージが出たか教えていただけませんか
#02です。お手数をかけます
私の環境 Xp+EXCEL2003では動作したのですが。

恐れ入りますがどのようなエラーメッセージが出たか教えていただけませんか
  • 同意数0(0-0)
  • ありがとう数0
なるほど、役に立ったなど
感じた思いを「ありがとう」で
伝えてください
  • 2006-06-12 20:43:26
  • 回答No.1
どこか1列を使います。 そこに =RAND() と入れて、問題の行数分コピーします。 このRANDという関数は、再計算([F9]キー)する度に毎回違った数(乱数)を出力するものです。 再計算した後、この関数を入れた列で並び替え([データ]→[並べ替え])をすれば、順序がランダムで並び変わります。 並べ替えの結果、上位25問を、まとめテストにするというのはいかがでしょうか?
どこか1列を使います。
そこに
=RAND()
と入れて、問題の行数分コピーします。

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

再計算した後、この関数を入れた列で並び替え([データ]→[並べ替え])をすれば、順序がランダムで並び変わります。
並べ替えの結果、上位25問を、まとめテストにするというのはいかがでしょうか?
  • 同意数0(0-0)
  • ありがとう数0
なるほど、役に立ったなど
感じた思いを「ありがとう」で
伝えてください
  • 2006-06-13 03:27:57
  • 回答No.2
過去問のシート名を”過去問”とします。また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) ...続きを読む
過去問のシート名を”過去問”とします。また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:59
  • 同意数0(0-0)
  • ありがとう数0
なるほど、役に立ったなど
感じた思いを「ありがとう」で
伝えてください
  • 2006-06-13 16:03:34
  • 回答No.3
#02です。一番簡単そうな方法で説明します。 過去の問題が登録されているBOOKを開いて、ツール→マクロ→新しいマクロの記録 を選びます。「マクロの記録」といウィンドウはそのままOKでよいです。 次にツール→マクロ→記録終了 を選びます。これで(見えませんが)標準モジュールシートが作成されました。次にそのシートを表示させます。そのためには Alt+F11 を押下します。 すると 「Sub ...続きを読む
#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:39
  • 同意数0(0-0)
  • ありがとう数0
なるほど、役に立ったなど
感じた思いを「ありがとう」で
伝えてください
  • 回答数5
  • 気になる数0
  • ありがとう数1
  • ありがとう
  • なるほど、役に立ったなど
    感じた思いを「ありがとう」で
    伝えてください
  • 質問する
  • 知りたいこと、悩んでいることを
    投稿してみましょう

関連するQ&A

-PR-
-PR-

その他の関連するQ&Aをキーワードで探す

別のキーワードで再検索する
-PR-
-PR-
-PR-

特集


『OKWave AWARD 2015』受賞者発表!

-PR-

ピックアップ

-PR-
ページ先頭へ