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
結構シンプルな印象にかわりましたね。