VBAで列幅を自動調整するマクロの作り方【AutoFitの使い方】

 

セルに入力したテキストが見切れてしまう。自動的に調整する方法ってないの?

こんな問題をVBAを使って解決します。

 

結論から言うと、

AutoFitメソッドを使って列幅長調整を自動化する

です。

 

この記事では、AutoFitの使い方と注意点を詳しくご紹介していきます。

列幅を手動で調整している方は是非チェックしてみてください。

 

広告

列幅を自動調整するAutoFitの使い方

AutoFitは列を指定するColumnsと組み合わせて使用します。

自動調整したい列を指定して「.AutoFit」を付け加えるだけで列幅を自動調整することが可能です。

 

コードはこんな感じ

Cells(1, 1).EntireColumn.AutoFit

コードの意味は、1列目の列幅をテキスト幅に合わせるです。

 

列の指定方法はCellsを使うのか、Rangeを使うのか、いろんな方法があるので迷ってしまう方が多いかと思いますが、

状況に応じて使い分ける

必要があります。

 

どのような状況にも臨機応変に対応できるよういろんなパターンのサンプルを使って列幅を自動調整するマクロの作り方をご紹介します。

 

列幅を自動調整するマクロのサンプル事例

 

どんな状況でも列幅を自動調整するマクロを導入できるよう「AutoFit」の使い方をいくつかのサンプル事例を使ってご紹介していきます。

 

Left Caption

ガッツポーズの人

サンプルを見比べることで理解が深まります

 

1列目(A列)の列幅を自動調整するマクロ

1列目(A列)に入力されているテキスト長に合わせて列幅を自動調整するマクロの書き方は一つではありません。

 

A列と指定するか、1列目と指定するか、でコードの書き方が変わります。

どちらのコードでも結果は同じなのですが、状況に応じて最適なコードを書いていく必要があります。

 

「AutoFit」を自由い扱えるようになって頂くために3種類のサンプルをご紹介します。

 

A列を指定して列幅を自動調整するコード①

A列に入力されているテキスト長に合わせて列幅を自動調整するマクロがこちら

Sub Sample1()
Columns("A").AutoFit
End Sub

 

A列を指定して列幅を自動調整するコード②

A列に入力されているテキスト長に合わせて列幅を自動調整するマクロがこちら

Sub Sample2
Range("A:A").EntireColumn.AutoFit
End Sub

 

1列目を指定して列幅を自動調整するコード③

1列目に入力されているテキスト長に合わせて列幅を自動調整するマクロがこちら

Sub Sample3()
Cells(1, 1).EntireColumn.AutoFit
End Sun

 

3つとも「1列目(A列)に入力されているテキスト長に合わせて列幅を自動調整する」という同じ処理結果になります。

 

処理結果がこちら

 

Left Caption

上を目指す人

状況に応じて最適なコードを採用してください。

 

サンプルとしてA列からD列の列幅を自動調整するマクロのコードをご紹介していきます。

複数の列幅を調整するマクロも先ほど同様コードの書き方は1つではありません。

いろんな状況に対応できるよういくつかのサンプルをご紹介していきます。

 

A列からD列を指定して列幅を自動調整するコード①

A列からD列それぞれに入力されているテキスト長に合わせて列幅を自動調整するマクロがこちら

Sub Sample1()
Columns("A:D").AutoFit
End Sub

 

A列からD列を指定して列幅を自動調整するコード②

A列からD列それぞれに入力されているテキスト長に合わせて列幅を自動調整するマクロがこちら

Sub Sample2
Range("A:D").EntireColumn.AutoFit
End Sub

 

1列目から4列目を指定して列幅を自動調整するコード③

1列目から4列目それぞれに入力されているテキスト長に合わせて列幅を自動調整するマクロがこちら

Sub Sample3()
Range(Cells(1,1),Cells(1,4)).EntireColumn.AutoFit
End Sun

 

3つとも「1列目(A列)から4列目(D列)に入力されているテキスト長に合わせて列幅を自動調整する」という同じ処理結果になります。

 

処理結果

 

仕事をしていて1列目(A列)だけ列幅を調整できればいい!といった状況はほとんどないかと思います。

  • 編集範囲の列幅を自動調整したい
  • 印刷範囲内の列幅を自動調整したい
  • 一覧表で特定の列幅を自動調整したい

このような状況では複数の列を指定して列幅を自動調整するマクロの導入が便利です。

 

セル番地を指定して列幅を自動調整するマクロ

ピンポイントでセル番地を指定して列幅を調整するマクロのコードを紹介していきます。

 

特記事項を入力セルが決まっている!集計値を表示させるセルが決まっている!

このような処理をするエクセル業務に効果的です。

 

B8セルを指定して列幅を自動調整するコード①

B8セルに入力されているテキスト長に合わせて列幅を自動調整するマクロがこちら

Sub Sample1()
Cells(8,2).Columns.AutoFit
End Sub

 

B8セルを指定して列幅を自動調整するコード②

B8セルに入力されているテキスト長に合わせて列幅を自動調整するマクロがこちら

Sub Sample2()
Range("B8").Columns.AutoFit
End Sub

 

処理結果

 

列幅を自動調整するには、特定のセルを対象にするのか、それとも列全体を対象とするのか、でVBAの入力方法が変わってきます。

 

列の中で入力されたテキストが一番長いセルを対象とする場合、EntireColumnを使用、

これに対して指定する特定のセルを対象とする場合、Columnsを使います。

最後にsがあるか、ないかでVBAがエラーで実行できなくなるので十分注意してください。

 

 

列幅を自動調整するマクロのデメリット

「AutoFit」で列幅を自動調整するマクロを導入すれば「長文を入力してもテキストが見切れなくなる!」「入力作業の効率化!」というメリットがありますが、

「結合されたセルにAutoFitは使えない」「印刷範囲が大きくズレる可能性がある」というデメリットもあります。

 

この2つのデメリットを詳しくご紹介します。

 

デメリット① 結合されたセルでAutoFitは使えない

 

結合されたセルに入力されたテキストにはAutoFitは使えないので注意が必要です。

こんな感じでマクロを実行しても変化がありません。

 

 

セル結合が頻繁に使われているエクセルファイルに列幅を自動調整するマクロの導入は困難!ということになります。

 

これから資料を作成する場合なるべくセルの結合は使わない!ことをおすすめします。

 

デメリット② 印刷範囲が決められた資料でAutoFitを使うと、印刷範囲がずれてしまう

 

印刷範囲がピシッと設定されたシートでは、

A列の幅は8、B列の幅は7、

といったように数値で列幅が厳密に設定されている場合が多くあります。

 

このようなシートで入力されたテキスト長に合わせて列幅を調整してしまうと印刷範囲が大きくズレてしまう!可能性があります。

 

Left Caption

疲れ果てた人

ズレてしまった印刷範囲を修正するのはめちゃくちゃ大変

 

印刷範囲がきめられたエクセルファイルでは、入力したテキストに列幅を調整するのではなく列幅に合わせてテキスト長を調整してください。

 

印刷範囲が決められた様式では、列幅の変更はなるべく避けるようにしましょう。

 

とは言いつつ、

決められた様式の列幅や行間をぐちゃぐちゃにしてしまい元に戻せなくなった。

こんな問題も列幅を自動調するマクロで解決することができます。

 

どのようなマクロかと言うと、原図(決められた様式)から列幅の情報を取得し調整するマクロです。

 

この記事の前半で紹介してきた列幅を自動調整するマクロは、入力されたテキスト長に合わせて列幅を調整するという内容でしたが、

原図(決められた様式)から列幅の情報を取得し調整するマクロは、ベースとなる様式の列幅を数値で取得し反映させるという内容です。

印刷範囲が決まっている様式から列幅の情報を取得すれば取得した情報をから様式元通りにリセットすることができます。

 

下記の動画では、原図(決められた様式)から列幅の情報を取得し調整するマクロの処理を詳しく紹介しています。

 

 

このマクロを設定しておけば、AutoFitや手動で列幅をグチャグチャにしてしまった後でも一瞬で原図の通り修復することが可能。

 

さらにこのマクロの最大の特徴として、

入力したテキストを消去せずそのままの状態で列幅を元に戻せる!

ということです。

 

テキストの入力作業を終えた後に様式の調整を試みたところ、入力したテキストを消さなければ調整できない!ということが多々発生します。

 

Left Caption

疲れ果てた人

せっかく時間をかけて編集したのにめんどくさい

原図(決められた様式)から列幅の情報を取得し調整するマクロがあればこんなやり直し作業を恐れることはありません。

原図さえあれば編集内容はそのままで様式をリセットすることができるのでアグレッシブに作業を進めることができます。

 

原図(決められた様式)から列幅の情報を取得し調整するマクロは下記のリンクでダウンロードしてすぐに使うことが可能です。

決められた様式を編集する作業が多いという方におすすめのマクロに

 

決められた様式を編集する作業が多いという方におすすめのマクロなので是非参考にしてみてください。

 

原図(決められた様式)から列幅の情報を取得し調整するマクロに使われているコードや導入手順をもっと知りたい!という方はこちら

 

 

VBAを使わないで列幅を調整する方法

 

VBAを使わず、マウス操作で指定した列幅をまとめて調整する方法をご紹介します。

上記で紹介している「AutoFit」の処理をマウスを使って行う!というイメージです。

 

Left Caption

ひらめく人

VBAを設定するまでもない!ちゃちゃっと列幅調整の処理をしたい!という方におすすめ

 

やり方① 調整したい列をまとめて選択

 

 

やり方② まとめて選択した列の右端をダブルクリック

 

ダブルクリックする列は選択中の列であればどこをダブルクリックしても実行されます。

 

処理結果

 

 

 

Left Caption

ひらめく人

エクセル業務の効率化に欠かせない操作なので是非やり方をマスターしてください。

 

 

業務内容に合わせた「列幅を自動調整するマクロ」を導入するには

 

列幅を自動調整するマクロを導入には以下のような2つの方法があります。

  • 自ら業務内容に合わせたマクロを開発する
  • マメBlogにマクロ開発依頼をする

一番手っ取り早い方法は「自ら業務内容に合わせたマクロを開発する」ですが、

VBAの編集は難易度が高い!マクロを作る時間がない!という方が多いのではないでしょうか。

 

このような悩みを抱えている方は2つ目のマメBlogにマクロ開発依頼をする方法がおすすめです。

 

マメBlogマクロ開発の特徴がこちら

 

  • 格安
  • スピード納入
  • 臨機応変なコード作成

 

 

こんな作業を自動化したい!こんなことってできるの?

という感じでザックリとした依頼内容でOK。

 

Left Caption

ガッツポーズの人

エクセル業務の効率をアップさせる最適なマクロをご提案いたします

「マメBlogのマクロ開発」についての詳細は下記のリンクを参考にしてください。

 

 

 

毎日行っている単純作業やルーティーン作業はVBAを使って自動化してしまいましょう!

 

処理内容にもよりますが、

1時間以上かかっていた作業もVBAを使えば1クリックで完了してしまう

なんてことが多々あります。

 

Left Caption

上を目指す人

効率化マクロを導入してエクセル業務の効率をアップさせましょう。