【Excel VBA】セルの内容に合わせて列幅/高さを自動調整する(AutoFitメソッド)|Excel VBA |
Excelで表を作成しているとき、「文字が途中で見切れてしまう」「列幅の調整に時間がかかる」と感じたことはありませんか?
こうした列幅調整の手間は、Excel VBAのAutoFitメソッドで簡単に解決できます。
AutoFitメソッドを使えば、セルに入力されている文字列の長さに合わせて列幅や行の高さを自動で最適化して、表を瞬時に整えることが可能です。たった数行のVBAコードを書くことで、表の可読性を大幅に向上させ、作業時間を大きく短縮できます。Excel作業を効率化したい人にとって、ぜひ覚えておきたいテクニックの一つです。
AutoFitメソッドの構文は次のとおりです。
範囲.AutoFit
指定した列や行に対して、その中で最も長いデータ(列の場合)や、最も高いセル(行の場合)に合わせて、幅や高さを自動的に調整できます。
例1:A列の幅を自動調整します。
Sub AutoFit1()
Columns("A").AutoFit
End Sub
例2:1行目の高さを自動調整します。
Sub AutoFit2()
Rows("1").AutoFit
End Sub
複数の列または行をまとめて指定した場合でも、それぞれの列は最も長いデータに、またそれぞれの行は最も高いセルに合わせて自動的に調整されます。ただし、AutoFitを適用できるのは、列(Columns)または行(Rows)を表すオブジェクトに対してのみである点に注意してください。
例3:A列〜E列の幅を自動調整します。
Sub AutoFit3()
Columns("A:E").AutoFit
End Sub
行の高さも同じように複数行の自動調整ができます。
例4:2行目〜10行目の高さを自動調整します。
Sub AutoFit4()
Rows("2:10").AutoFit
End Sub
列名を数字に置き換えることもできます。以下の例は、1列目〜5列目(A列〜E列)の幅をまとめて自動調整します。
例5:1列目〜5列目の幅を自動調整します。
Sub AutoFit5()
Columns("1:5").AutoFit
End Sub
シート内のすべての列の幅を一括で自動調整することもできます。表の見た目を整えたいときや、レポート出力後の仕上げ処理として活用できるので便利です。ただし、シート全体を対象とするため、データ量が多い場合は処理速度が遅くなる点に注意してください。
例6:すべての列の幅を自動調整します。
Sub AutoFit6()
Columns.AutoFit
End Sub
列の中で特定の範囲のみを基準にして、列幅を自動調整することもできます。
例7:A2〜A5セルを基準にしてA列全体の幅を自動調整します。
Sub AutoFit7()
Range("A2:A5").Columns.AutoFit
End Sub
この場合、基準になるのは「A2〜A5の範囲内で最も長いセル」です。A列で一番長い文字列が入力されているA1セルは、範囲に含まれていないため自動調整の対象になりません。そのため、A2〜A5の中で最も長い文字列が入力されているA4セルの幅に合わせて、A列全体の幅が自動的に調整されます。
<実行前>

<実行後>

A列〜E列を自動調整する操作をマクロの記録機能で実行すると、次のようなコードが生成されます。
Columns("A:E").EntireColumn.AutoFit
EntireColumnプロパティは、指定したセル(または範囲)が属している「列全体」を表すRangeオブジェクトを返すプロパティです。たとえば、特定のセル範囲を基準にして、その列全体を操作したい場合に使用します。ただし、上記のコードでは Columns("A:E") の時点ですでに列A〜E全体を表しているので、EntireColumnを付けなくても同じ結果になります。そのため、可読性の観点から、次のようにシンプルに記述するほうが分かりやすいでしょう。
Columns("A:E").AutoFit
列の幅や行の高さがAutoFitで正しく自動調整されないときは、以下のポイントを確認してみましょう。よくある原因を紹介します。
本記事関連の解説は6分14秒頃からです