VBAで結合セルの行の高さを自動調整する

 結合セルの問題点は行の高さが自動設定されないこと

Excelで結合セルに文章を書くことがあります。
表や説明文などが組み合わさった資料の場合には重宝する機能です。

ところがこの結合セルには難点があります。
その一つが行の高さが自動設定されないことです。

結合していない状態のセルの場合、折り返し設定をしていれば文字数に合わせて行の高さが自動設定されます。
ところが結合セルの場合は行の高さを自動設定してくれず、はみ出している部分は表示から消えてしまいます。

VBAを使わない場合の解決方法は手作業しか無い

解決方法は1つしかありません。
手で行の高さを変えるしかありません。

結合していないセルであれば、行の線をダブルクリックすると適切な高さに自動設定されますが結合セルにはそれも使えません。

結局は手で行の高さの数値を入力するか、行の高さの線をドラッグして移動させるかの手作業の方法しかありません。

しかも、いずれの場合も完全に手動でやるしかないため、自動設定された場合と同じ高さにしたい場合や印刷範囲が気になる場合には、事前に自動設定した場合の高さを調べてそれを入力するか手で高さの線をそこまで移動させるかしかなく、とても手間がかかることになります。


マクロの処理概要

以下のマクロはそういう不便な結合セルの高さを自動設定するものです。
複数の結合セルを選択して実行することも可能です。
一般的には横に結合したセルが多いため、主に横結合したセルを対象としたマクロですが、縦に結合したセルでも利用できます。もちろん、結合していない普通のセルの高さも自動設定します。

処理の概要は以下の流れになります。

  1. 結合セルの列幅を記憶する。
  2. セルの結合を解除する。
  3. 解除後のセルの列幅を、結合時の列幅に変更する。
  4. 通常セルの状態になっているため、自動設定して行の高さを適切なサイズに設定する。
  5. 自動設定された行の高さを記憶する。
  6. 再度セル結合を行い、記憶していた行の高さを再度設定する。

印刷対応は通常のExcelと同様で、大体の場合は出来てます

Excelでは画面ではちゃんと全部の文字が表示されていたのに印刷時に切れてしまうバグがあります。

この自動調整マクロを実行した場合はどうなるかというと、印刷したらちゃんと全部の文字が表示されるのかが心配になりますが、大体表示されます。

大体、というのはExcelの仕様通り、という意味で、もしちゃんと印刷されない場合はマクロの使用するしないに関わらず、それ以前に結合セルでない普通のセルでもちゃんと印刷されません。

これはExcelのバグもそのままこのマクロに取り込まれているためで、そこはご了承ください。

同じ行に別の結合セルがあった場合

このマクロには認識はしているのですが入れていない処理があります。

それは、同じ行に結合セルが他にもあった場合、そちらの行の高さを無視して設定してしまう点です。

実は、このマクロを思いついたときは同じ行の他の結合セルのチェック処理は入れるつもりでした。

しかし実際に使ってみると、チェック処理がなくても全く不便なことがなく、自分で使う分には「他に結合セルがあるか目で見れば分かるからいいや」と思い、チェック処理を入れませんでした。知人にも使ってもらい、チェック処理について聞いてみましたが、「いや、いらんくね?十分じゃね?」とのことでした。

同じ行の他の結合セルのチェック処理を入れてもいいのですが、多くの場合はそのチェック処理は無用の処理になるため処理時間が掛かることの欠点の方が多いと感じたのもあります。

普通に使う分には問題ないと思います。実際私も問題なく利用できています。
ごくまれに他の列に結合セルがある場合があるのですが、すぐに気が付きます。
他の列に結合セルがあった場合は、そちらでもこのマクロを実行すればすぐにどちらの高さを選択すればいいのかが分かります。

ソースコード

以下がコードになります。関数が5つありますが、1つ目の関数が実行する関数になります。残り4つは内部で呼び出される関数です。

マクロの使い方

縦の結合

縦に結合したセルに文字を入力します。以下の例では文字数がセル幅より長いのですが、高さの自動調整が行われず文字が途中で切れています。

文字を入力後、結合セルを選択して上記マクロ「結合セルの行高さ自動設定()」を実行します。実行後、高さが自動的に調整されます。

選択している複数行のうち、先頭行の高さが調整されます。残りの行の高さは変わりません。

横の結合

横に結合したセルに文字を入力します。縦の場合と同様、文字が途中で切れています。

上記「結合セルの行高さ自動設定()」を実行後、高さが自動調整されます。

是非活用してください。

関連記事

サブコンテンツ

このページの先頭へ