図形内のテキストが変な位置で改行されてしまうことがよくあります。

「もうちょっと余白あるじゃん!!」
って思ってしまうやつですね(´∀`;)
実はこの改行は割と簡単に制御でき、
- 「テキストを図形からはみ出して表示する」をチェック
- 「図形内でテキストを折り返す」のチェックを外す
この2つの設定を行うことで不要な改行をある程度抑えることができます。

余白をギリギリまで使うとなると上下左右の余白を0にしたくなりますが、
「はみ出して表示」の方が本当にギリギリまで使ってくれます。
(というか余白が足りなくても設定どおりはみ出します)
また「テキストを折り返す」設定についても、
これを外してもEnterで入れた本当の改行はちゃんと表示されます。
この2つの設定は便利ですので知らなかった方はこの機会に覚えてしまってください。
さてこの設定、もう全部の図形がデフォルトでこうなっていてほしいくらいなので、
これを一括で設定するマクロを作ってしまいましょう。
本マクロはExcel起動時に裏で開かれる「個人用マクロブック」などに搭載して使ってください。
リボンやツールバーに登録すれば1クリックになりますし、
ショートカットキーへの登録も便利です。
ソースコード
Sub 選択中の図形に改行制御を設定をする() ' 選択しているのが図形でなければExit On Error Resume Next Dim 選択ShapeRange As ShapeRange Set 選択ShapeRange = Selection.ShapeRange If 選択ShapeRange Is Nothing Then Exit Sub On Error GoTo 0 ' Selection内の全Shapeをループ Dim 選択Shape As Shape For Each 選択Shape In 選択ShapeRange ' 文字書式を設定 With 選択Shape If .TextFrame2.HasText Then .TextFrame.VerticalOverflow = xlOartVerticalOverflowOverflow ' 縦はみだしON .TextFrame.HorizontalOverflow = xlOartHorizontalOverflowOverflow ' 横はみだしON .TextFrame2.WordWrap = msoFalse ' 折り返しOFF End If End With Next End Sub
解説
「テキストを図形からはみ出して表示する」の設定は、
TextFrameオブジェクトのVerticalOverflow/HorizontalOverflowプロパティ。
「図形内でテキストを折り返す」の設定は、
TextFrame2オブジェクトの.WordWrapプロパティで設定できます。
「はみ出して表示」の方は、Excelでは単体の設定ですが、
VBAでは水平・垂直の2つの設定ができる面白い仕様ですね。
これらのプロパティに関する詳しい解説はこちらをご覧ください。
www.limecode.jp
これらの機能はShapeオブジェクトのプロパティたちですが、
SelectionはそのままFor EachするとShapeオブジェクトを取得できません。
' ↓こう書くことはできない Dim シェイプ As Shape For Each シェイプ In Selection
Selection内の図形をShape型として取得したい場合は、
上記のように一旦ShapeRangeオブジェクトに変換してからループします。
ShapeRangeプロパティはSelectionが図形かどうかの判定にも使えるため、
セルを選択時のExitにも使用できて一石二鳥ですね。
この仕様の詳しい解説はこちらの記事をご覧ください。
あとはグラフや写真を選択しているとエラーになってしまうため、
「HasTextプロパティ」でテキストが設定可能な図形だけに実行しています。
これで一応エラーは起きないはずですが、
Selectionは予期せぬエラーが起きることも多いため、
それを無視したい場合はOn Error Resume Nextを全体に適用してください。
あわせて使用すると便利なマクロ
今回のマクロは「選択した図形に対して実行」するものですので、
複数の図形を選択する機能と組み合わせて使うと便利です。
ひとまず「すべての図形にこの設定をしたい」場合は、
「どれか1つ図形を選択してCtrl+A」で全図形を選択できます。
知らなかった方はこの機会に覚えてしまってください。
前述の通り写真やグラフが混じっていてもエラーにはなりませんので、
このマクロは適当にすべての図形を選んで実行しても大丈夫です。
全図形ではなく特定の図形群にのみ実行したい場合は、
「選択中のセル範囲と被っている図形をすべて選択するマクロ」
と併用するのが便利です。
以下の記事で紹介していますので、
もしよければご一緒にお持ち帰りください。
www.limecode.jp