こんにちは、Ryoです。
VBAを扱っているとユーザーフォームを利用する頻度も多いと思います。その中で使用するテキストボックスは改行出来ない為、複数行入力することが出来ませんがMultiLineプロパティを使うことで可能にすることが出来ます。今回はその内容について書いていこうと思います。
1.サンプル概要
以下画像のUserFormがあり、テキストボックスに文字列が表示されています。
この文字列に対し、任意の場所で「Ctrlキー」+「Enterキー」を押すことで改行することが出来ます。
フォーム内にある「テキストクリア」ボタンはテキストボックス内のデータクリア、「セルへ書込み」ボタンはアクティブセルに書込みます。ちなみに改行した文字列をセルへ書き込んだ場合でも改行された状態になります。
2.UserForm/サンプルコード
サンプルに使用するUserForm構成は以下の通りです。
このユーザーフォームに対し、「ユーザーフォーム初期化時の処理」に複数行入力可の記述を行います。
◆複数行の入力処理
Private Sub UserForm_Initialize() With TextBox1 .Text = "複数行入力サンプル -jizilog.com- " .MultiLine = True End With End Sub
複数行を入力する為には、MultiLineプロパティを使用します。
オブジェクト.MultiLine
このMultiLineプロパティにTrueを指定することで改行(Ctrl+Enter)出来ますので、複数行の入力が可能となります。
◆テキストクリア/書込み処理
次に「テキストクリア」のコマンドボタン1にテキストボックス内にデータをクリアする処理を記述します。
Private Sub CommandButton1_Click() TextBox1 = vbNullString End Sub
これでコマンドボタンを押すと、テキストボックス内のデータがクリアされます。
後は「セルへ書込み」のコマンドボタン2の記述です。
Private Sub CommandButton2_Click() ActiveCell.Value = TextBox1 End Sub
これでサンプル概要に示したユーザーフォームが表示され、テキストボックス内の文字を改行できるようになります。
◆参考
テキストボックス内で改行でき、複数行入力できますので当然ながら入力データが長くなるかと思います。そんな時はテキストボックスにスクロールバーを設定することも出来ます。
設定するにはTextBox1のプロパティ「項目別」タブにあるScrollBarsプロパティになります。
ここで設定する値は4種類あります。
0-fmScrollBarsNone(なし)
1-fmScrollBarsHorizontal(水平方向)
2-fmScrollBarsVertical(垂直方向)
3-fmScrollBarsBoth(垂直&水平方向)
例として「2-fmScrollBarsVertical」を設定して改行していくと、以下画像のように垂直方向にスクロールバーが表示されます。
3.まとめ
VBAで扱うユーザーフォームは用途に応じて色々な形と機能を持たせることが出来ますが、中でもテキスト入力部分は一番活用することが多いと思います。
今回のような複数行入力でのテキストデータは、セルなどへ書込みする際にUserForm上に表示されている1行ごとの文字数が、そのまま出力できるので後で体裁を整える手間が省けます。知っておくと何かと役に立つ場面も多いと思いますので、機会があればぜひご活用くださいませ!
以上、ユーザーフォーム(TextBox)複数行入力を可能にする方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo