【VBA】テキストボックスの値を取得する方法/フォントを設定する方法

2022年11月5日

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

困るのも無理ありません
セルと比べてテキストボックスを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プロパティを使用して、文字列を取得しています。

テキストボックスの文字フォントを設定する方法

ここからはテキストボックスの文字フォントを指定する方法を紹介します。

テキストボックスの文字色を指定する方法

テキストボックスの文字色を指定する方法(すべての文字色を指定)
Sub TextBoxColor1()
    'テキストボックスのすべての文字色を指定
    
    With ActiveSheet.Shapes(1)
        .TextFrame2.TextRange.Font.Fill.ForeColor.RGB = vbRed
    End With
    
End Sub

サンプルコードを実行すると、テキストボックス内のすべての文字の色を指定できます。

TextRangeオブジェクトからFont.Fill.ForeColor.RGBとプロパティをたどっていく必要があります。

とはいえ記憶する必要はないのでこのコードをコピーして使ってしまいましょう。

vbRedなどの文字色の指定方法については下記の記事で詳しく紹介しています。

テキストボックスの文字色を指定する方法(1文字ずつ文字色を指定)
Sub TextBoxColor2()
    'テキストボックスの文字色を1文字ずつ
    
    With ActiveSheet.Shapes(1)
        .TextFrame2.TextRange.Characters(1).Font.Fill.ForeColor.RGB = vbRed
        .TextFrame2.TextRange.Characters(2).Font.Fill.ForeColor.RGB = vbGreen
        .TextFrame2.TextRange.Characters(3).Font.Fill.ForeColor.RGB = vbYellow
        .TextFrame2.TextRange.Characters(4).Font.Fill.ForeColor.RGB = vbBlue
        .TextFrame2.TextRange.Characters(5).Font.Fill.ForeColor.RGB = vbMagenta
    End With
    
End Sub

サンプルコードを実行すると、テキストボックス内の文字色を1文字ずつ指定できます。

先ほどのすべての文字色を指定するコードと比べると、TextRangeの後にCharacters(1)が追加されています。

このCharactersメソッドはテキストボックスの1文字分のオブジェクトを返してくれます。

Characters(1)とすれば1文字目の、Characters(2)とすれば2文字目のオブジェクトを取得できます。

その1文字のオブジェクトに対して、文字色を設定しているというわけです。

この後紹介する他のフォント設定する場合においても、Charactersメソッドを使えば1文字ずつフォントを設定することができます。

テキストボックスの文字フォントを設定する方法(太文字/斜体/サイズ/フォント)

Sub TextBoxFont()
    'テキストボックスの文字フォント設定
    
    With ActiveSheet.Shapes(1).TextFrame2.TextRange.Font
        .Bold = True '太文字
        .Italic = True '斜体
        .Size = 20 '文字サイズ
        .NameFarEast = "MS Pゴシック" '文字フォント
    End With
    
End Sub

サンプルコードのようにすることで太文字、斜体、文字サイズ、文字フォントを設定することができます。

VBAが難しいと感じたら
プロにお任せして代わりに作ってもらってはいかがでしょう?
VBAの作成依頼はこちらから

《VBA中級者向けの本》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。

created by Rinker
技術評論社
¥3,608 (2022/12/08 14:44:42時点 Amazon調べ-詳細)

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

VBA

Posted by やろまい