【簡単Excelマクロ・VBA】セルの書式設定|列幅、行高|セルの基本操作 #007
いつもありがとうございます。
ノンプログラマー向け「Excelマクロ・VBA解説シリーズ」へようこそ。
本稿ではセルの基本操作のうちセルの書式設定の #002 として「列幅、行高」を解説いたします。
尚、セルの初期設定の姉妹記事はこちらに掲載しております。もしよろしければご覧ください。
姉妹記事
ことばの意味
- セル
ワークシートのひとつひとつのマス目のことです。 - ノンプログラマー
プログラミングを本職としない人たちのことです。 - マクロ
VBAを使って作成される「機能」のことです。 - VBA
Visusal Basic for Application の略で、プログラミング言語のことです。
関連記事
VBAにおける「セルの基本操作」の全体像
マクロを作成するにあたり、セルの操作は何かと必要になります。セルの基本操作の全体像は以下の記事で解説しております。
本稿では、セルの基本操作の一部である「列幅、行高」を解説いたします。
VBAで「書式設定」を行う方法 #002
セルの書式設定 #002 では、以下の設定方法を解説いたします。
- 列幅
- 行高
以下のセクションでそれぞれの項目について解説していきます。
尚、セルの結合・解除につきましては、こちらの記事で解説しています。もしよろしければご覧ください。
列幅
セル内のコンテンツが列幅からはみ出したり、反対に余白が大きすぎると、視覚的に分かりづらい資料になりがちです。資料を読みやすく整えるためには、列幅の適切な調整が重要です。特に、ビジネス文書や学生の提出資料などでは、きちんと整えておきたいところです。
VBAでセルの列幅を調整する方法には、以下の2つがあります。
- 列幅を数値で指定する
- 列幅をセルのコンテンツに合わせて調整する
それぞれ解説していきます。
列幅を数値で指定する
例として、以下のようなデータが格納されているシートの列幅を調整したいと思います。
このデータは、気象庁のウェブサイトからダウンロードした気象データです。(出典:気象庁、URL: https://www.data.jma.go.jp/gmd/risk/obsdl/index.php)
4行目を見ると分かりますが、セルの表示内容が途中で切れています。"平均気温"の横の"("までは見えますが、明らかに何かの文字が続いているのが分かります。
このセルの内容が見切れないように列幅を調整してみましょう。
まず、単一の列の幅を調整するコードを以下に示します。
Sub Sample()
' C列 = Columns(3) の列幅を 15 に設定する
ThisWorkbook.Worksheets("Sheet1").Columns(3).ColumnWidth = 15
End Sub
このコードでは、C列 = Columns(3) の列幅を 15 に設定しています。マクロ実行結果を見ると、セルのコンテンツが見切れずに表示されるようになったことが分かります。
このコードでは、C列の列幅のみが調整されます。しかし、D列以降も表示が見切れていることが分かりますので、C列以降のデータが格納されているすべての列を調整してみましょう。
Sub Sample2()
' 変数宣言
Dim twb As Workbook ' This Workbook
Dim twb_ws1 As Worksheet ' Worksheet
Dim last_col As Long ' Last Column ; 最終列の番号
' ワークブックを開くと同時に、ワークブックとワークシートを変数として取得
Set twb = ThisWorkbook
Set twb_ws1 = twb.Worksheets(1)
' 最終列をしらべて変数 last_col に格納
last_col = twb_ws1.Cells(4, Columns.Count).End(xlToLeft).Column
' C列から最終列までの列幅を 15 に設定する
Range(twb_ws1.Columns(3), twb_ws1.Columns(last_col)).ColumnWidth = 15
End Sub
解説していきます。
' 変数宣言
Dim twb As Workbook ' This Workbook
Dim twb_ws1 As Worksheet ' Worksheet
Dim last_col As Long ' Last Column ; 最終列の番号
この冒頭の部分は変数の宣言です。Dim 変数 As データ型 の構文で宣言します。
これによって各変数は As 以降で指定したデータ型のデータを格納することができるようになります。
尚、"Workbook"はワークブック、"Worksheet"はワークシート、"Long"は整数を格納するためのデータ型を意味しています。
ことばの意味
- Long
-2,147,483,648から2,147,483,647までの範囲の整数値を格納することができます。尚、整数を扱うデータ型には Integer もありますが、これは-32,768から32,767までと、Long よりも扱える数が小さいです。
' ワークブックを開くと同時に、ワークブックとワークシートを変数として取得
Set twb = ThisWorkbook
Set twb_ws1 = twb.Worksheets(1)
次に、ワークブックを開くと同時に、オブジェクト変数として取得しています。合わせてワークシートもオブジェクト変数として取得しています。
ことばの意味
- オブジェクト変数
「オブジェクト」を入れておく箱のようなものです。通常の変数が数値や文字列などを格納するのに対して、オブジェクト変数はオブジェクトを格納します。
twb.Workbooks(1)
のカッコ内の数値 1 は、ワークブック内の1番目のワークシート、つまり左端のワークシートを意味しています。
' 最終列をしらべて変数 last_col に格納
last_col = twb_ws1.Cells(4, Columns.Count).End(xlToLeft).Column
ここではシート内のデータが格納されているセルの最終列、つまり一番右端にある列を取得しています。列幅を調整するデータエリアを指定するために、最終列を取得しておく必要があります。
twb_ws1.Cells(4, Columns.Count)
のカッコ内右側の Columns.Count
は、ワークシートにある列の総数、つまり一番右端の列の番号を表します。
End(xlToLeft)
は、指定されたセルから左方向(to left)に移動するメソッドです。空白でないセルに到達するまで移動します。
End(xlToLeft)
に続く .Column
は列番号を返すプロパティです。
ことばの意味
- メソッド
オブジェクトを操作するための命令文のことです。 - プロパティ
オブジェクトの属性のことです。オブジェクトの状態を制御したり、情報を取得するために使用されます。
' C列から最終列までの列幅を 15 に設定する
Range(twb_ws1.Columns(3), twb_ws1.Columns(last_col)).ColumnWidth = 15
Range プロパティで C列=Columns(3)
から最終列までを対象エリアとして指定し、ColumnWidth
プロパティに 15 を指定することによって列幅を 15 にしています。
以上が、C列=Columns(3)
から最終列=Columns(last_col)
までの列幅を 15 に設定する方法です。
列幅をセルのコンテンツに合わせて調整する
次に、列幅をセルのコンテンツに合わせて自動調整する方法を解説します。
例として扱うファイルは、上述の列幅のセクションと同じく、気象庁のウェブサイトからダウンロードした気象データとします。
まず単一の列の幅を自動調整するコードを以下に示します。
Sub sample3()
' C列 = Columns(3) の列幅を自動調整する
ThisWorkbook.Worksheets("Sheet1").Columns(3).AutoFit
End Sub
列幅を数値で指定する方法では、 ColumnWidth
プロパティに数値を指定していましたが、列幅を自動調整する方法では AutoFit メソッドを用いて列幅を調整しています。
AutoFit メソッドは、指定した Range オブジェクトや Columns オブジェクト の内容に合わせて列幅を自動調整してくれます。
次に、C列以降のデータが格納されているすべての列の幅を調整してみましょう。
Sub Sample4()
' 変数宣言
Dim twb As Workbook ' This Workbook
Dim twb_ws1 As Worksheet ' Worksheet
Dim last_col As Long ' Last Column ; 最終列の番号
' ワークブックを開くと同時に、ワークブックとワークシートを変数として取得
Set twb = ThisWorkbook
Set twb_ws1 = twb.Worksheets(1)
' 最終列をしらべて変数 last_col に格納
last_col = twb_ws1.Cells(4, Columns.Count).End(xlToLeft).Column
' C列から最終列までの列幅を自動調整する
Range(twb_ws1.Columns(3), twb_ws1.Columns(last_col)).AutoFit
End Sub
上述の列幅を数値で指定する方法の場合とほぼ同じですが、以下の部分のみ変更しています。
' C列から最終列までの列幅を自動調整する
Range(twb_ws1.Columns(3), twb_ws1.Columns(last_col)).AutoFit
C列=Columns(3)
から最終列=Columns(last_col)
までを表すRangeオブジェクトに対して Autofit
メソッドを適用し、列幅を自動調整しています。
以上が、C列=Columns(3)
から最終列=Columns(last_col)
までの列幅を自動調整する方法です。
すべての列の幅を調整する
単一の列や指定した範囲の列の幅を調整する方法は上述の通りです。
もしシート内のすべての列の幅を調整したい場合には、以下のように記述します。
' すべての列の幅を 15 に設定する
ThisWorkbook.Worksheets("Sheet1").Columns.ColumnWidth = 15
' すべての列の幅を自動調整する
ThisWorkbook.Worksheets("Sheet1").Columns.AutoFit
このように Columns をオブジェクトに指定して、ColumnWidth または AutoFit で列幅を指定します。
行高
行高の調整も、列幅と同様に以下の2つの方法があります。
- 行高を数値で指定する
- 行高をセルのコンテンツに合わせて調整する
それぞれ解説していきます。
行高を数値で指定する
列幅の場合と同じく、例として扱うファイルは以下の気象庁からダウンロードした気象データとします。
まず単一の行の高さを数値で指定するコードを以下に示します。
Sub Sample5()
' 6行目の行高を 50 に設定する
ThisWorkbook.Worksheets("Sheet1").Rows(6).RowHeight = 50
End Sub
このコードでは、6行目 = Rows(6) の高さを 50 に設定しています。マクロ実行結果を見ると、他の行よりも行の高さが高くなっていることが分かります。
次に、6行目以降のデータが格納されているすべての行の高さを調整してみましょう。
Sub Sample6()
' 変数宣言
Dim twb As Workbook ' This Workbook
Dim twb_ws1 As Worksheet ' Worksheet
Dim last_row As Long ' Last Row ; 最終行の番号
' ワークブックを開くと同時に、ワークブックとワークシートを変数として取得
Set twb = ThisWorkbook
Set twb_ws1 = twb.Worksheets(1)
' 最終行をしらべて変数 last_row に格納
last_row = twb_ws1.Cells(Rows.Count, 1).End(xlUp).Row
' C列から最終列までの列幅を自動調整する
Range(twb_ws1.Rows(6), twb_ws1.Rows(last_row)).RowHeight = 50
End Sub
解説していきます。
' 変数宣言
Dim twb As Workbook ' This Workbook
Dim twb_ws1 As Worksheet ' Worksheet
Dim last_row As Long ' Last Row ; 最終行の番号
この冒頭の部分は変数の宣言です。Dim 変数 As データ型 の構文で宣言します。
これによって各変数は As 以降で指定したデータ型のデータを格納することができるようになります。
尚、"Workbook"はワークブック、"Worksheet"はワークシート、"Long"は整数を格納するためのデータ型を意味しています。
' ワークブックを開くと同時に、ワークブックとワークシートを変数として取得
Set twb = ThisWorkbook
Set twb_ws1 = twb.Worksheets(1)
次に、ワークブックを開くと同時に、オブジェクト変数として取得します。合わせてワークシートもオブジェクト変数として取得します。
twb.Workbooks(1) のカッコ内の数値 1 は、ワークブック内の1番目のワークシート、つまり左端のワークシートを意味しています。
' 最終行をしらべて変数 last_row に格納
last_row = twb_ws1.Cells(Rows.Count, 1).End(xlUp).Row
ここではシート内のデータが格納されているセルの最終行、つまり一番下にある行を取得しています。行高を調整するデータエリアを指定するために、最終行を取得しておく必要があります。
last_row = twb_ws1.Cells(Rows.Count, 1)
のカッコ内左側の Rows.Count
は、ワークシートにある行の総数、つまり一番下の行の番号を表します。
End(xlUp)
は、指定されたセルから上方向(up)に移動するメソッドです。空白でないセルに到達するまで移動します。
End(xlUp)
に続く .Row
は行番号を返すプロパティです。
' 6行目から最終行までの行高を 50 に設定する
Range(twb_ws1.Rows(6), twb_ws1.Rows(last_row)).RowHeight = 50
Range プロパティで6行目から最終行までを対象エリアとして指定し、RowHeight プロパティに 50 を指定することによって行高を 50 にしています。
以上が、6行目から最終行までの行高を 50 に設定する方法です。
行高をセルのコンテンツに合わせて調整する
次に、行高をセルのコンテンツに合わせて自動調整する方法を解説いたします。
まず単一の行の高さを自動調整するコードを以下に示します。
Sub Sample7()
' 6行目の行高を自動調整する
ThisWorkbook.Worksheets("Sheet1").Rows(6).AutoFit
End Sub
行高を数値で指定する方法では Rowheight プロパティに数値を指定していましたが、行高を自動調整する方法では AutoFit メソッドを用いて行高を調整します。
AutoFit メソッドは、指定した Range オブジェクトや Rows オブジェクトの内容に合わせて行高を自動調整してくれます。
次に、6行目以降のデータ格納されているすべての行の高さを調整してみましょう。
Sub Sample8()
' 変数宣言
Dim twb As Workbook ' This Workbook
Dim twb_ws1 As Worksheet ' Worksheet
Dim last_row As Long ' Last Row ; 最終行の番号
' ワークブックを開くと同時に、ワークブックとワークシートを変数として取得
Set twb = ThisWorkbook
Set twb_ws1 = twb.Worksheets(1)
' 最終行をしらべて変数 last_row に格納
last_row = twb_ws1.Cells(Rows.Count, 1).End(xlUp).Row
' 6行目から最終行までの行高を自動調整する
Range(twb_ws1.Rows(6), twb_ws1.Rows(last_row)).AutoFit
End Sub
行高を数値で指定する方法とほぼ同じですが、最後の以下の部分のみ変更しています。
' 6行目から最終行までの行高を自動調整する
Range(twb_ws1.Rows(6), twb_ws1.Rows(last_row)).AutoFit
6行目から最終行=Rows(last_row)までを表す Range オブェクトに対して Auto Fit メソッドを適用し、行高を調整しています。
以上が、6行目から最終行=Rows(last_row)までの行高を調整する方法です。
すべての行高を調整する場合
単一の行や指定した範囲の行の高さを調整する方法は上述の通りです。
もしシート内のすべての行の高さを調整したい場合には、以下のように記述します。
' すべての行の高さを 50 に設定する
ThisWorkbook.Worksheets("Sheet1").Rows.ColumnWidth = 50
' すべての行に高さを自動調整する
ThisWorkbook.Worksheets("Sheet1").Rows.AutoFit
このように Rows をオブジェクトに指定して、RowHeight または AutoFit で行高を指定します。
おわりに
ご覧いただきありがとうございました。
今回の記事では、セルの基本操作のうち「セルの書式設定|列幅、行高」を解説いたしました。
お問い合わせやご要望等ございましたら、「お問い合わせ/ご要望」またはコメントにて、ご連絡いただければ幸いでございます。
皆様の人生がより一層素晴らしいものになるよう、少しでもお役に立てれば幸いでございます。
なお、当サイトでは様々な情報を発信しております。もしよろしければ、トップページもご覧いただけると幸いでございます。
筆者の記事関連経験
- VBA使用経験約20年
実務に使用するマクロを多数作成してきました。 - Python 3 エンジニア認定基礎試験
経済産業省が定めたガイドライン「ITスキル標準(ITSS)」に掲載されている民間資格です。
VBAプログラミングスキルアップのための参考情報
ここでは参考図書を紹介いたしますが、これらに限らず自分に合うものを選ぶことが重要だと考えております。皆様の、より一層のご成功を心よりお祈りしております。
VBAプログラミングのスキルアップ
学習用としてもハンドブックとしても役立つ便利な書籍がこちらです。価格はやや高めですが、その内容は非常に充実しています。相応のスキルを身に付けるためには、こうしたしっかりとした書籍を一冊持っておくと良いでしょう。
入門書に関しては、どの書籍も大きな違いはありません。あまり迷うことに時間をかけるよりは、手頃なものを一冊選んでみると良いでしょう。VBAの入門書は数多く出版されていますので、興味がある方はぜひチェックしてみてください。
甲乙つけがたい場合、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。
\チェックしてみよう/
\チェックしてみよう/
\チェックしてみよう/
VBAのプログラミング能力を客観的に証明したい場合には「VBAエキスパート試験」があります。この試験はVBAの知識を公式に認定するものです。VBAの総合的な能力獲得を目指す方に適しています。以下の公式テキストが販売されております。
プログラミングの一般教養
「独学プログラマー」というプログラミングの魅力を解説した書籍があります。これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。
こちらの記事でも紹介しております。もしよろしければご覧ください。