「excel vba テキストボックス内 一括消去」
「エクセルvba テキストボックスを空にする」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。
Excel VBAを使って、テキストボックス自体は残して、
テキストボックス内の文字列を削除するには、どのようなコードを書けばいいのかを探していた方による検索キーワードでしょうか。
2007以降のExcelでは、テキストボックスなどのShape内の文字列を取得するオブジェクトモデルは、大きく分類すると2つ存在しています。
CharactersオブジェクトのTextプロパティを使う方法と、
TextRange2オブジェクトのTextプロパティを使う方法です。
ここでは参考になりそうなマクロを、それぞれご紹介しておきます。
Charactersオブジェクトを利用してテキストボックス内の文字列を削除するサンプルマクロ
一つ目はCharactersオブジェクトのTextプロパティを利用して、テキストボックス内の文字列を削除するマクロです。
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
If shp.Type = msoTextBox Then
shp.TextFrame.Characters.Text = ""
End If
Next
End Sub
上記のマクロを実行すると、アクティブなシート上のテキストボックスの文字列が削除されます。
アクティブなシート上のすべてのShapeに対してFor Each~Nextループを回して、
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
テキストボックスだったときに、
If shp.Type = msoTextBox Then
文字列を削除しています。
shp.TextFrame.Characters.Text = ""
TextFrameオブジェクトのCharactersメソッドで、Charactersオブジェクトを取得して、
CharactersオブジェクトのTextプロパティに空白文字列を設定することで、
文字列を削除しています。(ちなみにCharactersオブジェクトは、複数形の単語がオブジェクト名となっているだけで、コレクションではありません。)
TextRange2オブジェクトを利用してテキストボックス内の文字列を削除するサンプルマクロ
二つ目はTextRange2オブジェクトのTextプロパティを利用して、テキストボックス内の文字列を削除するマクロです。
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
If shp.Type = msoTextBox Then
shp.TextFrame2.TextRange.Text = ""
End If
Next
End Sub
マクロ全体の作りは、先ほどのCharactersオブジェクトを利用したマクロと同じですが、文字列を削除するオブジェクト式が、
shp.TextFrame2.TextRange.Text = ""
と、異なっています。
TextFrame2オブジェクトのTextRangeプロパティで、TextRange2オブジェクトを取得して、
TextRange2オブジェクトのTextプロパティに空白文字列を設定することで、
文字列を削除しています。
TextFrame2オブジェクトの、TextRangeプロパティでTextRange2オブジェクトを取得する部分が、オブジェクト式的にはネックでしょう。
プロパティの名前と返されるオブジェクトの名前が、似ているけれど違うのが、オブジェクトモデルが理解できていない方にとって厄介なはずです。
この部分は、自分の手でオブジェクトブラウザーを確認したり、オブジェクトの階層関係図を自分で書くことを繰り返したりして、理解するしかありません。(もしも、もっと簡単に納得できる方法があるのならば、私が教えてほしいくらいです。)
最終更新日時:2022-08-04 15:38
Home » エクセルマクロ・Excel VBAの使い方 » 図形内文字列 » VBAでテキストボックス内の文字列を削除-Characters.Text・TextRange2.Text