![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
No.8ベストアンサー
- 回答日時:
こんにちは。
連休中は、体調を壊していまして、とても書き込みできる状態ではありませんでした。
まだ、調子が戻ってはいないのですが、書き加えておきます。
MakeZero の部分で、動かなくなる問題は修正しておきますし、違うブックは設定キーをオフにしました。もう少し設定条件に細かくもできますが、当面、このままにとどめておきます。
なお、私は、聞かれれば答えますが、細かい説明はあまりしません。
https://bit.ly/2lcm3rM
Enter (テンキー) {ENTER}
Enter ~ (ティルダ)
テンキーからEnterキーを入れるのでしたから、それに
標準モジュールのSetkey に
Application.OnKey "{ENTER}", "MakeZero" 'テンキー
を加えてもよいです。スペースキーと近い場所にあるという理由で、Enter はキーボードにしています。
以下は、あまり細かいテストをしていませんので、不具合があるのかもしれません。
'-------------------------------
'コード
'//ThisWorkbookモジュール
'Excelを再起動するか、このWorkbook_Openを実行すれば、設定されます。
Private Sub Workbook_Open()
Call SetKeys
End Sub
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
Call SetKeys
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Call SetOffKeys
End Sub
'----------------------
'//標準モジュール
Sub SetKeys()
Application.OnKey " ", "MakeRandom"
Application.OnKey "~", "MakeZero"
End Sub
Sub SetOffKeys()
'設定キーを解除
Application.OnKey " "
Application.OnKey "~"
End Sub
Sub MakeRandom()
If ActiveSheet.Name = "Sheet1" Then
If ActiveCell.Address = "$A$1" Then
ActiveCell.Value = Int(100 * Rnd + 1)
End If
End If
End Sub
Sub MakeZero()
'この部分は、もう少し細かな設定も可能です。
If ActiveSheet.Name = "Sheet1" Then
If ActiveCell.Address = "$A$1" Then
ActiveCell.Value = 0
Else
ActiveCell.Offset(1).Select
End If
End If
End Sub
お礼が遅れてしまい申し訳ありません。
あやふやながらも一応意味はわかると思います。(何日もかかかると思いますが…)
わざわざ体調がすぐれないにもかかわらず回答をくださりまして、心からの感謝を送ります。
お体をお大事に
ベストアンサーに選ばさせていただきます。
ありがとうございました!
No.7
- 回答日時:
冷やかしを入れてしまったお詫びとして。
(急ぎの要件もあるので)>なぜか"MakeZero"と"MakeRandom"が動かないようでした。
>半角チルダもエンターキーに置き換える必要もありますし、どうしたらいいんだぁ!!って頭を抱えています。
WindFaller氏の回答でご質問の動作が可能ですよ。
このプロセス、設定方法は、覚えておいた方が良いですよ。(私、忘れてました)
制御系に使う事もあるかと、無いかも知れませんが、ゲームを作る時とか、、(昔作りました)
Application.OnKey "~", "MakeZero"を
Application.OnKey "{ENTER}", "MakeZero" にして
Auto_Openでキーを登録するので初めにAuto_Openを手動で実行するか、
ブックを開き直して使います。
設定するという特性化から、ブック立ち上げ時に設定するようにしたのだと思います。
チルダを入れてあったのは、意図するところがあったのではないでしょうか、(私もEnterにしない)
ご質問の回答としては、ベストでしょう。
質問としては、質問者のおっしゃる通り、問題ですね。。
私の説明付けたほうが良いですよは、VBAの知識がほとんどないためとあり、重要なことなので
WindFaller氏が見ない可能性もあるので、注意喚起だけでもと、思います。
この、Application.OnKeyには、問題もあります。
Application、すなわち、Excelのキーを設定するものです。
したがって、Excelが閉じられていない場合、他のブックのSheet1、A1セルでEnterキーを押しても実行されてしまいます。
また、設定は、Excelが閉じるまで有効でVBAが書かれているブック以外を開き、VBAのブックを閉じます。
新しく開いたブックにSheet1シートがあった場合、A1セルで何かを入力、Enterキーで決定すると
A1セルには設定された0が入力され、VBAが書かれているブックがなぜか開きます。
この回避方法は、このVBAのブックは単独で使い、他のブックを開きたい場合は、Excelを閉じてから
開く必要があります。
これは、特定の使用に限ったブックでは、良いのですが知らないで、沢山ブックを開いていて
後からでもこのVBAブックを開くと他のブックで作業する時、不明な挙動で困ると言う事になります。
試してみてください。
会社で出来ましたよと試す時、このような事象を知らないと取り返しがつかない事になるかも知れません。
お節介が過ぎました。失礼します。
前述のように(おそらく)遊びですので、少々不明な挙動をしたところで大丈夫だと思いますが、取り返しのつかないことになろうと発案者が悪いんですから大丈夫…なはず。
今、補足を付け足しましたが遅かったですね…
VBA自体、入門書みたいな本を読んだくらいの知識量しかないのでご教授いただきありがとうございます。
たぶん、ブックを開きなおしてなかったから動かなかったのだと思います。
ゲームを作るですか…SEの人が頭抱えて見ているパソコンのキーボードに落ちた大量の髪の毛を見てプログラミング自体怖くなってしまっているのでゲームは作らないと思います。作らないことを祈ってます。
No.6
- 回答日時:
どこから拾ったの "{ENTER}" ですよ。
どうも意見が合わないようで、、、
A1セルでは、本来必要なEnterキーの機能なくなっていますよね。。
質問にはないので、必要かどうか分かりませんが、そのような対応で良いのかなあー
ご存知の通り、Enterキーは特別と私は、認識していますので、
機能変更するのはありですが、説明は付けた方が、、良いかと思いますよ。
まあ、いつかのお返しです。(本気では無いですよ)WW
No.5
- 回答日時:
投稿時、半角2回は修正されるようですね。
知りませんでした。If Target.Value = " " Then Target.Value = Rnd * 100
If Target.Value = " " Then Target.Value = 0 ’ ” ”は、半角2回 です。全角にしてみましたが?
No.4
- 回答日時:
ご質問には、難しい課題が含まれています。
VBAにしても、関数にしても結果を考えるに、1セルのみに行うのであれば、設計自体を考え直す方が良いでしょう。
つまり、合理的な設計ではないので、仕様を改善をしなさい。というのが、答えになります。
理由を教えて欲しいとなると思いますので、簡単に、、、
Enterキーの機能を考えてください。昔でいうリターンキーでこれ自体に値などは持ちません。決定するとかの機能です。
よく、Excelでセル選択をするのに、Enterキーを連打したり、何回か押してセルの移動する手段に使っていますが、
これは、あくまでOfficeのサービス機能です。本来、セル移動にはTabキーや矢印キーを使うべきで、Enterキーに移動する機能はありません。
一方、スペースキーは” ”など値を持つ事が出来ますが、決定する事が出来ません。
つまり、決定するには、Enterキーを押すかセルを移動する必要があります。
又は、キーが押されたこと自体を検知する必要があります。
VBAには、Windows API宣言をして使用する事が出来き、キーイベントを検知することは出来ますが、
そのトリガーになるであろう、シートイベントには適当なイベントがなく、他の方法を考えなくてはいけません。
つまり、A1セルでキーを押したらだけでは、条件が他に必要になると言う事です。Enterキーの場合、セル移動してしまいますしー
If ~~~ Then Range("A1").Value = 0
If ~~~ Then Range("A1").Value = Rnd * 100
果たして良い条件を付けられますか?(条件の付け方が最大の問題ですね)
仕様は、目的が明確でそれに対して合理的でなければ、いけません。
単なる遊び、検証、勉強なら良いのですが、、、頑張ってください。。
勿論、スペースキー、エンターキーにする理由をお聞きしていませんので、
判断に困りますが、簡単な例を示します。
例えば A1セルにスペースキーを1回(半角)→EnterキーでA1に乱数入力、
スペースキーを2回(半角)→EnterキーでA1に0を入力するなら、簡単で
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Address = "$A$1" Then
If Target.Value = " " Then Target.Value = Rnd * 100
If Target.Value = " " Then Target.Value = 0
End If
Application.EnableEvents = True
End Sub
って感じです。
初めのこの条件、
>セルA1でスペースキーを押したときに100までの乱数を表示させ、エンターキーを押すと0、
通しますか?
お礼が遅れましてすみません。
Qcahn1962様、三つも回答してくださりありがとうございます。
お礼はこの一件でまとめさせていただきますが、ご了承ください。
この条件はもともと、たらい回しで回ってきたものでほかの人に回そうにも回せる人がいなかったので私がすることになってしまいました。発案者は私も誰かわからないので探しに行かなくてはなりませんが、私にこの条件を押し付けた人に「三連休明けまでによろしく」と言われましたので、こんな非合理的な条件をすることになりました。
たらい回しで回ってきた感じでは、遊びっぽいです。
発案者に直談判できるとすればエンターキーよりわかりやすいフォームコントロール(ボタン)で記録したマクロを実行すればいいのではないか、と言いたいです。
とりあえず、回答者様の言う通り良い条件を考えてみようと思います。
No.3
- 回答日時:
学校の宿題で、こんな難しい内容のものは出るはずがありませんね。
スペースキーに乱数を、エンターキーで0になる、という設定は、それを経験なくて、テキストで実現できるほど簡単ではないかもしれません。
'//標準モジュール
Sub Auto_Open()
'自動設定(ブックをオープンした時に設定される)
Call TryOnKeys 'キー設定マクロを呼び出し
End Sub
Sub TryOnKeys()
'キー設定マクロ
Application.OnKey " ", "MakeRandom" '半角スペース
Application.OnKey "~", "MakeZero" '半角チルダ
End Sub
Sub MakeRandom()
'乱数を作る
If ActiveSheet.Name = "Sheet1" Then
If ActiveCell.Address = "$A$1" Then
ActiveCell.Value = Int(100 * Rnd + 1)
End If
End If
End Sub
Sub MakeZero()
'ゼロを入れる
If ActiveSheet.Name = "Sheet1" Then
If ActiveCell.Address = "$A$1" Then
ActiveCell.Value = 0
End If
End If
End Sub
学校の宿題じゃないですが、学校の先生に聞いてみたらなにかヒントを得られるかなと思って聞いてみましたが、「本を読め」って言われました。ちなみに本には書いてないです。
エンターキーが押されたことを取得する方法は本に書いてあったので読みましたが、sheet1A1セルに限定してイベントを起こすにはどうしたらいいか全くわかりませんでした。
回答者様のマクロをコピペしてみましたが、なぜか"MakeZero"と"MakeRandom"が動かないようでした。
半角チルダもエンターキーに置き換える必要もありますし、どうしたらいいんだぁ!!って頭を抱えています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの1桁目のゼロが表示されない 6 2022/09/17 09:46
- Excel(エクセル) EXCELでリターンキーが押されたらそのセルに特定の文字を表示したいのですが。 2 2022/08/07 12:58
- Windows 10 Windows 10の立ち上げについて 2 2022/04/17 13:36
- Excel(エクセル) 重複したデータ(空白は除く)のVBA表記について 4 2022/08/15 07:28
- Excel(エクセル) エクセルの数式で教えてください。 2 2022/10/25 17:10
- Access(アクセス) Access2016でフォーム内にExcelの複数シートを 表示させるイメージで複数テーブルの デー 1 2022/11/25 15:30
- Windows 10 Windows 10でBIOS画面が表示されなくなった 9 2022/06/26 08:13
- Excel(エクセル) 【Excel関数】値が合致するセルの隣のセルを表示させたい 8 2022/10/12 17:44
- Excel(エクセル) エクセルでIF関数中にIFERROR関数を使いたいのですが???? 5 2022/04/08 13:24
- Excel(エクセル) Excelについて A1からA12まで、1月〜12月と入力し、 B1からB12の範囲に、C1とD1に 4 2022/05/26 22:48
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの表で1年間の曜日を...
-
エクセルでの特別な文字を上に...
-
Microsoft Officeの中古は信用...
-
エクセルで会社の従業員のデー...
-
Excelで50個のセルに同じ文字を...
-
スプレッドシートで使う数式を...
-
エクセルでセルに標準で入力さ...
-
エクセルでB列でフィルターをか...
-
UNIQUE関数が使えないバージョ...
-
EXCELの質問です 119から足した...
-
libre 表計算ソフトの計算がう...
-
【マクロ】VLOOKUPにて参照元に...
-
お世話になります。 Excelを使...
-
【マクロ】 IFERROR関数をマク...
-
Excelで、項目の種類ごとにカウ...
-
エクセル日付 文字列の関数がエ...
-
【マクロ】セルに関数を入れる...
-
exselで最小数で並び替える関数
-
エクセルの空欄をつめて、次の...
-
Excel分析ツールでのポアソン回...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA、別ブックへ転記す...
-
エクセルでの作業計算方法について
-
時間によってファイル名が変わ...
-
【関数】適切な文字数の数字を...
-
Excelについて教えてください
-
エクセル初心者です 関数の入れ...
-
【マクロ】ファイル名の変更に...
-
UNIQUE関数が使えないバージョ...
-
エクセルの計算
-
【関数】先頭だけにある、半角...
-
Excelで、決まった行を繰り返し...
-
Excelでセルの値が同じか...
-
LOOKUP関数を使えばいいのでし...
-
Excel
-
はがきについて。
-
エクセルの条件付き書式につい...
-
エクセルのデーターが2か月前の...
-
エクセル②
-
エクセルで「-0.0」と表示さ...
-
Microsoft1Officeの互換ソフト...
おすすめ情報
VBAの知識がほとんどないため、マクロを張り付けていただけると幸いです。
エンターキーは特に重要というわけでもありませんが、できればエンターキーにしていただきたいと思います。
エンターキーでない場合はアルファベットにしていただけるとわかりやすいです。