【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プロパティを使用して、文字列を取得しています。
テキストボックスの文字フォントを設定する方法
ここからはテキストボックスの文字フォントを指定する方法を紹介します。
テキストボックスの文字色を指定する方法
Sub TextBoxColor1()
'テキストボックスのすべての文字色を指定
With ActiveSheet.Shapes(1)
.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = vbRed
End With
End Sub
サンプルコードを実行すると、テキストボックス内のすべての文字の色を指定できます。
TextRangeオブジェクトからFont.Fill.ForeColor.RGBとプロパティをたどっていく必要があります。
とはいえ記憶する必要はないのでこのコードをコピーして使ってしまいましょう。
vbRedなどの文字色の指定方法については下記の記事で詳しく紹介しています。
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
サンプルコードのようにすることで太文字、斜体、文字サイズ、文字フォントを設定することができます。