- 締切済み
エクセルでクイズの表示
簡単なクイズ表示方法を探しています。 考えた方法。 エクセルをデータベース。A列に問題。B列に回答。 例えばパワーポイントの白紙画面に問題を表示。 その画面をクリックしたり、スペースキーを押すなどすると答えを表示。 終わったら次の問題へ。 という流れです。 できればエクセルデータベースの行は、ランダムで出題できると嬉しいです。 正誤の判断をPCにやらせないので、簡単にできそうな気がするのです。 なにぶんオフィス系ソフトに弱いので教えてください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- hallo-2007
- ベストアンサー率41% (888/2115)
No2です。自分で提示して読み直したのですが。 A B C 番号 質問 答え 1 2 3 のB1セルには =COUNTA(A:A)の関数を入れていたと思います。従って A B C 空白 COUNTA関数 1 2 にして先のVBA確認してください。或いは mondaisu = Sheets("Sheet2").Range("B1").Value の部分をCOUNTA関数を入れたセルに変更してしてください。
- hallo-2007
- ベストアンサー率41% (888/2115)
おもしろそうだったので、マクロ組んで見ました。準備として Sheet2に A B C 番号 質問 答え 1 2 3 4 5 ・・・ と番号をいれて質問と答えを準備します。 別シートにマクロ起動のボタンを作成 モジュールに Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub ボタン1_Click() Sheets("Sheet2").Columns("A:A").Replace What:=Range("A1").Value, Replacement:="" mondaisu = Sheets("Sheet2").Range("B1").Value If mondaisu < 2 Then MsgBox "質問が少なくなりました。" Exit Sub End If For i = 1 To 10000 If GetAsyncKeyState(2) <> 0 Then Exit For Else Range("A1").Value = WorksheetFunction.Small(Sheets("Sheet2").Columns("A:A"), Int(Rnd() * mondaisu) + 1) Sleep (50) End If Next End Sub をコピィして実行します。 A1セルに問題の番号が次々に変わります。 停止するには、マウスを右クリックします。 A1セルに問題の番号がでますので B1セルには、入力規則で 問題 と 答え のいずれかが選択できるようにして 表示したいセルには =VLOOKUP(A1,Sheet2!A:C,MATCH(B1,Sheet2!A2:C2)) といれておけば、B1で 問題を選択したら 問題 が 答え を選択したら 答えになるます。 上記マクロを実行するたびに、一度でた問題の番号が消えますので、重複して同じ問題がでないようにしました。
- FEX2053
- ベストアンサー率37% (7991/21371)
Sheet1のA1~A100に問題、B1~B100に回答を書くとして。 Sheet1の例えばC1に =INT(RAND()*99)+1 こうすると、1~100の乱数が得られます。 200までなら =INT(RAND()*199)+1 ですね。 で、Sheet2をクリックして白紙を開き、例えばそこのA1に =INDIRECT("Sheet1!A"&Sheet1!C1) と書くと問題が表示されます。一方Sheet3のA1には =INDIRECT("Sheet1!B"&Sheet1!C1) とすると、同じ問題の答えが出てきます。 問題はSheet2、答えはSheet3ですから同時には見れないですよね。 Sheetを切り替えると、問題と答えが参照できます。気になるなら Sheet1を非表示にする(シート名上で右クリックするとメニューが 出てきます)と、問題一覧は見られません。 で、問題を切り替えるには[f9]を押してください。 マクロを使うともっときれいにできますが、マクロを使わずにこの 方法でも「シートを切り替えるだけでは乱数の再計算はしない」と 言うExcelの特性から、可能になります。