エクセルで百人一首ゲームを楽しみましょう!

このQ&Aのポイント
  • エクセルの関数を使って百人一首のゲームを楽しむ方法を紹介します。
  • 縦100行の表を作成し、検索値を用いて歌を表示させます。
  • 上中下の句を別々に表示し、次の歌へ進む乱数も自動的に生成する方法をご説明します。
回答を見る
  • ベストアンサー

エクセルの機能で百人一首ゲームをしたいのです

こんにちは。 エクセルの関数を使って百人一首のゲームを考えていますが、次のような状況です。 1)第1列を歌番号、2・3・4列に上中下の句、第五列に作者で、縦100行の表を作り、これに元表という 名前を付けました。 2)検索値のセルをA1にこの元表の外に作りました。 3)検索値は「=INT(RAND()*100)で求め、歌番号と合致するものを選ぶようにしました。 4)第2列の上の句を表示するためのセルには  「=VLOOKUP(検索値セル番号,元表の名前,上の句列番号) としました。 これで上中下の句とも所定のセルに入りましたが、ひとつの和歌を表示するとき、上中下句が一時に 表示されてしまい、暗記勉強になりません。 また、乱数のところは1首ごとに全部消去しなければなりません。 なにか、インプットで上中下句を別々に表示すること、次の歌へ進む乱数を自動的に作る方法を 教えていただきたいのです。VBAはよくわからないのでできればエクセルの範囲でお願いします。

noname#204344
noname#204344

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1622/2462)
回答No.3

どこか空いているセルに値を入れると必要なセルを表示するようにすればいいのではないかと思います。 たとえば 下の句を表示するセル =IF(空いているセル="","",VLOOKUP(検索値セル番号,元表の名前,下の句列番号)) にしておくと空いているセルに何か値を入れると下の句が表示されます。この場合、空いているセルに値を入れた途端に乱数の値が変化して別の句が表示されてしまい具合が悪いのでこちらも手を加えます 検索値のセル(VLOOKUPの検索値セル番号になります)は、データのデータの入力規則でリストを選択し、元の値に乱数を生成するセルを指定します。 たとえば、B1に =INT(RAND()*100) としているのでしたら、上記の元の値を=$B$1にします。 次の問題を出したいときには、リストにしたセルをクリックし右に出る▽をクリックするとリスト内に値が一個だけ出るのでそれを選択します。 リストの値は選択するたびに次に出る選択肢が変化しますので次々と別の問題が出ることになります。

noname#204344
質問者

お礼

早速のご教示多謝。頑張ってトライします。どうもお世話様でした。

その他の回答 (3)

  • kkkkkm
  • ベストアンサー率65% (1622/2462)
回答No.4

No.3です。 次の問題を出したいときには、空いているセルの値を消してからリスト選択してください。そこが少し面倒かもしれませんね。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 一案です。 >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

noname#204344
質問者

お礼

早速にありがとうございました。 VBAプログラムに挫折感を抱いておりますので、なんとか頑張ります。どうも。多謝です。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

ゲームですから、 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を押すと、上の句に対応する下の句が表示される 以後繰り返す のように動作します。

noname#204344
質問者

お礼

早速に多謝です。 ご教示のとおりやってみます。 出来た!というのは時間がかかりますがチャレンジします。 ありがとうございました。

関連するQ&A

  • VBAで百人一首練習プログラムを作りたいです。

    当方EXCEL2007ユーザです。同じような内容で最近2度目の投稿ですがよろしくお願いします。 ◇やったこと 1 小倉百人一首の一番から100番まで、歌番号・上の句・中の句・下の句・詠者の5項目(5列)、項目名を含めて 101行の表(元表と名前を付けました。)をB2:F101の範囲で作成しました。 2 練習プログラムだから1番歌から100番歌までランダムに出題する。   INT(RAND()*100)で乱数を発生させました。 3 VLOOKUPファイル関数で乱数番号に対応する歌を、その元表のとなりセルに上記5項目表示させました。 ◇したいこと 4 練習プログラムだから、上の句だけ表示して、「中の句は?」という動作を加えるまで中の句を示さず、なにか動作を加えてから中の句を表示する。 5 以下、同様に動作を加え(理解を確かめて)一首を完成する 6 一首が終わったら次の歌番号をランダムに選んで、まずは上の句を問題として提起させる。 7 疲れたら止める動作を与える 8 練習成果を正解割合で示す。  以上の通りですが、VBAで、意味は分からないなりにデッドインプットしますから「どこへ」、「何を」打ち込むのか、教えてください。よろしくお願いします。

  • プログラムの進行を制御したい

    W7,OFFICE2003ユーザーです。 百人一首の練習プログラムをエクセルで作成しております。=int(rand()*100+1)で乱数を発生し、= vlookup(この乱数セル、第1列歌番号の百人一首一覧表、上や下の句の列番号)で 検索・表示します。ここまではできましたが、これだと同じ乱数では、同時に上・下の句が表示されてしまい、暗記の練習になりません。そこで、何か適宜のキーを押して暗記の状況を確認してから次の句の処理を開始するよう、随意の時間、時間的な間合いをとりたいのです。昔フォートランの時分には1から100まで足し算させることで間を取っていたものですが、エクセルでは分かりません。なにか、キーを押すレベルの解決法を教えてください。なお、次の乱数発生はF9きーで行っております。 よろしくお願いします。

  • セルへの出力に時間差をつけたい

    OFFICE 2007, windows7 のユーザです。俳句の記憶補助プログラムを作っております。 1)EXCELセルに表題を番号/上の句/中の句/下の句として4列×N行の表を準備します。 2)次いで、A1セルに検索値として上記の番号の一つを入力します。 3)A2に上の句を表示するため、「=vlookup(検索値としての番号,表の名前,上の句の列番2,真偽)」と入力。 4)B2に中の句を表示するため=vlookup(同一の番号、表名,列番3,真偽)と入力。 5)C2に下の句の表示のため、=vlookup(同一の番号,表名,列番4,真偽)と入力。 そこで質問。たとえば検索値1番では表に従って 我と来て/ 遊べや親の/無い雀 が同時に出力されますが、この際、上の句を表示後、記憶を確かめるための少々の時間を2~3秒置いてから、中の句、ついで下の句と段階的に表示させたいのです。マクロを使わないで関数を使用するなどの手法をご教授ください。昔、FORTLANを使っていたころ、SUM=1+2+3・・・・+NでNを変更して時間を調節しておりましたが、EXCELの関数でお願いします。 

  • 百人一首のルールについて教えてください。

    百人一首とは、上の句を読まれたらその歌の下の句の札をとればいいのでしょうか? どこかでまえの歌の札をとるとも聞いたことがあるのですが? 例えば、秋の田の かりほの庵の 苫をあらみ わが衣手は 露にぬれつつ の歌の場合、秋の田の かりほの庵の 苫をあらみ と読まれたら わが衣手は 露にぬれつつ と札を取ればいいのでしょうか??

  • 百人一首「きまり字」の覚え方について

    狭義に解釈すれば、百人一首の必勝法として、きまり字「上の句の中で、その字までで歌が決定」がありますが、貴方は2~6字ぎまりをどの様にして覚えたり、下の句をどのように自陣に並べますか? ◇語呂合わせ<1字ぎまりの事例を記載> ◇五十音順 ◇好きな歌(札)をなるべく自陣・近くに集める・得意札を相手方の配置の中でチェック。 ◇上の句の途中で下の句が浮かんで来るだけで十分。 ◇百人一首なんて知らない、しない。 ※本来は、詠み人や歌意を味わい理解し覚えるのが良いのですが、百首を覚える為のコツとして、アドバイスをお願いしたいのです <例> 1字ぎまり・・・七首   →む・す・め・ふ・さ・ほ・せ(娘房干せ)と覚え、札の位置を確認しておきます。 2字ぎまり・・・四十二首→ 3字ぎまり・・・三十七首→ 4字ぎまり・・・六首   → 5字ぎまり・・・二首   → 6字ぎまり・・・六首   →

  • エクセルで、数字を入れると名前が出るようにしたい

    お世話になります。 エクセルで表を作っているのですが、従業員番号を入れたら、次のセルにその従業員番号を使っている人の名前を表示させたいのですが、どうすればいいのかわかりません。 ご存知の方、どうぞ教えてください。よろしくお願いいたします。 従業員番号     名前 1         田中 2         高橋 3         斉藤   A列   B列 1 1 田中(← A列に「1」を入れたら、自動的に表示)

  • エクセルでの検索結果表示について

    シート1のA列に番号を入力するセルがあります。 シート2のA列に番号・B列に名前が入力されています。 シート1のA列に番号を入力するとシート2のA列を検索かけてシート1のB列に検索した結果の名前を表示させたいのですが、エクセルでできるでしょうか? よろしくお願いします

  • EXCELでVBAをつかったコピーの高速化

    EXCELのVBAで、A1からA1000まで乱数をセルに書き込むと8秒かかるのですが、これを高速化することが可能でしょうか? For 行番号 = 1 To 1000 Cells(行番号, 1).Value = Int((10 * Rnd) + 1) Next セルに書き込まずに、1000個の乱数を発生させると1秒もかからないので、8秒のうちのほとんどの時間は、セルへの書込み時間にとられています。 EXCELで列のコピーをした場合は、セルへの書込み時間が早いので、1000個の乱数の結果をいったんメモリに書き込み、列のコピーのように、セルにコピーができれば、高速化が可能かなと思うのですが、VBAでできるのでしょうか?よろしくお願いします。 For 行番号 = 1 To 1000 Int((10 * Rnd) + 1)をメモリに書込み Next メモリの内容をA1:A1000にコピー

  • 乱数を更新するキーはありますか。

    W7, 0ffice2003 です。 ただいま、小倉百人一首の練習プログラムをつくっています。EXcelを使うつもりですが、int(rand()*100)で1~100の乱数を作って歌番号にあわせます。このとき、次の一首に進むのに 新たな乱数を作る必要がありますが、キーを操作する程度で乱数を変更する方法がありましたら 教えてください。お願いします。

  • EXCELの検索で検索文字列以外が混ざった場合?

    EXCELで、検索文字列のあるセルの行番号を表示させたいのですが、 検索したいセルには検索したい文字列以外にも不特定な文字列が混ざっている場合、どういう式を作ればよいのですか?