テキストボックス(Shape)の文字列を取得する方法(VBA)

テキストボックス内の情報が取り出せなくて困っていませんか?

困るのも無理ありません
セルと比べてテキストボックスをVBAで扱うのは難易度が高いですから

そんな困りごとを解決するため、簡単に扱えるプログラムを紹介しようと思います。

この記事ではテキストボックス内の文字列を取得するプログラムをお見せします。

テキストボックスの文字列を取得

Sub GetTextBox()
'全てのテキストボックスの文字列⇒Debug.Print

    Dim oneShp As Shape
    For Each oneShp In ThisWorkbook.ActiveSheet.Shapes
        If oneShp.Type = msoTextBox Then'テキストボックスのみ処理
            Debug.Print oneShp.TextFrame2.TextRange.Text
        End If
    Next
End Sub

このプログラムではアクティブシート上にあるテキストボックスの文字列を順番にDebug.Printします。

テキストボックスの文字列を取得しているのは、
oneShp.TextFrame2.TextRange.Textです。

例えば、シート上に順番に書き出していきたいのであればカウンタ変数(row_i)を作って、
cells(row_i,1)=oneShp.TextFrame2.TextRange.Text
row_i=row_i+1
などとアレンジしてみてください。

oneShp.TextFrame2.TextRange.Textの構造は?

この行ではShapeオブジェクトからTextFrame2オブジェクト、TextRangeオブジェクトを取り出しています。

TextFrame2オブジェクト

このオブジェクトには、レイアウト枠の配置や向きを制御するプロパティやメソッドだけでなく、レイアウト枠のテキストが含まれます。 TextFrame2 オブジェクトを取得するには、TextFrame2 プロパティを使用します。

https://docs.microsoft.com/ja-jp/office/vba/api/excel.textframe2

これはテキストのレイアウトのオブジェクトです。

図形などのオブジェクトにテキストを埋め込む場合だと、余白調整などを行うプロパティを保有しています。

TextRangeオブジェクト

図形に付加されたテキスト、およびテキストを処理するプロパティやメソッドが含まれます。

https://docs.microsoft.com/ja-jp/office/vba/api/powerpoint.textrange

これはテキスト自体を処理するためのオブジェクトです。

テキストを処理するためのプロパティ/メソッド(例:Copy/Cut/Delete/Length)を保有しています。

今回はこのオブジェクトのTextプロパティを使用して、文字列を取得しています。

他の「VBA」の記事はこちらからどうぞ

VBA

Posted by やろまい