1/24/2022

Excel。VBA。データに「#」があるので、少し余白をもたせて列幅調整をしたい。【Column width】

Excel。VBA。データに「#」があるので、少し余白をもたせて列幅調整をしたい。

<Excel VBA>

大量なデータを読み込んだら、列幅が狭くて「#」で表示されているとします。


一目でわかるぐらいのデータ量ならば、列幅を広げないといけないと判断できますが、データ量が増えるとそういうわけにもいきません。


また、印刷することも考えると、セル内余白というか、列幅の自動調整では、印刷時見切れてしまう恐れがあります。


このようなことから、自動調整した列幅を少し広げた状態にしたいわけです。


列幅をまとめて自動調整することは、簡単ですが、少し列幅を広げる作業は、面倒な作業だといえます。


そこで、Excel VBAでマクロをつくって対応してみましょう。

次のようなデータを用意しました。


Excel VBAのプログラム文を以下のように作ってみました。


Sub 列幅調整()

    Dim i As Long

    For i = 1 To Range("a1").CurrentRegion.Columns.Count

        Range("a1").CurrentRegion.Columns(i).EntireColumn.AutoFit

        Range("a1").CurrentRegion.Columns(i).ColumnWidth = Range("a1").CurrentRegion.Columns(i).ColumnWidth + 2

    Next

End Sub

まずは、実行してみましょう。


このように、D列の「#」がなくなり、すべての列幅が、自動調整よりも少し広がったのが確認できます。


では、プログラム文を確認しておきましょう。

まずは、変数宣言ですね。

Dim i As Long


プログラム文の処理本体が、For To Next文です。

For i = 1 To Range("a1").CurrentRegion.Columns.Count

    Range("a1").CurrentRegion.Columns(i).EntireColumn.AutoFit

    Range("a1").CurrentRegion.Columns(i).ColumnWidth = Range("a1").CurrentRegion.Columns(i).ColumnWidth + 2

Next


説明の為、With文をつかわないでいます。

For文なので、繰り返し処理をさせています。

何回繰り返すのかというと、

Range("a1").CurrentRegion.Columns.Count


A1を起点とした連続したセル(CurrentRegion)。

つまり表の列数(Columns.Count)を算出しています。

これで、この表が何列の表なのかがわかりました。


その回数まで繰り返し処理を行うわけです。


Range("a1").CurrentRegion.Columns(i).EntireColumn.AutoFit

Columns(i).EntireColumn.AutoFit は、列幅を自動調整しています。(AutoFit)


自動調整することで「#」で見えなくなっているデータも見えるようになります。


Range("a1").CurrentRegion.Columns(i).ColumnWidth = Range("a1").CurrentRegion.Columns(i).ColumnWidth + 2


Columns(i).ColumnWidthは、「Width」なので、列幅ですね。


この列幅を「ColumnWidth + 2」。つまり、2文字分広げるようにします。


「+2」は目分量なので、増やしたい時には、数値を増減させます。


これで、セル内余白というか、印刷時に見切れる可能性を抑制できます。


プログラム文も多くないので、事前につくっておくといいかもしれませんね。


なお、「Range("a1").CurrentRegion」が何度も登場します。

わかりにくいのと、入力が面倒なので、With文をつかうと、よりシンプルにすることができます。


下記は、With文をつかった、ブログラム文です。


Sub 列幅調整with文()

    Dim i As Long

    With Range("a1").CurrentRegion


    For i = 1 To .Columns.Count

        .Columns(i).EntireColumn.AutoFit

        .Columns(i).ColumnWidth = .Columns(i).ColumnWidth + 2

    Next

    End With

End Sub


結構シンプルな印象にかわりましたね。