1バイト入力でセルを移動させるには? (BEEP音を使い分けるには?)

Question 25.8 Previous Next
はじめまして、 EXCEL Vbaマクロ500連発 を 見させていただきました。
マクロに以前から興味があったものの、上手く組むことができなくて、途中で挫折。そうしているうちに、新しいEXCEL2000と出てきて・・・ 今度こそはとの意気込みで、いろんな書籍をあたって見ています。 数冊目にこの本との出会いがあったわけですが、基本文例が理解しやすく非常に助かっております。m(__)m
ここで、聞いていいものかわからないのですが、あるシステム開発を考えています。

下記条件を満たすためには、どのような方法があるのでしょうか? うまくアイデアが浮ばなくて・・・・ よいお知恵があれば 拝借させていただきたいのですが
【条件1】
1つのセルには1バイト入力された状態で、セルを移動させたい。[enter]なしで行いたい。
<データ>⇒<入力規則>⇒<設定>⇒<文字列指定>では、やはり[enter]を必要とするみたいなので・・・
【条件2】
BEEP音は1種類しかないのでしょうか?

上記の条件で理解できましたでしょうか? あるシステムとは成績処理でフラグ判定でセルを移動し、生徒の答案を目で追いかけながら 0・1で○・×に変換し、2種類のBEEP音で入力内容を判断していきたい。
[ENTER]を使用するとキー入力数が倍になるため効率が下がるため、どうしても1バイトが入力された状態で、セルを移動したいと考えています。 dos時代の98BASICでいう"INKEY"っていうコマンドみたいのがあればいいのですが、できないのでしょうか?
方法まで教えてくださいとはいいません。 できる・できないが判断できればいいのですが・・・周りの知人に相談しても上手く回答をもらえないもので、よろしければ、すばらしい名案を 聞かせていただきたいので、よろしくお願いします。
Answer   Copyright (C) 2000.3.3 永井善王
ブラインドタッチで効率よく入力したいのですね。お気持ちはわかります。
Excel2000の新機能である「入力規則」は、セルごとに入力可能な値、文字数などを制限することが可能で、入力値に誤りが ある場合には、エラーメッセージを表示してくれたりする便利な機能です。しかし、あなたのご指摘どおり、[Enterキー]を押すことを省けないようです。

98BASICなど、DOS時代のMicrosoft社のBASICの 'INKEY' あるいは 'INKEY$' コマンドは、1文字だけキー入力すれば [Enterキー]を押さなくても、 カーソルが次のセルへ移動しました。これに相当するVBAマクロを、うまく組みたいのですね。
【1について】
INKEYまたはINKEY$に相当するVBAの機能を、私は知りません。そこで、 ワークシートのセルに直接入力する場合に使えるイベントを利用 できないか、考えて見たのですが、思い当たりませんでした。
フォーカス移動
しかし、ユーザーフォームのテキストボックスから入力してワークシートのセルに記入する方法で良いなら、可能と思います。
この方法は、FAQの値の出入に「テキストボックスのフォーカスを自動的に移動 させるには?」として掲載済みですから、そちらを見てください。
右図のように、'123' と 3文字入力すれば[Enter]キーを押さなくても、次のテキストボックスにフォーカスが移りますから、 1文字に改造してみてください。

改造したテキストボックスに入力された値を、ワークシートのセルにセットする方法がわからなければ、「テキストボックスの値をセルに記入するには?」が参考になるでしょう。
次の生徒分の入力に移るときに、ワークシートの次の行に進める方法などの制御がわからなければ、「エディットボックスでDBへ入力するには?」を参考にしてください。こちらのマクロは、Excel95のエディットボックスを使用していますが、テキストボックスでも同様です。
【2について】
Beepステートメントの構文はシンプルで、書き方は次のとおりです。
    Beep                        'コンピュータのスピーカを鳴らす
前述のBASICの中には、音階と吹鳴時間の制御が可能なものもありました。 そこまでの機能がない場合でも、ブザー音を制御してメロディーもどきを奏でることを 可能にしたソフトも、あったと記憶しています。また、何回鳴らすかを制御する手法は、かなり普及していたと思います。

スピーカ しかし、VBAの'BEEP'はそのPCの設定によるのでしょうが、ブザー音ではなくてチャイム音が鳴るようです。チャイムを何回鳴らすかで良いのであれば、 繰り返し処理のマクロで作れます。ただし、演奏時間など、機種により一率ではないようなので、 あなたのセンスにフィットするものになるかどうかは、わかりません。 書き方は次のとおりです。

    For 回数 = 1 To 2           '2回繰り返す
        Beep                    'コンピュータのスピーカを鳴らす
    Next
代替手段として、Excelと OSのバージョンによっては、サウンド機能(WAVE)が使えるかと思いますが、私はこれ以上わかりません。
もしかすると、私といっしょに出版活動をしている 「エクセルマクロ研究会」のメンバーのHP 「Excelと遊ぼう!」に情報が あるかも知れません。 このHPの
Link Service のページからリンクで飛べます。

「すばらしい名案」ではなかったかも知れませんが、1と 2を組み合わせて、ブラインドタッチ入力が実現できると良いですね。 工夫してみてください。

Excel VBA Macro