アプリ版:「スタンプのみでお礼する」機能のリリースについて

簡単なクイズ表示方法を探しています。
考えた方法。
エクセルをデータベース。A列に問題。B列に回答。
例えばパワーポイントの白紙画面に問題を表示。
その画面をクリックしたり、スペースキーを押すなどすると答えを表示。
終わったら次の問題へ。
という流れです。
できればエクセルデータベースの行は、ランダムで出題できると嬉しいです。
正誤の判断をPCにやらせないので、簡単にできそうな気がするのです。
なにぶんオフィス系ソフトに弱いので教えてください。

A 回答 (3件)

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の特性から、可能になります。
    • good
    • 0

おもしろそうだったので、マクロ組んで見ました。

準備として
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で 問題を選択したら 問題 が
答え を選択したら 答えになるます。

上記マクロを実行するたびに、一度でた問題の番号が消えますので、重複して同じ問題がでないようにしました。
    • good
    • 0

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関数を入れたセルに変更してしてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A