【VBAリファレンス|実務向け】タイトル行を除いて表の列幅を自動調整する|Excel VBA

スポンサーリンク

1. 導入:なぜこのテクニックが必要なのか

実務で作成するExcel帳票には、表の上に「売上管理表」のようなタイトルや、日付、担当者名などの情報が記載されていることがよくあります。VBAで列幅を自動調整しようとして「Columns(“A:C”).AutoFit」と記述すると、タイトル行の長い文字列まで考慮されてしまい、肝心の表部分の列幅が広がりすぎて不格好になるという経験はありませんか?
本記事では、特定の範囲だけを基準にして列幅を最適化し、見栄えの良いレポートを自動生成するためのテクニックを解説します。

2. 基礎知識:AutoFitメソッドの仕組み

Excel VBAにおける列幅の自動調整には、AutoFitメソッドを使用します。
通常、Columns(“A:C”).AutoFit と書くと、A列からC列にあるすべてのデータを見て、最も幅の広いセルに合わせて調整されます。
重要なのは、AutoFitは「指定した範囲が含む列全体」に対して実行されるという点です。つまり、Range(“A3:C14”).Columns.AutoFit と記述すれば、A3:C14の範囲に含まれる列(A列、B列、C列)を対象として、「A3からC14の範囲内のデータのみ」を基準に列幅が調整されます。これにより、1行目や2行目にあるタイトル等の文字列は無視される仕組みです。

3. 実装/解決策:特定の範囲を基準にする

実務で最も汎用性が高いのは、データ範囲を明示的に指定する方法です。また、表の範囲が可変する場合は、CurrentRegionプロパティを組み合わせることで、データが追加されても自動的に範囲を追従させることが可能です。

4. サンプルプログラム

以下のコードを標準モジュールに貼り付けて実行してください。

Sub AdjustColumnWidth()
‘ 対象とするシートを指定
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(“Sheet1”)

‘ 方法1:範囲を直接指定する場合
‘ タイトルを除いたデータ部分(A3:C14)のみを基準に調整
ws.Range(“A3:C14”).Columns.AutoFit

‘ 方法2:データが動的に増える場合(推奨)
‘ 表の左上端(A3)から連続している領域を自動取得して調整
‘ これにより、データ行数が増減しても対応可能です
ws.Range(“A3”).CurrentRegion.Columns.AutoFit

MsgBox “列幅の調整が完了しました。”
End Sub

5. 応用・注意点:現場で陥りやすい罠

・CurrentRegionの注意点
CurrentRegionは「空白行・空白列」で囲まれた範囲を自動選択します。もし表の中に空行や空列があると、そこで範囲が途切れてしまいます。確実に調整したい場合は、あらかじめ範囲を特定する(方法1)方が安全です。

・最小列幅の設定
AutoFitは便利ですが、あまりにも短い文字列ばかりだと列が細くなりすぎてしまうことがあります。その場合は、AutoFitを実行した後に、ws.Columns(“A:C”).ColumnWidth = 10 のように、特定の列幅を指定して微調整するコードを併記すると、よりプロフェッショナルな帳票に仕上がります。

実務では「見た目」も重要な機能の一つです。ぜひこのテクニックを活用して、自動化の精度を一段階引き上げてください。

タイトルとURLをコピーしました