Home » エクセルマクロ・Excel VBAの使い方 » DrawingObjects » RectangleやOvalなどから文字列を取得する

RectangleやOvalなどから文字列を取得する

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2010 ビルド13328.20292 Microsoft Store)

「マクロ DrawingObject.Characters.Text」
という検索キーワードでのアクセスに気が付きました。

RectangleやOvalなどのレガシーなオブジェクトを使って、図形に入力されている文字列を取得するコードについて調べていた方による検索です。

このキーワードだけでは何を探していらしたのかまったくわかりませんが、一つお伝えしたいことがあります。

もしもRectangleやOvalなどに入力されている文字列を取得するためだけにCharactersオブジェクトを使っていたのならば、

その必要はないということです。

[スポンサードリンク]

DrawingObjectsから文字列を取得するサンプル

アクティブなシートに、四角形や楕円に文字列を入力した状態で、以下のSubプロシージャを実行してみてください。

Sub DrawingObjectsから文字列を取得する()
 Dim obj As Object
 For Each obj In ActiveSheet.DrawingObjects
  Debug.Print obj.Text
 Next
End Sub

図形に入力されている文字列が、イミディエイトウィンドウに出力されるはずです。

DrawingObject系オブジェクトはTextプロパティを持つ

オブジェクトブラウザーで[非表示のメンバーを表示]オプションをOnにした状態で、RectangleオブジェクトやOvalオブジェクトを確認すると、下図のとおりTextプロパティが存在していることを確認できます。

このTextプロパティを使えば、わざわざCharactersオブジェクトを介してTextプロパティを取得する必要はありません。

基本的にはShapeオブジェクトを使いましょう

なお、RectangleやOvalなどのレガシーなオブジェクトは、Excel VBAを熟知している方が自分一人で使うのはOKですが、組織で複数の人がExcel VBAをメンテナンスする場合、本当にレガシーなDrawingObject系オブジェクト使う必要があるのか、事前にしっかりと検討しましょう。

基本的には、Shapeオブジェクト下のTextFrameオブジェクトまたはTextFrame2オブジェクトの利用をおすすめします。

TextFrameオブジェクトを利用する場合は以下のようなコードで、

Sub TextFrameオブジェクトを経由して文字列を取得する()
 Dim shp As Shape
 For Each shp In ActiveSheet.Shapes
  Debug.Print shp.TextFrame.Characters.Text
 Next
End Sub

TextFrame2オブジェクトを利用する場合は以下のようなコードです。

Sub TextFrame2オブジェクトを経由して文字列を取得する()
 Dim shp As Shape
 For Each shp In ActiveSheet.Shapes
  Debug.Print shp.TextFrame2.TextRange.Text
 Next
End Sub

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » DrawingObjects » RectangleやOvalなどから文字列を取得する

「DrawingObjects」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.