『記憶ゲーム:こんなことができますか』(るふぃ) 任意のセル範囲(例えばA1:E10)に1〜10の10個の数字をランダムに表示して,一回すべて消します。 その後,数字のあったセルを1から順にクリックし,合っていれば表示され,間違っていれば「違います」と表示されるようにしたいのです。クリックする順番が違っても「間違い」としたいと思っています。 Excelのバージョンは2007です。 ---- >こんなことができますか VBAなら出来ますけど、ここは「学校」であり無料作成受付所ではありません。 何が分からないのかを質問しましょう。 とりあえず作って欲しいということならプロに依頼しましょう。 (トオリガカリ) ---- 最近学校も質が変わった。 キリキさんが居られた時はすぐ教えてくれていました。 (shota) ---- 単なる興味本位から作ってみました。 標準モジュールに Option Explicit Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub Numbers() Application.ScreenUpdating = False Range("AZ1").Resize(1, 10) = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) Range("AZ1").Resize(1, 10).Copy Range("AX1").PasteSpecial Transpose:=True Range("AZ1").Resize(1, 10) = "" With Range("AY1").Resize(50, 1) .FormulaLocal = "=RAND()" .Value = .Value End With Range("AX1").Resize(50, 2).Sort Key1:=Range("AY1"), order1:=xlAscending Range("AY1").Resize(50, 1) = "" Dim i As Long For i = 1 To 4 Range("AX1").Offset(0, i).Resize(10, 1).Value = Range("AX1").Offset(i * 10, 0).Resize(10, 1).Value Range("AX1").Offset(i * 10, 0).Resize(10, 1) = "" Next Range("AW1").Value = 1 Cells.Interior.ColorIndex = 2 With Range("A1:E10") .EntireColumn.ColumnWidth = 10 .EntireRow.RowHeight = 36 .Borders.LineStyle = xlContinuous .Borders.Weight = xlThin .Font.Name = "MS Pゴシック" .Font.Size = 36 .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .Value = Range("AX1").Resize(.Rows.Count, .Columns.Count).Value Application.ScreenUpdating = True Sleep 3000 .Value = "" End With End Sub シートモジュールに Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Range("A1:E10"), Target) Is Nothing Then Exit Sub If Range("AW1").Value = "" Then Exit Sub If Range("AW1").Value = Target.Offset(0, Range("AX1").Column - 1).Value Then Target.Value = Range("AW1").Value Range("AW1").Value = Range("AW1").Value + 1 Else If MsgBox("間違いです。  続けますか", vbYesNo) = vbNo Then Range("AW1").Value = "" Range("A1:E10").Value = Range("AX1").Resize(10, 5).Value End If End If If Range("AW1").Value = 11 Then MsgBox "あたり!!" Range("AW1").Value = "" End If Cancel = True End Sub (Mook) ---- Mook様 感謝感謝です。 ここまでヒントを頂いたら るふぃさんも次を考えるでしょうね。 完成するのを心待ちしていますよ。るふぃさん (shota) ---- これでどうでしょうか 重複しないランダムな数値を得たい 問い WindowsXP 指定した範囲内のそれぞれのセルに指定した範囲内での重複しないランダムな 数値を得たいのですがどのように指定したら良いでしょうか。 例えば A1からJ1までの範囲に1から10までの数値を重複なしで ランダムに指定したい場合 「=INT(RAND()*10)+1」と指定してみましたが、 重複しないという条件を満たせませんでした。 答 1から10と表示したい数字が決まっている場合は、A1からJ1に1から10と入力します。 A2からJ2に =RAND()で乱数を発生させます。 A1からJ2を選択して、メニューバーの[データ]→[並べ替え]をクリックします。 <並べ替え>でオプションボタンをクリックします。 <並べ替えオプション>で《方向》で「列単位」をチェックします。 「OKボタン」をクリックします。 <並べ替え>で最優先されるキーの下向き▼をクリックして2行目を選択します。 「OKボタン」をクリックします。 並べ替えは設定さえしておけば、2回目以降は<並べ替えオプション>を 再度しなくても「OKボタン」で並べ替えられます。 【編集人の蛇足】 並べ替えのキーを見られたくない場合は、2行目を非表示にしておくと良いかも。 ---- 皆さん色々なご意見ありがとうございました。 このサイトを教えていただいたので,エクセルでそのようなことができるのかどうかを 質問したつもりでした。トオリガカリさんには不愉快な思いをさせてしまい申し訳ありませんでした。 それから,shotaさんフォローありがとうございました。 最後になりましたが,Mookさんありがとうございました。マクロについては勉強を始めたばかりで 初めての言葉に戸惑いながら事務的な処理に活用はしていたところでした。教えていただいたコードを 参考にじっくり勉強をしながら応用していきたいと思います。 よくわからないのでもうひとつだけ教えていただきたいのですが, 示していただいたコードについて再度質問してもよろしいのでしょうか?                                (るふぃ) ---- >初めての言葉に戸惑いながら事務的な処理に活用はしていたところでした。教えていただいたコードを >参考にじっくり勉強をしながら応用していきたいと思います。 ということでしたら、分からない部分はご質問ください。 自身でいろいろと試されるつもりがあるのであれば、喜んで協力いたします。 実際のところ、最初の質問文だけでは丸投げにも取れましたので、トオリガカリさんと同様の感想を 持ちましたし、通常であれば無視したケースですが、今回回答したのは単純に問題自体に興味があった からです。 しかし、最初から最後のコメントのように、自身で勉強したいということが書かれていたら、きっと より多くの方が質問に回答されたのではないかと思います。 るふぃさんに、というよりここで回答・質問される多くの方に言いたいことですが、回答者も質問者 も人ですからお互いに理解できる文章を心がけ、気持ちよく学校を利用していきたいですね。 余計なコメントが長くなってしまいました。 (Mook) ---- Mookさん 報告が遅れてすみません。 あれから,いただいたコードを勉強しながら作ることができました。 並べ替えを使って数字をバラけさせ問題を作る工夫や答えを合わすのを別なセルで行う工夫など感動しました。ありがとうございました。 問題を表示するセルの領域を任意で変更したり,問題として表示される数字の数を変更できるようにしてみました。 今,痴呆症の予防ということで,おじいちゃん,おばあちゃんたちの遊び道具として活躍してくれています。すごく勉強になりました。ありがとうございます。 次は,数ではなく文字を表示して頭で並べ替えてから,言葉になる順序でクリックするような物を作ろうと考えています。まだ,文字の出し方や,照合の仕方にひと工夫しなければいけないので色々考えてみます。(るふぃ) ---- 少しは参考になったようで何よりです。 文字を並べるというのは面白そうですね。 数字と違って単純にはいかないので、工夫のし甲斐がありそうです。 頑張ってください。 (Mook)