テキスト(エディット)ボックスのフォーカスを自動的に移動させるには?

Question 23.5 Previous Next
いつも勉強させていただいております。
個人番号などを大量に入力する場合、(ダイアログシートのエディットボックスなど) いちいちエンターキーを押さなくても、カーソルが次のところに移ってくれるようにするマクロは、作れるのでしょうか?(個人番号はみな同じ桁数です。)
Excel 95を使っています。
Answer   Copyright (C) 1999.12.22 永井善王
新しく購入したソフトウェアをインストールしているときに、CDキーを入力する画面で既定の桁数をキーインすると、TABキーを押さなくても、自動的に次のボックスにカーソルが移ることがあります。
あなたは、それと同じようなことをしたいのではないかと思って調べてみたのですが、Excel95では適当な方法がみつかりませんでした。もしかすると、イベントマクロを利用すれば可能かも知れませんが、かなり難しいマクロを組むことになると思います。

しかし、Excel2000では、テキストボックス(Excel95のエディットボックスに相当)に最大文字数が入力されたときに、フォーカスを自動的に次へ移すかどうかを設定する「AutoTabプロパティ」があるので、比較的簡単に実現できます。
フォーカス移動
左図は Excel 2000で作ったサンプルです。
テキストボックスに「123」と入力すると、TABキーを押さなくてもカーソルが、右のテキストボックスに移動します。
その制御はマクロで行っているのではなくて、テキストボックスのプロパティを設定することにより、Excelの標準機能で自動的に実現します。
プロパティをどのように設定すればよいのか、簡単に説明します。
まず、Visual Basic Editor画面に切り替えて、テキストボックスのあるユーザーフォームを表示してから、下図の1.のとおりクリックして、テキストボックスのプロパティを表示します。
AutoTabの設定

左図 2.のとおり「AutoTab」を選択してから、3.のとおり「True」を選択します。



同様にして、プロパティウィンドウの下の方にある最大文字数「MaxLength」をクリックして、値が 「0」になっているのを 「3」に変更します。
こうして作ったユーザーフォームは、すぐに試すことが可能です。
その画面のメニューバーから[実行]-[Sub/ユーザーフォームの実行]とクリックすればユーザーフォームが表示されるので、「123」と入力してみて、カーソルが自動的に移動することを確認してください。もし、これで満足できるのならば、マクロを組む必要はないでしょう。

サンプルブックのダウンロードは ここをクリック (YNxv9834_TextBox_AutoTab.xls 44KB)
※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。

 

Excel VBA Macro