• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルのマクロの作り方で、教えてください。)

エクセルマクロで簡単な学習ソフトを作る方法

このQ&Aのポイント
  • エクセルのVBAを使って、選択肢をランダムに入れ替える簡単な学習ソフトを作りたいと思っています。
  • 問題文を作る際は、正解をいちばん左のセルに入れて、その後に選択肢の順番をランダムに入れ替えたいです。
  • 乱数を使って選択肢の入れ替えを行う方法がよいかもしれませんが、初心者なので具体的な使い方がわかりません。簡単な方法があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

おもしろそうですね。 Rnd関数にDictionaryオブジェクトを組み合わせてみました。 これなら3択じゃなくとも、5択でも10択?でも楽に行けます。 Sub test01()   Dim myW, myX   Dim myDic As Object   Dim i As Long, x As Long, n As Long   myW = Range("C1:E20").Value   ReDim myX(1 To UBound(myW, 1), 1 To UBound(myW, 2))   Set myDic = CreateObject("Scripting.Dictionary")   For i = 1 To 20     Randomize     Do Until myDic.Count = 3       x = Int(Rnd() * 3) + 1       If Not myDic.Exists(x) Then         myDic.Add x, ""       End If     Loop     For n = 1 To 3       myX(i, myDic.keys()(n - 1)) = myW(i, n)     Next n     myDic.RemoveAll   Next i   Range("C1:E20").Value = myX End Sub

a12
質問者

お礼

Dictionaryの使い方を本で読んで知ってはいましたが、ここで思いつきませんでした。5択でもできるというので、早速やってみます。ありがとうございます。

その他の回答 (2)

  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.3

試してみてください。 Sub test_rnd() Dim myrag As Range Randomize For Each myrag In Range("F2:H21") myrag = Rnd Next myrag Range("C2").Formula = "=RANK(F2,$F2:$H2,0)" Range("C2").Copy Range("C2:E21").PasteSpecial Paste:=xlPasteAll Application.Calculation = xlAutomatic Range("C2:E21").Copy Range("C2:E21").PasteSpecial Paste:=xlPasteValues Range("F2:H21").ClearContents End Sub このマクロでは、セルの("F2:H21")を作業用に使っています。

a12
質問者

お礼

回答ありがとうございました。できました。簡単にできることに感動しました。おかげで少しずつVBAのことがわかってきました。お礼申し上げます。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

全然スマートじゃない力技ですが、こんなのはどうでしょう? Sub test() Dim r As Long For r = 1 To 20 Dim ans1, ans2, ans3 Dim x1, x2 x1 = Rnd() x2 = Rnd() If x1 < 1 / 3 Then If x2 < 1 / 2 Then ans1 = Cells(r, "C").Value ans2 = Cells(r, "D").Value ans3 = Cells(r, "E").Value Else ans1 = Cells(r, "C").Value ans2 = Cells(r, "E").Value ans3 = Cells(r, "D").Value End If ElseIf x1 < 2 / 3 Then If x2 < 1 / 2 Then ans1 = Cells(r, "D").Value ans2 = Cells(r, "C").Value ans3 = Cells(r, "E").Value Else ans1 = Cells(r, "D").Value ans2 = Cells(r, "E").Value ans3 = Cells(r, "C").Value End If Else If x2 < 1 / 2 Then ans1 = Cells(r, "E").Value ans2 = Cells(r, "C").Value ans3 = Cells(r, "D").Value Else ans1 = Cells(r, "E").Value ans2 = Cells(r, "D").Value ans3 = Cells(r, "C").Value End If End If Cells(r, "C").Value = ans1 Cells(r, "D").Value = ans2 Cells(r, "E").Value = ans3 Next r End Sub 選択肢がたった3つだから何とかなりますが、選択肢が5つとかだと、こんなマクロを組む気にはなれません(笑)

a12
質問者

お礼

回答ありがとうございました。私もこのように作ってみたのですが、もっと短くなるかなと思ったのです。私と同じような回答でうれしかったです。

関連するQ&A