はじめに
VBAのユーザーフォームで、住所や備考欄のように、ユーザーに複数行にわたる自由な文章を入力してもらいたい場合があります。デフォルトのテキストボックスは一行しか入力できませんが、いくつかのプロパティを設定するだけで、簡単に複数行入力に対応させることが可能です。
この記事では、テキストボックスで改行を有効にし、複数行のテキスト入力や表示を可能にするための主要なプロパティと、その設定方法を分かりやすく解説します。
複数行テキストボックスの設定サンプルコード
複数行入力に関連する設定は、主にフォームが表示される直前の UserForm_Initialize
イベント内で行います。
この例では、MemoForm
というフォームに配置された Remarks_TextBox
を、複数行入力が可能な備考欄として設定します。
ユーザーフォームのコード
' フォームが初期化されるときに実行されるイベント
Private Sub UserForm_Initialize()
With Me.Remarks_TextBox
' .MultiLine プロパティ: 複数行の入力を有効にする
.MultiLine = True
' .WordWrap プロパティ: 右端での自動折り返しを有効にする
.WordWrap = True
' .EnterKeyBehavior プロパティ: Enterキーでの改行を有効にする
.EnterKeyBehavior = True
' .ScrollBars プロパティ: 必要に応じてスクロールバーを表示する
.ScrollBars = fmScrollBarsVertical
' 初期値を設定(vbCrLfで改行を挿入)
.Text = "【特記事項】" & vbCrLf & "1. "
End With
End Sub
実行前の準備
MemoForm
という名前のユーザーフォームを作成します。- フォーム上に「テキストボックス」を配置し、複数行が収まるように縦に広げておきます。
- テキストボックスの
(Name)
プロパティをRemarks_TextBox
に変更します。 - フォームのコードモジュールに上記のコードを貼り付け、フォームを表示すると、設定が適用された複数行テキストボックスが表示されます。
コード(プロパティ)の解説
.MultiLine = True
これが複数行入力の最も基本となるプロパティです。True
に設定することで、テキストボックスが複数行のテキストを扱えるようになります。これを設定しないと、他のプロパティも機能しません。
.WordWrap = True
テキストがテキストボックスの右端に達したときに、自動的に次の行に折り返すかどうかを設定します。True
であれば、長い文章も枠内に収まるように自動で改行されます。通常は True
に設定すると便利です。
.EnterKeyBehavior = True
ユーザーがテキストボックス内で Enter
キーを押したときの動作を制御します。
True
: テキストボックス内で改行が挿入されます。複数行入力欄としては、こちらが自然です。False
:Enter
キーを押すと、フォームの次のタブオーダーのコントロールにフォーカスが移動します。
.ScrollBars
テキストがテキストボックスの表示領域に収まらない場合に、スクロールバーを表示するかどうかを設定します。
fmScrollBarsNone
: スクロールバーなし(デフォルト)。fmScrollBarsHorizontal
: 水平スクロールバー。fmScrollBarsVertical
: 垂直スクロールバー。fmScrollBarsBoth
: 両方。
MultiLine = True
の場合は、fmScrollBarsVertical
を設定しておくと、長い文章が入力されても対応できるため親切です。
vbCrLf
VBAコード内で文字列を改行したい場合は、改行コードを表す定数 vbCrLf
を使います。"1行目" & vbCrLf & "2行目"
のように文字列を連結することで、テキストボックスの初期値として複数行のテキストを設定できます。
まとめ
今回は、ユーザーフォームのテキストボックスを複数行入力に対応させるための設定について解説しました。
.MultiLine = True
を設定するのが大前提。.WordWrap = True
で自動折り返しを有効にする。.EnterKeyBehavior = True
でEnter
キーによる改行を可能にする。.ScrollBars
で、必要に応じてスクロールバーを追加する。
これらのプロパティを組み合わせることで、ユーザーが自由な形式で文章を入力できる、使いやすい備考欄やコメント欄をフォーム上に作成することができます。