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

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

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