いつもお世話になっております。
エクセルの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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel 売上管理シートに入力した売上データを、日報に自動反映させたいと考えています。 売上管理シ 3 2023/04/29 18:08
- Excel(エクセル) Excelで日報を自動で作成したい 売上管理シートに入力した売上データを、日報に自動反映させたいと考 1 2023/04/29 18:07
- その他(教育・科学・学問) 正しいレベル分けするために必要な質問数は? 1 2022/12/07 10:40
- Visual Basic(VBA) VBAマクロでシートコピーした新シートにコピー元シートとの計算式の入れ方を教えて下さい。 5 2022/11/20 09:48
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- Excel(エクセル) Excel シート複数 金額日計表と日付 簡単にシートコピーしたら前日の残高と日付を変更させたい 1 2022/07/15 22:10
- Excel(エクセル) Excelにて、行の最後のセルの値をコピーして別sheetに張りつけるVBAコードをご教授願います 3 2022/11/20 14:35
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで別シートの同じ位置...
-
エクセルの下部のシートタブの...
-
エクセルでセルの書式設定がで...
-
EXCELでコピーしたグラフのデー...
-
シート全体を他のブックのシー...
-
ワークシートの行が途中から表...
-
エクセルで数式は残したまま他...
-
ロックしたセルのコピー&貼り付け
-
VBA アクティブでないシートの...
-
Excelで保護のかかったシートの...
-
excelで勝手にテキストボックス...
-
シート保護したExcelへの画像貼...
-
ExcelのFileサイズの急な肥大化
-
エクセルで多数のシートをまと...
-
Excelで大量の2000個のリストを...
-
worksheetクラスのcopyメソッド...
-
シート保護してても並び替えを...
-
エクセルで打ち込んだ数字を自...
-
エクセル、ワークシートの名前...
-
【エクセル】数式のセル番地を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで別シートの同じ位置...
-
エクセルでセルの書式設定がで...
-
エクセルの下部のシートタブの...
-
EXCELでコピーしたグラフのデー...
-
シート全体を他のブックのシー...
-
ロックしたセルのコピー&貼り付け
-
ワークシートの行が途中から表...
-
Excelで保護のかかったシートの...
-
excelで勝手にテキストボックス...
-
VBA アクティブでないシートの...
-
エクセルで数式は残したまま他...
-
【エクセル】数式のセル番地を...
-
Excelで大量の2000個のリストを...
-
エクセルで打ち込んだ数字を自...
-
エクセルで多数のシートをまと...
-
【エクセル】表から条件に合っ...
-
EXCELで複数シート作成後、全シ...
-
シート保護したExcelへの画像貼...
-
シート保護してても並び替えを...
-
wordからexcelへ一部のデータを...
おすすめ情報