【エクセルVBA】テキストボックスのプロパティで入力を便利にしよう


ユーザーフォーム,テキストボックス,プロパティ

皆様こんにちは、ノグチです。

エクセルのユーザーフォームを作って、VBAで動かす方法を連載記事でご紹介しています。

前回は、コマンドボタンのイベントとUnloadステートメントで、ユーザーフォーム上のコマンドボタンをクリックしたらフォームを閉じる、という方法をご紹介しました。

【エクセルVBA】コマンドボタンのClickイベントとUnloadステートメントでユーザーフォームを閉じる方法
エクセルのユーザーフォームを作成したり、VBAで操作する方法を連載でご紹介しています。本稿では、コマンドボタンのClickイベントとDblClickイベントのご紹介と、Clickイベントでユーザーフォームを閉じる方法を説明しています。

今回からは、フォーム上の各コントロールのプロパティやイベントをご紹介していきます。

本稿では、テキストボックスのプロパティをご紹介していきますよ!

前回までのおさらい

前回までの記事で作成したユーザーフォームがこちら。

ユーザーフォーム,オブジェクト名

ユーザーフォームにコントロールを配置して、コマンドボタンのClickイベントで、コマンドボタンををクリックしたらフォームを閉じる、という状態にしているのでした。

テキストボックスのプロパティ

テキストボックスを便利に使えるように、プロパティでオブジェクト名や文字の大きさ、配置などを設定していきましょう。

プロパティは数多くありますが、その中でも使うことが多いものをいくつかご紹介します。

オブジェクト名をつける

まずは、テキストボックスをVBAで扱いやすくするために、オブジェクト名をつけてしまいましょう。

テキストボックスも、オブジェクト名に任意の名前を付けることができますよ。

テキストボックスのプロパティシートを開いて、「(オブジェクト名)」という項目の値が、VBAでこのテキストボックスを操作する際に使うオブジェクト名になります。

テキストボックス,オブジェクト名

今回は、「TextItem」という名前にしました。

Fontプロパティでフォントを設定する

Fontプロパティで、テキストボックスに表示される文字のフォントや、大きさを変えることができます。

プロパティシートの「Font」という項目の右端にあるボタンをクリックすると、フォント設定のウインドウが表示されます。

テキストボックス,Font

このウインドウ上で、フォントや文字の大きさ、斜体や太字といったスタイルも設定することができますよ。

画像では、初期値のフォントサイズは「9」となっていますね。

「9」では、今回のユーザーフォーム上に配置したテキストボックスのサイズに対して小さすぎるので、フォントサイズを「14」に変更してみましょう。

フォントサイズを変更して、ユーザーフォームを開いてテキストボックスに文字を入力してみると…

テキストボックス,Font,変更後

このように、テキストボックスに表示される文字の大きさが変更されて、テキストボックスの大きさに対して丁度いい感じになりました。

TextAlighnプロパティで文字の配置を設定する

TextAlignプロパティで、テキストボックスに表示される文字列の位置を設定することができます。

テキストボックス,textalighn

プロパティシートの「TextAlighn」項目の値を、下記3つのいずれかから選択します。

指定する値 設定内容
fmTextAlignLeft テキストボックスの文字列を左揃え表記にする
fmTextAlignCenter テキストボックスの文字列を中央揃え表記にする
fmTextAlignRight テキストボックスの文字列を右揃え表記にする

MaxLengthプロパティで入力できる文字数を制限する

MaxLengthプロパティで、テキストボックスに入力する文字数を制限することもできますよ。

プロパティシートの「MaxLength」の値に数値を指定すると、全角半角の区別なく、指定した数までしか文字を入力できないようにすることができます。

例えば、「10」と指定すれば、そのテキストボックスには10文字までしか入力できなくなるのです。

郵便番号のように、桁数が決まっているような項目の場合は、このプロパティを使うと良いかもしれません。

ControlTipTextプロパティでフォーム上にテキストを表示する

テキストボックスにマウスカーソルを合わせた時、ちょっとしたメッセージを表示させるようにできるのが、このControlTipTextプロパティです。

プロパティシートの「ControlTipText」の値に、ユーザーフォーム上に表示したい文字列を指定すると…

このように、テキストボックスにフォーカスがあたると、プロパティシートで指定した文字列が表示されます。

テキストボックスに入力して欲しい値の補足を表示してあげるなど、ちょっとしたヘルプ機能として使えますね。

TabStopプロパティでフォーカスを当てるかどうかを設定する

フォーム上でキーボードのEnterキーやTabキーを押すと、フォーカスをフォーム上のコントロール間で移動させることができます。

TabStopプロパティは、このキーボードのEnterキーやTabキーを押したときに、そのテキストボックスにフォーカスをあてるかどうかを設定するプロパティです。

例えば、フォーム上に必須入力項目と、任意入力の項目があったとします。

フォーカスが当たるのは必須項目だけにしたい…というときにプロパティシート上でTrueを指定すれば、そのコントロールにはフォーカスがあたるようになりますし、Falseを指定すればキーボードのEnterキーやTabキーでのフォーカス遷移からは除外されますよ。

テキストボックス,tabstop

TabIndexプロパティでフォーカスの順番を制御する

TabStopプロパティとセットで設定しておきたい、TabIndexプロパティ。

このプロパティは、フォーム上でキーボードのEnterキーやTabキーを押した時の、フォーカスが当たる順番を指定するものです。

例えば、フォーム上に3つテキストボックスがあって、1番目のテキストボックス、3番目、2番目…という順番でフォーカスが当たってほしい場合。

3つのテキストボックスそれぞれのTabIndexプロパティに、フォーカスが当たってほしい順番を指定すれば、でキーボードのEnterキーやTabキーを押した時に指定した順番でコントロールを遷移させることができます。

テキストボックス,tabindex

このプロパティで指定するフォーカスの順番はテキストボックス以外のコントロールとも共通なので、順番をつける際は注意が必要ですね。

フォーム上に複数項目がある場合は、TabStopプロパティとTabIndexプロパティで入力のしやすさをぐっと向上させることができますので、是非使っていただきたいプロパティです。

タブオーダーで纏めてフォーカス順を設定する

コントロール1つずつTabIndexプロパティで順序を指定するのは、はっきり言って面倒臭すぎますよね。

実は、フォーム上のコントロールのTabIndexプロパティは、タブオーダーで纏めて設定することができます。

フォーム上で右クリック>「タブオーダー」を選択すると、フォーム上のコントロールが全て表示された、タブオーダーの画面が開きます。

コントロール,タブオーダー

この画面上で、フォーカスがあたる順序を変えたいコントロールを選択し、右側にある「上に移動」「下に移動」ボタンでリスト上の順番を変えることができます。

タブオーダー

リストに表示されている順序が、そのままフォーカスがあたる順序になりますので、各コントロールのTabIndexプロパティを一つずつ更新していくよりも楽且つ、分り易いですね。

最後に

今回は、テキストボックスのプロパティをご紹介しました。

一見、プロパティシート上では項目が沢山並んでいて、しかも英語表記なので、「設定が難しいのでは…」と思ってしまうかもしれません。

しかし、ユーザーフォームの使いやすさ、特に項目への入力のし易さを求める場合、今回ご紹介したプロパティを使ってみると良いかもしれませんよ。

次回記事では、テキストボックスのイベントをご紹介していきます。

それでは、最後までお読みいただきありがとうございました!

連載目次:【エクセルVBA】ユーザーフォームを使ってみよう!

ユーザーフォームは、ちょっとした画面なら作れてしまう、便利な機能です。

何となく敷居が高いように感じてしまいますが、順を追っていけば難しいことはありませんよ。

  1. 【エクセルVBA】ユーザーフォームを作ってみよう!VBEでフォームを挿入する方法
  2. 【エクセルVBA】Showメソッドでユーザーフォームをコマンドボタンから開いてみよう!
  3. 【エクセルVBA】コマンドボタンのClickイベントとUnloadステートメントでユーザーフォームを閉じる方法
  4. 【エクセルVBA】テキストボックスのプロパティで入力を便利にしよう
  5. 【エクセルVBA】テキストボックスでよく使う3つのイベントを使ってみよう
  6. 【エクセルVBA】Initializeイベントでワークシートの値をユーザーフォームの初期値にセットする
  7. 【エクセルVBA】AfterUpdateイベントでテキストボックス同士を連動させてみよう

タイトルとURLをコピーしました