皆様こんにちは、ノグチです。
エクセルで資料を作るときに何かと使うテキストボックス。
便利で気軽にワークシートに追加できるのですが、数が多くなると手動でテキストを更新するのが少々面倒になりますよね。
VBAを使えば、その面倒臭さが軽減できるかもしれませんよ。
ということで今回は、エクセルのテキストボックスをVBAで操作する方法をご紹介します。
テキストボックスを操作する
TextFrameオブジェクトを取得する
テキストボックスを操作するには、TextFrameオブジェクトを取得します。
TextFrameオブジェクトは、ShapeオブジェクトのTextFrameメソッドで取得することができます。
記述方法はこちら。
TextFrameオブジェクトのプロパティ
TextFrameオブジェクトのプロパティには、このようなものがあります。
プロパティ名 | 指定する内容 | 指定する定数 |
---|---|---|
HorizontalAlignment | テキストの水平方向の表示位置を定数または数値で設定します。 | xlHAlignLeft(左揃え)、xlHAlignRight(右揃え)、xlHAlignCenter(中央揃え) |
VerticalAlignment | テキストの垂直方向の表示位置を、定数または数値で設定します。 | xlVAlignBottom(下揃え)、xlVAlignCenter(上下中央揃え)、xlVAlignTop(上揃え) |
MarginBottom | テキストボックスの下余白のポイントを数値で指定します。 | – |
MarginLeft | テキストボックスの左余白のポイントを数値で指定します。 | – |
MarginTop | テキストボックスの上余白のポイントを数値で指定します。 | – |
MarginRight | テキストボックスの右余白のポイントを数値で指定します。 | – |
例えば、ワークシート上にある「テキストボックス1」というテキストボックスを操作したい場合、このようなコードになります。
Sub Text_Box_Change() With ActiveSheet.Shapes("テキスト ボックス 1").TextFrame .HorizontalAlignment = xlHAlignRight .VerticalAlignment = xlVAlignCenter End With End Sub
Charactersオブジェクトでテキストを操作
TextFrameオブジェクトが取得できたところで、テキストボックス内のテキストを更新してみましょう。
テキストボックス内のテキストは、Charactersオブジェクトを取得することで変更することができます。
Charactersオブジェクトは、TextFrameオブジェクトのCharactersメソッドで取得します。
記述方法はこちら。
そしてCharactersオブジェクトの主なプロパティはこちら。
プロパティ | 設定する内容 |
---|---|
Text | テキストボックス内の、指定した範囲の文字列を設定します。 |
Font | テキストボックス内の文字列のフォントを設定します。 |
Count | テキストボックス内のテキストの数をカウントします。 |
Caption | テキストボックス内で指定した範囲の文字列を取得します。 |
テキストボックスのテキストを更新してみる
テキストボックスと、テキストボックス内のテキストを更新する方法をご紹介したところで、実際にこちらのテキストボックスのテキストを更新して、上下中央揃え、右揃え表記にしてみましょう。
Sub Text_Box_Change() With ActiveSheet.Shapes("テキスト ボックス 1").TextFrame .Characters.Text = "テキスト更新!" .HorizontalAlignment = xlHAlignRight .VerticalAlignment = xlVAlignCenter End With End Sub
ワークシート上にあるテキストボックスのテキストを、「テキスト更新!」に変更して、中央揃え、右揃え表記にする、というコードです。
テキストの一部を更新することもできる
上のCharactersオブジェクトのTextプロパティの説明の中で、「指定した範囲の文字列を設定します。」と書いていますよね。
この範囲という言葉の通り、テキストボックス内のテキストの一部を変更することもできます。
Charactersオブジェクトのパラメータに、範囲を開始する文字の位置と文字列の長さを指定することで、その範囲のテキストだけを更新することができますよ。
たとえば、こちらのテキストボックスのテキストのうち、「★★★」の部分だけを更新する場合。
こんなコードになります。
Sub Text_Change_Length() With ActiveSheet.Shapes("テキスト ボックス 1").TextFrame .Characters(5, 3).Text = "TEXT" End With End Sub
こちらのコードを実行すると…
このように、Charactersオブジェクトのパラメータで指定した範囲だけ、変更されていますね。
最後に
今回は、エクセルのテキストボックスをVBAで操作する方法をご紹介しました。
テキストボックスのテキスト更新は、手動でやるとなかなか面倒ですよね。数が増えればなおさら大変です。
VBAで更新できれば、この面倒さを軽減できますね。
それでは、最後までお読みいただきありがとうございました!