11/15/2020

Excel。VBAで、列幅を調整するには、色々な方法があるんです。【Column width】

Excel。VBAで、列幅を調整するには、色々な方法があるんです。

<Excel VBA:列幅>

Excelに、CSVファイルやテキストファイルをインポート(読み込み)したあとに、列幅を調整したい場合、色々な方法があって、知らないと不便に感じることがあります。


次のサンプルデータを用意しました。


A列とF列は同じデータです。

説明しますと、この後の処理を実施した後と比べやすいように、列幅を「10」で設定しております。


J列とK列は同じデータです。

こちらは列幅を、「15」で設定しております。


では、次のExcel VBAプログラムを実行してみます。

Sub 列幅()

    Columns("j:k").AutoFit

    Columns("k:k").ColumnWidth = Columns("k:k").ColumnWidth + 1

    Range("a1").EntireColumn.AutoFit

    Range("f4").Columns.AutoFit

End Sub


実行した結果です。


列幅が色々と変化したことが確認できます。

では、どのExcel VBAプログラム文の結果このようになったのかを見ていきましょう。


1行目の、

Columns("j:k").AutoFit

このプログラム文を実行すると、J列とK列の列幅を自動調整することができます。

Columnsは、列のことですね。

Columns("j:k")なので、J列~K列という意味ですね。


AutoFiメソッドを使うことで、列幅を自動調整することができます。

とてもわかりやすいメソッドの一つですね。


しかし、列幅を自動調整できっちり狭めてしまうと印刷時に、見切れてしまうことがあります。

とくに、罫線を設定したりすると、発生しやすくなりますね。


そこで、2行目のプログラム文を知っていると微調整することができるようになります。


2行目

Columns("k:k").ColumnWidth = Columns("k:k").ColumnWidth + 1


Columns("k:k")はK列を指定しています。

Columns("k")ではないので、注意しましょう。


ColumnWidthプロパティを使うことで、列幅を設定することができます。


今回の、右辺。

Columns("k:k").ColumnWidth + 1

これは、今のK列の幅を、1文字分(プロポーショナルフォントの1文字分)を「+(プラス)」することができます。


また、列幅を20にしたい場合には、

Columns("k:k").ColumnWidth =20

とすることで、列幅を20で設定することもできます。


3行目のプログラム文を見ていきましょう。

Range("a1").EntireColumn.AutoFit


1行目の「Columns("j:k").AutoFit」と似ていますが、結果が異なっています。


AutoFitさせている対象が列ではなくて、Range("a1")に入力されている文字数に合わせることができます。


A1には、「東京都店舗一覧表」と文字数が多いので、列幅が見出しのNOのデータよりも広くなってしまいました。

結果的には、A列をAutoFitさせたのと変わりません。


このセルの文字数で自動調整するのは、効率的ではないのかもしれませんね。

A1の文字数が長いからといって、4行目のように、

Range("f4").Columns.AutoFit

とF4を基準とした列幅で調整したとしても、逆に列幅が狭かったりすると、F13のように、「#」と表示されてしまします。


データをインポートしたあとの列幅を調整する必要がある場合には、どの方法を使ったらいいのか、少し考える必要があるのかもしれませんね。