こんにちは、Ryoです。
Excelで使用頻度も高いテキストボックスですが、VBAでAddTextBox使ってワークシート上に作成し文字を表示、且つ表示位置やサイズまで指定出来ますので、処理上の用途に応じて指定位置に表示出来ますから知っていると便利です。
今回はその方法について書いていきたいと思います。
1.サンプルコード
冒頭でも書きました通り、AddTextBoxを使いますが、構文としては以下の様になります。
AddTextBox(引数,Left,Top,Width,Height)
≪引数≫
| 引数 | 説明 |
| msoTextOrientationDownward | 右へ90°回転 |
| msoTextOrientationHorizontal | 水平方向 |
| msoTextOrientationHorizontalRotateFarEast | 横書き |
| msoTextOrientationUpward | 左へ90°回転 |
| msoTextOrientationVertical | 垂直方向 |
| msoTextOrientationVerticalFarEast | 縦書き |
これらの引数を指定して文字列の向きを設定します。
≪位置、サイズ≫
- Left・・・ワークシート左端からの位置
- Top・・・ワークシート上端からの位置
- Width・・・テキストボックスの幅
- Height・・・テキストボックスの高さ
これらを使ってワークシートにテキストボックスを作成し、TextFrameプロパティ(.TextFrame.Characters.Text)で文字列を入力する形になります。
◆右へ90°回転
Sub Sample1()
Dim TxtSample As Shape
'文字の向きを「右へ90°回転」
Set TxtSample = Worksheets("Sheet1").Shapes _
.AddTextbox(msoTextOrientationDownward, 50, 50, 60, 65)
'テキストボックスに文字追加
TxtSample.TextFrame.Characters.Text = "右へ90°回転サンプル"
End Sub
このコードを実行するとシート状にこの様なテキストボックスが作成されます。

表示する上で幅や高さはWidth,Heightで適切な数値を入れるのですが、面倒な場合は
AutoSizeを使って指定することも出来ます。
Sub Sample1()
Dim TxtSample As Shape
'文字の向きを「右へ90°回転」
Set TxtSample = Worksheets("Sheet1").Shapes _
.AddTextbox(msoTextOrientationDownward, 50, 50, 0, 0)
'**AutoSizeを使う場合はWidth,Heightは自動調整の為、0でも可
'テキストボックスに文字追加
TxtSample.TextFrame.Characters.Text = "右へ90°回転サンプル"
'テキストボックス枠に収まるように自動サイズ調整
TxtSample.TextFrame.AutoSize = True
End Sub
この状態で実行すると、このように自動調整されますので指定はLeft、Topの表示位置だけで済みますから用途に応じて使い分けると良いと思います。

◆水平方向
Sub Sample2()
Dim TxtSample As Shape
'文字の向きを「水平方向」
Set TxtSample = Worksheets("Sheet1").Shapes _
.AddTextbox(msoTextOrientationHorizontal, 120, 50, 100, 20)
'テキストボックスに文字追加
TxtSample.TextFrame.Characters.Text = "水平方向サンプル"
'自動サイズ調整はコメントにしておきます。
'必要に応じてご使用ください。
'TxtSample.TextFrame.AutoSize = True
End Sub
一番使用頻度が多いと思われるものですね。

◆横書き
Sub Sample3()
Dim TxtSample As Shape
'文字の向きを「横書き」
Set TxtSample = Worksheets("Sheet1").Shapes _
.AddTextbox(msoTextOrientationHorizontalRotatedFarEast, 230, 50, 50, 70)
'テキストボックスに文字追加
TxtSample.TextFrame.Characters.Text = "横書きサンプル"
'自動サイズ調整はコメントにしておきます。
'必要に応じてご使用ください。
'TxtSample.TextFrame.AutoSize = True
End Sub

◆左へ90°回転
Sub Sample4()
Dim TxtSample As Shape
'文字の向きを「左へ90°回転」
Set TxtSample = Worksheets("Sheet1").Shapes _
.AddTextbox(msoTextOrientationUpward, 300, 100, 30, 120)
'テキストボックスに文字追加
TxtSample.TextFrame.Characters.Text = "左へ90°回転サンプル"
'自動サイズ調整はコメントにしておきます。
'必要に応じてご使用ください。
'TxtSample.TextFrame.AutoSize = True
End Sub

◆垂直方向
Sub Sample5()
Dim TxtSample As Shape
'文字の向きを「垂直方向」
Set TxtSample = Worksheets("Sheet1").Shapes _
.AddTextbox(msoTextOrientationVertical, 350, 50, 90, 120)
'テキストボックスに文字追加
TxtSample.TextFrame.Characters.Text = "垂直方向サンプル"
'自動サイズ調整はコメントにしておきます。
'必要に応じてご使用ください。
'TxtSample.TextFrame.AutoSize = True
End Sub
この指定では幅を一定以上取らないと文字が上手く表示されないようなので、下の画像の様に広くなっています。

◆縦書き
Sub Sample6()
Dim TxtSample As Shape
'文字の向きを「縦書き方向」
Set TxtSample = Worksheets("Sheet1").Shapes _
.AddTextbox(msoTextOrientationVerticalFarEast, 200, 50, 50, 70)
'テキストボックスに文字追加
TxtSample.TextFrame.Characters.Text = "縦書きサンプル"
'自動サイズ調整はコメントにしておきます。
'必要に応じてご使用ください。
'TxtSample.TextFrame.AutoSize = True
End Sub

これらサンプルコードの通り、ワークシートにテキストボックスを作成し文字を表示すること自体は簡単ですので、知っていると処理の幅が広がると思います。
今回のサンプルは文字列の表示方向を示す為にAutoSizeを無効にした状態で画像を撮っていますが、実使用上は便利なのでAutoSizeも使う機会が多いです。
以上、シートにテキストボックスを作成し文字表示する内容についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo

