[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『エクセルで行と列を同時にランダムに並べ替えたい』
英検の問題集データベースを作っています。
現在作っているデータは下のようにデータを並べています。
データはすべて英語です。
問題 選択肢1 選択肢2 選択肢3 選択肢4 正答
列の問題をランダムに並べ替え、さらに選択肢1〜4をランダムに並べ替えたいです。
マクロなどの知識はありません。
また出力の関係で、このデータ順番は変えたくありません。
何か良い方法はありませんか。
選択肢のランダム並べ替えは問題ごとにランダムであってほしいです。
たとえば、問題1の選択肢は1423と並び、問題2の選択肢は2143と並ぶ、といったようにです。
すべての選択肢の並びが同じに並び変わるのは避けたいです。
よろしくお願いいたします。
↓これと似たようなことなんでしょうか? [[20080919131054]]『ランダムで並び替える方法』(カルロ) 上記スレッドでは問題の並べ替えは行っていませんが、選択肢の並べ替えは行っています。 (ROUGE)
(のり)
問題並べ替え自体は作業列を使って乱数を発生させてSortすれば完了なので、それほど大変なコードにはならないと思います。 あとは、のりさんのシートにどうやってアジャストさせるかだと思いますよ。 具体的なセルの配置などを掲載していただけませんか? 関数だけの対応については、σ(^-^;)ではお手上げです(_ _;)尸 (ROUGE)
A B C D E F G H I 1 問題文1 1 選択肢1-1 2 選択肢1-2 3 選択肢1-3 4 選択肢1-4 2 問題文2 1 選択肢2-1 2 選択肢2-2 3 選択肢2-3 4 選択肢2-4 3 問題文3 1 選択肢3-1 2 選択肢3-2 3 選択肢3-3 4 選択肢3-4
このように配置しています。
B,D,F,H列には固定番号入力しています。
1〜3行とC,E,G,I列がランダムに並べ変えたいです。
(のり)
その配置だとちょっと面倒ですね。。。 [A] [B] [C] [D] [E] [F] [1] 1 2 3 4 解答 [2] 問題文1 選択肢1-1 選択肢1-2 選択肢1-3 選択肢1-4 1 [3] 問題文2 選択肢2-1 選択肢2-2 選択肢2-3 選択肢2-4 2 [4] 問題文3 選択肢3-1 選択肢3-2 選択肢3-3 選択肢3-4 3 こんなのではだめなんでしょうか? あと、解答はどこに入るのでしょうか? (ROUGE)
(のり)
では、私が提示したレイアウトの前提で、参照先のスレッドを少しだけ改変しました。 (ROUGE) '---- Sub Seaweed() Dim i As Long, x, ans As Integer On Error Resume Next For i = 2 To Range("A" & Rows.Count).End(xlUp).Row x = Range("B" & i).Resize(, 4).SpecialCells(xlCellTypeConstants, 23).Value If Err.Number <> 0 Then Err.Clear Else ans = Range("F" & i).Value Mazemaze x, ans Range("B" & i).Resize(, UBound(x, 2)).Value = x Range("F" & i).Value = ans End If Next On Error GoTo 0 With Range("G2:G" & Range("A" & Rows.Count).End(xlUp).Row) .Formula = "=Rand()" .Value = .Value .Offset(, -6).Resize(, 7).Sort .Cells(1) .ClearContents End With End Sub Private Sub Mazemaze(x, ans As Integer) Dim tbl, i As Integer ReDim tbl(1 To UBound(x, 2), 1 To 3) Randomize For i = 1 To UBound(tbl, 1) tbl(i, 1) = Int(Rnd * 10000) tbl(i, 2) = x(1, i) Next tbl(ans, 3) = True UQS tbl, 1, LBound(tbl, 1), UBound(tbl, 1) For i = 1 To UBound(tbl, 1) x(1, i) = tbl(i, 2) If tbl(i, 3) Then ans = i Next End Sub Private Sub UQS(ByRef tbl, ky As Integer, ByVal tp As Long, ByVal bt As Long) Dim i As Long, j As Long, k As Integer, m As Long, buf i = tp: j = bt: m = (tbl(i, ky) + tbl(j, ky)) \ 2 Do Do While tbl(i, ky) < m i = i + 1 Loop Do While tbl(j, ky) > m j = j - 1 Loop If i >= j Then Exit Do For k = LBound(tbl, 2) To UBound(tbl, 2) buf = tbl(i, k): tbl(i, k) = tbl(j, k): tbl(j, k) = buf Next i = i + 1: j = j - 1 Loop If tp < i - 1 Then UQS tbl, ky, tp, i - 1 If bt > j + 1 Then UQS tbl, ky, j + 1, bt End Sub
その表があるBookをアクティブにした状態で、Alt+F11を押します。 出てきた画面のツールバーで、挿入-->標準モジュールを選択します。 まっしろな画面が出てきますので、そこに上記コードをコピペしてその画面を閉じます。 ご希望の表があるシートをアクティブにして、Alt+F8(もしくはツール-->マクロ-->マクロ)を押して、 Seaweedを選択して実行します。 この処理を行うと、もとに戻せなくなりますので、Bookをコピーしてからお試しください。 (ROUGE)
動いたのですが、実行したあと、このようになりました。
選択肢3−4と1−4と解答が消えてしまします。何がいけないのでしょうか。
[1] 1 2 3 4 解答 [3] 問題文2 選択肢2-1 選択肢2-2 選択肢2-3 選択肢2-4 [4] 問題文3 選択肢3-1 選択肢3-2 選択肢3-3 0 [2] 問題文1 選択肢1-1 選択肢1-2 選択肢1-3 0
またこのまま行を増やしても使えますか?
動いたのですが、実行したあと、このようになりました。
選択肢3−4と1−4と解答が消えてしまします。何がいけないのでしょうか。
[1] 1 2 3 4 解答
[3] 問題文2 選択肢2-1 選択肢2-2 選択肢2-3 選択肢2-4
[4] 問題文3 選択肢3-1 選択肢3-2 選択肢3-3 0
[2] 問題文1 選択肢1-1 選択肢1-2 選択肢1-3 0
またこのまま行を増やしても使えますか?
ん?微妙に前提としたレイアウトと違うような。。。 問題文はA列に、選択肢はB:E列に、回答はF列に、という前提ですよ。 あ、あと、1行目は見出し行で、実際のデータは2行目からの前提もあります。 (ROUGE)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.