
いつもお世話になっております。
エクセルのVBAについて教えて頂きたく書き込みいたします。
日本語が意味不明であれば、より詳しく記載しますのでご教授願います。
1つのエクセルの中に4つのシートがあります。
【Top(sheet1)、問題(sheet2)、初級(sheet3)、中級(sheet4)、上級(sheet5)】
Topにはスタートボタンがあり、クリックすることにより問題シートへと移動し、別シートより問題を抽出したいです。
問題シート内のC3~C17に問題が、D3~D17に(問題に付随した)ヒントが
ランダムに抽出されるようにマクロを作成したいです。
また問題、ヒント、答えは初級、中級、上級、それぞれのシートに(20問ずつぐらい)記載をしています。
初級から10問、中級から3問、上級から2問と抽出をしたいです。
答えに回答を入力することにより正解であればセルが青く、間違えであればセルが赤くなるようにしたいです。
簡易ではありますが、エクセルの画像も添付させてもらいます。
恐れ入りますがご教授願います。

No.2ベストアンサー
- 回答日時:
こんばんは!
面白そうなのでトライしてみました。
Sheet6を作業用のSheetとして追加・使用するようにしていますので、
Book上にはお示しの5つのSheetが存在しているという前提です。
尚、各Sheetともお示しの配置通りとします。
ます「TOP」Sheetにコマンドボタンを挿入 → コマンドボタンのコードを↓にしてみてください。
Private Sub CommandButton1_Click()
Worksheets("問題").Select
Worksheets("問題").Range("E3:E17").Interior.ColorIndex = xlNone
Call Sample1
End Sub
次にAlt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に
↓のコードをコピー&ペーストしてください。
Sub Sample1() 'この行から
Dim i As Long, lastRow As Long, c As Range
Dim wS2 As Worksheet, wS3 As Worksheet, wS4 As Worksheet, wS5 As Worksheet, wS6 As Worksheet
Set wS2 = Worksheets("問題")
Set wS3 = Worksheets("初級")
Set wS4 = Worksheets("中級")
Set wS5 = Worksheets("上級")
Application.ScreenUpdating = False
If Worksheets.Count <> 6 Then
Worksheets.Add after:=Worksheets(Worksheets.Count)
End If
Set wS6 = Worksheets(Worksheets.Count)
wS6.Visible = xlSheetHidden
wS6.Range("A:C").Clear
wS2.Range("C3:E17").ClearContents
With wS3
lastRow = .Cells(Rows.Count, "B").End(xlUp).Row
.Range("E:F").Insert
Range(.Cells(2, "E"), .Cells(lastRow, "E")).Formula = "=RAND()"
Range(.Cells(2, "F"), .Cells(lastRow, "F")).Formula = "=RANK(E2,E:E)"
For i = 1 To 10
Set c = .Range("F:F").Find(what:=i, LookIn:=xlValues, lookat:=xlWhole)
c.Offset(, -4).Resize(, 3).Copy
wS6.Activate
ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
Next i
.Range("E:F").Delete
End With
With wS4
.Range("E:F").Insert
lastRow = .Cells(Rows.Count, "B").End(xlUp).Row
Range(.Cells(2, "E"), .Cells(lastRow, "E")).Formula = "=RAND()"
Range(.Cells(2, "F"), .Cells(lastRow, "F")).Formula = "=RANK(E2,E:E)"
For i = 1 To 3
Set c = .Range("F:F").Find(what:=i, LookIn:=xlValues, lookat:=xlWhole)
c.Offset(, -4).Resize(, 3).Copy
wS6.Activate
ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
Next i
.Range("E:F").Delete
End With
With wS5
.Range("E:F").Insert
lastRow = .Cells(Rows.Count, "B").End(xlUp).Row
Range(.Cells(2, "E"), .Cells(lastRow, "E")).Formula = "=RAND()"
Range(.Cells(2, "F"), .Cells(lastRow, "F")).Formula = "=RANK(E2,E:E)"
For i = 1 To 2
Set c = .Range("F:F").Find(what:=i, LookIn:=xlValues, lookat:=xlWhole)
c.Offset(, -4).Resize(, 3).Copy
wS6.Activate
ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
Next i
.Range("E:F").Delete
End With
wS6.Range("A2:B16").Copy
wS2.Activate
ActiveSheet.Range("C3").Select
Selection.PasteSpecial Paste:=xlPasteValues
wS2.Columns.AutoFit
wS2.Range("E3").Select
Application.ScreenUpdating = True
End Sub 'この行まで
最後に「問題」SheetのSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペースト → Excel画面に戻り「TOP」Sheetのコマンドボタンをクリックし
「問題」SheetのE列に答えを入力してみてください。
Private Sub Worksheet_Change(ByVal Target As Range) 'この行から
Dim c As Range
If Intersect(Target, Range("E3:E17")) Is Nothing Or Target.Count > 1 Then Exit Sub
With Worksheets(6)
If Target <> "" Then
Set c = .Range("A:A").Find(what:=Target.Offset(, -2), LookIn:=xlValues, lookat:=xlWhole)
If Target = c.Offset(, 2) Then
Target.Interior.ColorIndex = 8 '←水色
Else
Target.Interior.ColorIndex = 3
End If
Else
Target.Interior.ColorIndex = xlNone
End If
End With
End Sub 'この行まで
※ 通常の青だと字が見えにくいので「水色」にしています。m(_ _)m
興味を持って頂き、また色々と試して頂いたことと思います。
本当にありがとう御座います。
VBAをやりたいと思い3日ほどでぶち当たりました。
さすがにこれだけのコードは理解することができません。
これを参考に勉強していきたいと思います。
本当にありがとう御座います。

No.3
- 回答日時:
次のマクロでしーと3,4,5から10,3,2問をシート2にランダム抽出します。
まだ未完成のところは乱数がダブったときの処置ができていないことです。Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2014/2/23 ユーザー名 :
'
'
Dim ransu As Variant, i As Integer
For i = 4 To 13
Sheets("Sheet3").Select
ransu = Int(20 * Rnd + 3)
Cells(ransu, 3).Select
Selection.Copy
Sheets("Sheet2").Select
Cells(i, 3).Select
ActiveSheet.Paste
Next
For i = 14 To 16
Sheets("Sheet4").Select
ransu = Int(20 * Rnd + 3)
Cells(ransu, 3).Select
Selection.Copy
Sheets("Sheet2").Select
Cells(i, 3).Select
ActiveSheet.Paste
Next
For i = 17 To 18
Sheets("Sheet5").Select
ransu = Int(20 * Rnd + 3)
Cells(ransu, 3).Select
Selection.Copy
Sheets("Sheet2").Select
Cells(i, 3).Select
ActiveSheet.Paste
Next
End Sub
No.1
- 回答日時:
いろいろなやり方があるかと思うので、あくまで私流ということで。
面倒なので、問題番号1~10は初級、11~13が中級、14~15が上級と決めます。
事前準備として、初級・中級・上級のA2からA21までに計算式「 =rand() 」を入れておき乱数を表示させておきます。
シート1のスタートに、レコードマクロで記録開始。
初級のA2からD21を範囲選択しA列をキーにソートします。(昇順降順どちらでも可。ご存知とは思いますが、先頭行を見出しにしないよう注意してください。1行目が動かず固定になってしまいます)
同様に中級・上級も並べ替え。
これでレコードマクロを終了します。
問題シートの計算式ですが、セルC3に「 =初級!B2 」をD3に「 =初級!C2 」を入れてそれらを12行まで複写、同様にC13に「 =中級!B2 」をD3に「 =中級!C2 」を入れてそれらを15行まで複写、同様にC16に「 =上級!B2 」をD3に「 =上級!C2 」を入れてそれらを17行まで複写、これで問題作成は完成です。
採点に関しては条件付き書式が楽そうなので、あらかじめE3からE17の文字色を赤色にしておき、セル値と回答のセルの値が一致したら青色に変える指定を行えばできあがりです。(画像を比べると私のとはエクセルのバージョンが違うようなので、条件付き書式の扱い方がわからないようなら聞いて下さい)
もし、問題を初級から並べるのではなくバラバラにということであれば、並べ替え後に初級~上級から問題シートに正解もコピーしておき、ソートでのシャッフルと同様にここで混ぜてあげれば可能です。
目の前で説明すれば10分程度の話なんですが、意味は伝わりましたでしょうか。
うまく動くことをお祈りいたします。
お答えありがとう御座いましたっ!
試してみたのですが、不明点が多く出来ませんでした。
No2さんのコードで上手くできました!ありがとう御座います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
4択問題のプログラムでランダムに出題する処理で困っています
Visual Basic(VBA)
-
エクセル指定した範囲からランダムで一つ抽出
Excel(エクセル)
-
Excelで事前にセルに入力した言葉をランダムに表示
Windows Vista・XP
-
4
エクセルで四択問題をランダムに出題したい。
その他(Microsoft Office)
-
5
Excelマクロ&VBAでユーザーフォームで3択問題を作ってみました。
Visual Basic(VBA)
-
6
表(リスト)からランダムに抽出するには?
Excel(エクセル)
-
7
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
8
エクセルで複数のセルにあらかじめ用意した単語を重複せずにランダム表示させる方法
Excel(エクセル)
-
9
VBAを使って単語テストを作りたいです
Visual Basic(VBA)
-
10
ランダムで四択の問題を作る場合にvbaで何を学べばいいでしょうか。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
ロックしたセルのコピー&貼り付け
-
5
ワークシートの行が途中から表...
-
6
エクセルで打ち込んだ数字を自...
-
7
シート全体を他のブックのシー...
-
8
Excelで保護のかかったシートの...
-
9
エクセルで多数のシートをまと...
-
10
excelで勝手にテキストボックス...
-
11
エクセル、ワークシートの名前...
-
12
VBA アクティブでないシートの...
-
13
コピー&ペーストすると、VLOOK...
-
14
【エクセル】数式のセル番地を...
-
15
エクセルで数式は残したまま他...
-
16
行の挿入ができなくなった
-
17
セルに背景色がある行を別シー...
-
18
シート保護したExcelへの画像貼...
-
19
【エクセル】表から条件に合っ...
-
20
エクセルマクロで最終列に数値...
おすすめ情報
公式facebook
公式twitter