【エクセルVBA】TextFrameオブジェクトとCharactersオブジェクトでテキストボックスを操作してみよう!

eyecatch,textframe

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

エクセルで資料を作るときに何かと使うテキストボックス。

便利で気軽にワークシートに追加できるのですが、数が多くなると手動でテキストを更新するのが少々面倒になりますよね。

VBAを使えば、その面倒臭さが軽減できるかもしれませんよ。

ということで今回は、エクセルのテキストボックスをVBAで操作する方法をご紹介します。

スポンサーリンク

テキストボックスを操作する

TextFrameオブジェクトを取得する

テキストボックスを操作するには、TextFrameオブジェクトを取得します。

TextFrameオブジェクトは、Shapeオブジェクトの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メソッドで取得します。

記述方法はこちら。

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で更新できれば、この面倒さを軽減できますね。

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

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