- ベストアンサー
エクセルで百人一首ゲームを楽しみましょう!
- エクセルの関数を使って百人一首のゲームを楽しむ方法を紹介します。
- 縦100行の表を作成し、検索値を用いて歌を表示させます。
- 上中下の句を別々に表示し、次の歌へ進む乱数も自動的に生成する方法をご説明します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
どこか空いているセルに値を入れると必要なセルを表示するようにすればいいのではないかと思います。 たとえば 下の句を表示するセル =IF(空いているセル="","",VLOOKUP(検索値セル番号,元表の名前,下の句列番号)) にしておくと空いているセルに何か値を入れると下の句が表示されます。この場合、空いているセルに値を入れた途端に乱数の値が変化して別の句が表示されてしまい具合が悪いのでこちらも手を加えます 検索値のセル(VLOOKUPの検索値セル番号になります)は、データのデータの入力規則でリストを選択し、元の値に乱数を生成するセルを指定します。 たとえば、B1に =INT(RAND()*100) としているのでしたら、上記の元の値を=$B$1にします。 次の問題を出したいときには、リストにしたセルをクリックし右に出る▽をクリックするとリスト内に値が一個だけ出るのでそれを選択します。 リストの値は選択するたびに次に出る選択肢が変化しますので次々と別の問題が出ることになります。
その他の回答 (3)
- kkkkkm
- ベストアンサー率66% (1719/2589)
No.3です。 次の問題を出したいときには、空いているセルの値を消してからリスト選択してください。そこが少し面倒かもしれませんね。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 一案です。 >VBAはよくわからないのでできればエクセルの範囲でお願いします というコトですが、お望みでない方法でやってみました。 ↓の画像のように別Sheet(画像では下側がSheet2とします)に表を作成しておきます。 上側のSheet1のA2セルには =INT(RAND()*100)+1 という数式を B2セルには =VLOOKUP(A2,Sheet2!A:B,2,0) という数式を入れています。 そうした上で、 画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに ↓のコードをコピー&ペースト → Excel画面に戻りF9キー(再計算)を押下して、 C2~E2セルにそれぞれ入力(またはリスト設定しておいて選択)してみてください。 Private Sub Worksheet_Calculate() 'この行から With Range("C2:F2") .ClearContents .Interior.ColorIndex = xlNone End With End Sub Private Sub Worksheet_Change(ByVal Target As Range) Dim j As Long, c As Range, myFlg As Boolean, wS As Worksheet Set wS = Worksheets("Sheet2") If Intersect(Target, Range("C2:E2")) Is Nothing Or Target.Count > 1 Then Exit Sub Application.Calculation = xlCalculationManual With Target For j = 3 To 5 If Cells(2, j) = "" Then Cells(2, j).Select myFlg = True Exit For End If Next j If myFlg = False Then Cells(2, "C").Select End If If WorksheetFunction.CountBlank(Range("C2:E2")) = 0 Then Set c = wS.Range("A:A").Find(what:=Range("A2"), LookIn:=xlValues, lookat:=xlWhole) If Range("C2") = wS.Cells(c.Row, "C") And Range("D2") = wS.Cells(c.Row, "D") And Range("E2") = wS.Cells(c.Row, "E") Then Range("F2") = "正" Else Range("F2") = "誤" If Range("C2") <> wS.Cells(c.Row, "C") Then Range("C2").Interior.ColorIndex = 3 Range("C2").Select ElseIf Range("D2") <> wS.Cells(c.Row, "D") Then Range("D2").Interior.ColorIndex = 3 Range("D2").Select Else Range("E2").Interior.ColorIndex = 3 Range("E2").Select End If End If End If End With Application.Calculation = xlCalculationManual End Sub 'この行まで ※ 正誤の判定がF2セルに表示され 間違った場合はそのセルが赤く塗りつぶされ、そのセルが選択されるようにしています。 ※ 新しい問題を表示したい場合はF9キーを押下してみてください。 お望みの方法ではないと思いますが、ものは試しと思ってやってみてください。m(_ _)m
お礼
早速にありがとうございました。 VBAプログラムに挫折感を抱いておりますので、なんとか頑張ります。どうも。多謝です。
- keithin
- ベストアンサー率66% (5278/7941)
ゲームですから、 1.あなたが「何かをする」と、上の句が表示される 2.次にあなたが「何か」すると、下の句とかが表示される という具合になるよう作っていきます。 この「何かをする」ってのは、まぁ何でもいいんですが、マクロとか併用すれば「ボタンをクリックして操作」みたいに作れるので便利だという事です。 でも今回ご相談はマクロはイヤだって事なので、たとえば… 1.F9キーを押して乱数を再計算すると、上の句が切り替わる 2.どこかのセルに何か記入してあるときに下の句が表示され、記入を消すと表示が消える みたいな具合に作成するのが、一般的なやり方という事になります。 でもこれじゃイマイチ面白くないので、もうちょっとマニアックな作り込みをしてみます。 準備:(必ずこの通りに行う) ご利用のエクセルのバージョンが不明なので詳しい手順をお話しできませんが、エクセルのオプションの計算方法(数式)で「反復計算を行う」にチェック、最大反復回数を1に設定してOKする A列に番号 B列に上の句 C列に下の句 D列に作者 1行目にタイトル行、2行目からデータという具合に準備する 手順: G1セルに =MOD(G1,2)+1 と記入する E2セルに =IF(G1=2,E2,INDEX(B2:B101,INT(RAND()*100)+1)) F2セルに =IF(G1=1,"",VLOOKUP(E2,B:C,2,FALSE)) とそれぞれ記入する。 以上を間違えずに準備出来たら、あとはF9キーを何度も押していきます 1度F9を押すと上の句が表示され、下の句が消える もう一度F9を押すと、上の句に対応する下の句が表示される 以後繰り返す のように動作します。
お礼
早速に多謝です。 ご教示のとおりやってみます。 出来た!というのは時間がかかりますがチャレンジします。 ありがとうございました。
お礼
早速のご教示多謝。頑張ってトライします。どうもお世話様でした。