VBAで列幅・行間を原図にリセットする方法【 仕事ですぐに使えるサンプル付 】

豆父ちゃん
このような問題を解決する、列幅、行間を原図の様式に戻すVBAを開発したので紹介します。
なんか難しそう!と感じるかもしれませんが、そんなことはありません。この記事では列幅、行間を原図に戻すVBAに使われているプロパティの使い方をサンプルを使って詳しく紹介しています。
キレイな資料作成に欠かせないVBAなので、この記事をブックマークするか、記事内で紹介しているサンプルVBAを保存することをおすすめします。
目次
列幅・行間を原図に戻すVBAとは
下記の動画では、列幅・行間を原図に戻すVBAがどのような処理をするのかを紹介しています。
このVBAの特徴は、セルに入力した内容をそのままにしつつ、列幅・行間のみを原図の様式にリセットできる!ということです。
私の会社では、契約書や請求書などの決められた様式の資料を編集する。というエクセル作業が多くあります。このような作業には必ず「原図」が存在し、この「原図」をコピーして資料を作っていく流れになります。
ほとんどの原図には印刷範囲が設定されているのですが、列幅や行間を変更すると印刷範囲がずれてしまうことが多々あります。
「資料作成は完了したのに、印刷範囲がどうしても合わせられない。セルに入力した内容はそのままに、列幅・行間を原図に戻したい。」
こんなときに、列幅・行間を原図の様式に戻すVBAの利用が便利です。この記事では、原図がSheetにあるパターンと原図が別のエクセルファイルにあるパターンの2つを紹介しています。あなたの環境に合った方を参考にしてみてください。
① 原図Sheetから列幅・行間の情報を取得し自動調整するVBAの導入方法
このVBAは下図のように、原図Sheetを新規Sheetにコピーして資料作成を行っている人におすすめです。
1.原図Sheetの作成
原図Sheetは、決められた様式を保存しておくためだけのSheetになります。そのためセルに文字を入力したり、列幅・行間を変更してはいけません。
もし、決められた様式が変更になり、列幅・行間が変更になった場合は原図Sheetの様式を変更するだけで、作成した全ての資料を原図に揃えることができます。
2.原図Sheetから列幅・行間の情報を取得し、自動調整するVBAの作成
標準モジュールに、原図Sheetから列幅・行間の情報を取得し、自動調整するVBAを記載します。
原図Sheetから列幅・行間の情報を取得し、自動調整するVBAのサンプル
1 | Sub 自動調整() |
2 | Dim Ash As Worksheet |
3 | Set Ash = ThisWorkbook.Worksheets(“原図") |
4 | For i = 1 To 50 |
5 | retu = Ash.Cells(1, i).ColumnWidth |
6 | ActiveSheet.Cells(1, i).ColumnWidth = retu |
7 | gyo = Ash.Cells(i, 1).RowHeight |
8 | ActiveSheet.Cells(i, 1).RowHeight = gyo |
9 | Next |
10 | End Sub |
※調整範囲は1~50列、1~50行です。調整範囲をもっと広げたい場合はVBAの4行目を調整してください。
3.VBAの登録
ボタンに原図Sheetから列幅・行間の情報を取得し、自動調整するVBAの登録をします。
これで、 原図Sheetから列幅・行間の情報を取得し、自動調整するVBAの導入が完了です。
②原図エクセルファイルから列幅・行間の情報を取得し自動調整するVBAの導入方法
このVBAは、原図となるデータを別のエクセルファイルで保存している方におすすめです。
VBAを実行すると下図のような処理が行われます。
原図エクセルファイルから列幅・行間を取得するVBAの導入方法を紹介していきます。
1.原図エクセルファイルの作成
原図エクセルファイルは、決められた様式を保存しておくためだけのファイルになります。そのためセルに文字を入力したり、列幅・行間を変更してはいけません。またVBAの中で、原図エクセルファイルの保存先を取得するプログラムが必要になるので、原図エクセルファイルの保存場所を変更してはいけません。
もし、決められた様式が変更になり、列幅・行間が変更になった場合は原図エクセルファイルの様式を変更するだけで、作成した全ての資料を原図に揃えることができます。
2.原図エクセルファイルから列幅・行間の情報を取得し、自動調整するVBAの作成
標準モジュールに、原図エクセルファイルから列幅・行間の情報を取得し、自動調整するVBAを記載します。
原図エクセルファイルから列幅・行間の情報を取得し、自動調整するVBAのサンプル
1 | Sub 自動調整() |
2 | Dim Filepath |
3 | "’原図エクセルの場所を指定 |
4 | Filepath = “C:\Users\\Desktop\列幅取得\原図.xlsm" |
5 | If Dir(Filepath) = “" Then |
6 | MsgBox “指定したファイルは存在しない" |
7 | Exit Sub |
8 | End If |
9 | Dim Abook As Workbook |
10 | Set Abook = Workbooks.Open(Filepath) |
11 | ThisWorkbook.Activate |
12 | "原図エクセルのデータ名を入力 |
13 | Set Abook = Workbooks(“原図.xlsm") |
14 | For i = 1 To 50 |
15 | retu = Abook.Sheets(“原図").Cells(1, i).ColumnWidth |
16 | ThisWorkbook.ActiveSheet.Cells(1, i).ColumnWidth = retu |
17 | gyo = Abook.Sheets(“原図").Cells(i, 1).RowHeight |
18 | ThisWorkbook.ActiveSheet.Cells(i, 1).RowHeight = gyo |
19 | Next |
20 | Application.DisplayAlerts = False |
21 | "原図エクセルのデータ名を入力 |
22 | Workbooks(“原図.xlsm").Close |
23 | Application.DisplayAlerts = True |
24 | End Sub |
調整範囲は1~50列、1~50行です。調整範囲をもっと広げたい場合はVBAの14行目を調整してください。
4行目は、原図エクセルファイルの保存場所を取得するVBAです。サンプルでは、「デスクトップ」の「列幅取得フォルダ」の「原図.xlsm」というエクセルファイルを指定しています。
サンプルVBAをコピーして利用する方は4行目のプログラムを修正してお使いください。
3.VBAの登録
ボタンに原図エクセルファイルから列幅・行間の情報を取得し、自動調整するVBAの登録をします。
これで、 原図エクセルファイルから列幅・行間の情報を取得し、自動調整するVBAの導入が完了です。
列幅を取得するプロパティの使い方
ColumnWidth、Widthは列幅を調整するときに使われます。2つのプロパティの違いを下記のサンプルで紹介しています。
A列、B列、C列の列幅を取得するサンプル1
1 | Sub テスト |
2 | a = Cells( 1 , 1 ).ColumnWidth |
3 | b = Range(“B1").ColumnWidth |
4 | c = Columns(3).ColumnWidth |
5 | d = Cells( 1 , 1 ).Width |
6 | e = Range(“B1").Width |
7 | f = Columns(3).Width |
8 | Cells( 1 , 1 ) = a |
9 | Cells( 1 , 2 ) = b |
10 | Cells( 1 , 3 ) = c |
11 | Cells( 2 , 1 ) = d |
12 | Cells( 2 , 2 ) = e |
13 | Cells( 2 , 3 ) = f |
14 | End Sub |
結果
列幅の取得には上記のようにいろんな方法があります。ColumnWidthで取得した数字は標準フォント1文字単位の値で、Widthで取得した数字はポイント単位の値です。
行間を取得するプロパティの使い方
RowHeight、Heightは行高さを調整するときに使われます。2つのプロパティの違いを下記のサンプルで紹介しています。
1行目、2行目、3行目の行間を取得するサンプル
1 | Sub テスト() |
2 | a = Cells( 1 , 1 ).RowHeight |
3 | b = Range(“B2").RowHeight |
4 | c = Rows(3).RowHeight |
5 | d=Cells(1,1).Height |
6 | e=Cells((“B2").Height |
7 | f=Rows(3).Height |
8 | Cells( 1 , 1 ) = a |
9 | Cells( 2 , 1 ) = b |
10 | Cells( 3 , 1 ) = c |
11 | Cells( 3 , 2 ) = d |
12 | Cells( 2 , 2 ) = e |
13 | Cells( 3 , 3 ) = f |
14 | End Sub |
結果
行高さの取得には上記のようにいろんな方法があります。RowHeight及びHeightで取得した数字は標準フォント1文字単位の値です。
列幅や行高さの調整はキレイな資料作りに欠かせない
列幅や行間の調整はキレイな資料作りには欠かせない処理であり、手間のかかる処理でもあります。行毎もしくは列毎に数字を1つ1つ入力すると時間がいくらあってもありません。
列幅や行高さが調整された原図を用意しておき、原図のとおり元に戻せるVBAがあれば列幅や行間がおかしくなる心配がないので積極的に調整が可能になります。
他にもキレイな資作りには欠かせない処理がページ設定です。ページ設定と列幅や行高さの調整ができるようになればとてもキレイな資料作りができるようになります。
VBAを使ったページ設定について下記の記事で詳しく紹介しています。
下記で紹介しているnoteでは、列幅・行間を自動調整するVBAが設定されたエクセルファイルをダウンロードして使用することができます。エクセルファイルをダウンロードして原図を書き換えればすぐに使用することができます。
列幅・行間の調整を効率よく行いたいという方はチェックしてみてください。
ディスカッション
コメント一覧
まだ、コメントがありません