エクセルマクロVBAを使って、自動で表を作成する方法を紹介します。
具体的には以下を行います。
・マクロでエクセルに罫線を引く
以下で詳しく説明していきます。
目次
エクセルの表を自動作成するマクロ
このページで紹介するマクロの概要について紹介します。
動画解説
まずは動画で解説しています。
表作成マクロの概要を説明
以下のようにエクセルに何も記述されていない状態とします。
マクロを実行して、以下のように1行目にヘッダーを入れ、A列の値が20になるまでA列~F列に罫線を引いていきます。
補足
動画内では、表の罫線出力のプログラムを以下のように記述しています。
1 2 3 4 5 6 7 8 |
With Range("A" & i & ":F" & i) .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous .Borders(xlInsideVertical).LineStyle = xlContinuous .Borders(xlInsideHorizontal).LineStyle = xlContinuous End With |
しかし、8行も書かなくても以下の1行で処理可能です。
1 |
Range("A" & i & ":F" & i).Borders.LineStyle = xlContinuous |
無駄に長いプログラムを書く必要はないので、1行で書いた方がシンプルです。
それでは以下で、動画内で紹介しているマクロのプログラムについて説明します。
なお上記の通り、8行ではなく1行でシンプルにしたものを紹介します。
VBA入りのエクセルファイルをダウンロード
以下で紹介しているVBAプログラムをそのまま使いたい人は、以下のフォームからダウンロードできます。
登録したメールアドレスへVBA入りのファイルを送信します。
本プログラムの内容をそのまま使用可能です。ぜひお仕事にお役立てください。
VBA作成前の準備
ExcelでVBAを使うためにはいくつかの準備が必要です。
具体的には以下です。
上記に関して、以下で説明します。
準備1. ExcelでVBAを使うための事前準備
エクセルVBAを使うためには、保存ファイルの拡張子変更、Excelの基本設定変更の2つをしておきます。
2つともで難しい作業はなく、それぞれ1分もあれば設定変更可能です。
上記に関しては、以下の記事で解説をしています。
もしVBAを使うための準備段階に不安がある人は上記をご覧ください。
この内容は以下の動画で紹介しています。
入門エクセルマクロの使い方|マクロ作成から実行までを徹底解説
文字や画像だけで分かりづらい人は上記の動画をご覧ください。
表自動作成マクロのVBAプログラムを解説
今回紹介するプログラムの概要は以下です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
'プログラム0|変数設定の指定 Option Explicit 'プログラム1|プログラム開始 Sub make_table1() 'プログラム2|変数定義 Dim i As Long, cmax As Long, no As Long 'プログラム3|ヘッダーの項目を入れ込む Range("A1").Value = "No" Range("B1").Value = "A" Range("C1").Value = "B" Range("D1").Value = "C" Range("E1").Value = "D" Range("F1").Value = "E" 'プログラム4|ヘッダーの罫線と背景色の塗りつぶし With Range("A1:F1") .Borders.LineStyle = xlContinuous .Interior.ColorIndex = 20 End With 'プログラム5|表の行数を設定 cmax = 21 'プログラム6|for next構文で繰り返し処理 For i = 2 To cmax 'プログラム7|A列「No」に数値を入れる Range("A" & i).Value = i - 1 'プログラム8|A列~F列まで罫線を引く Range("A" & i & ":F" & i).Borders.LineStyle = xlContinuous Next 'プログラム9|プログラム終了 End Sub |
それでは、以下でプログラムを詳しく説明していきます。
プログラム0|変数宣言の指定
1 |
Option Explicit |
「Option Explicit」とは、変数宣言を強制するためのものです。
予期しないエラーを防止できるため「Option Explicit」を入力することを習慣化することを推奨しています。
詳しい説明は以下のページで紹介しています。
プログラム1|プログラム開始
1 |
Sub make_table1() |
「Sub make_table1()」のプログラムを開始することを意味します。
VBAではプロシージャという単位でプログラムを呼び出します。
プロシージャの構文は下記となっています。
1 2 3 |
Sub プロシージャ名() '実行プログラム End Sub |
「Sub」で始まり「End Sub」で終わります。
プロシージャに関連するmoduleの話については以下で説明しています。
プログラム2|変数定義
1 |
Dim i As Long, cmax As Long, no As Long |
変数を設定します。
ここでは3つの変数「i」,「cmax」,「no」をLong型の変数を設定します。
参考情報
変数については、以下のページで紹介しています。
プログラム3|ヘッダーの項目を入れ込む
1 2 3 4 5 6 |
Range("A1").Value = "No" Range("B1").Value = "A" Range("C1").Value = "B" Range("D1").Value = "C" Range("E1").Value = "D" Range("F1").Value = "E" |
セルB1:A
セルC1:B
セルD1:C
セルE1:D
セルF1:E
上記のように、1行目のA列~F列のセルに、それぞれの文字列をヘッダー情報として入力します。
プログラム4|ヘッダーの罫線と背景色の塗りつぶし
1 2 3 4 |
With Range("A1:F1") .Borders.LineStyle = xlContinuous .Interior.ColorIndex = 20 End With |
セルA1~F1に罫線を引いて、背景色を変更します。
With ~ End Withとは
With Range(“A1:F1”)を使うことで、WithからEnd Withで挟まれた行の先頭にRange(“A1:F1”)の記載を省略できます。
実はこのプログラムでは、以下のように記述しても同じ処理を行うことができます。
1 2 |
Range("A1:F1").Borders.LineStyle = xlContinuous Range("A1:F1").Interior.ColorIndex = 20 |
しかし、Range(“A1:F1”)を2回記述していて、共通項になっています。したがってWithで括りだすことができるのです。
これは数学の共通項を前に出すのと似ています。
たとえば、数学では (ab + ac) = a(b +c) とできます。これはaが共通項だからです。
今回のプログラムではmRange(“A1:F1”)が共通項になっているため、括りだすことができます。
そうすることで、Range(“A1:F1”)を書く手間が省けます。また、可読性(プログラムの読みやすさ)が上がります。
セルオブジェクト.Borders.LineStyle = xlContinuous
1 2 |
With Range("A1:F1") .Borders.LineStyle = xlContinuous |
上記のプログラムでA1~F1の範囲で、実線を引くことができます。
罫線については、以下の記述で、様々な罫線を引くことが可能です。
=xlDash|破線
=xlDashDot|一点鎖線
=xlDashDotDot|二点鎖線
=xlDot|点線
=xlDouble|二重線
=xlSlantDashDot|斜め斜線
用途に合わせて、選択することができます。
背景色の変更
1 |
With Range("A1:F1") |
セルオブジェクト.Interior.ColorIndex=20」で指定したセルの背景色を水色にすることができます。
この数値が色を指しています。たとえば、3は赤色、6は黄色です。
色の指定方法は複数方法ありますが、ここではColorIndexで指定する方法を紹介しています。
プログラム5|表の行数を設定
1 |
cmax = 21 |
プログラム2で設定した変数cmaxを21の数値を設定します。
これによりcmax=21として扱うことができます。
プログラム6|for next構文で繰り返し処理
1 |
For i = 2 To cmax |
ForNextを使って、変数iに2からcmaxまでの数値を入れて繰り返し処理を行います。
この事例では、プログラム5で、cmax=21としています。
したがって「For i = 2 to cmax」で「i =2,3,4,・・・, 21(cmax)」というようにiに1ずつ加算しながら、ForとNextの間の処理を繰り返し実行させます。
Debug.Printでの検証結果
1 2 3 4 5 6 7 8 9 10 |
For i = 2 To cmax Debug.Print "i:" & i Next >>>i:2 >>>i:3 >>>i:4 >>>(省略) >>>i:20 >>>i:21 |
上記のようにFor~Nextの間でiを1ずつ加算して、処理を行うことができます。
参考情報
For Next構文は使用頻度が高いので、使えるようになると威力を発揮します。For Next文は以下で事例を交えながら解説しています。
プログラム7|A列「No」に数値を入れる
1 |
Range("A" & i).Value = i - 1 |
A列のi行目に、「i-1」の数値を出力します。
i=2であればセルA2を1、i=3であればセルA3に2、というように出力していき、i=21まで繰り返し処理を行います。
プログラム8|A列~F列まで罫線を引く
1 2 |
Range("A" & i & ":F" & i).Borders.LineStyle = xlContinuous Next |
各行(i行目)のA列~F列まで罫線(実践)を引きます。
これをi=2~21(cmax)まで繰り返すことで、A2からF21の端に罫線(実践)を引くことができます。
またNextがあるので、ここまで処理が来たら、i=21になるまでプログラム6に戻り、処理を繰り返します。
プログラム9|プログラム終了
1 |
End Sub |
End Subは、プログラム1のSubの対になる記述で、プログラムの終了を指します。
プログラムの説明はここまでです。
表作成のプログラムの実用性
ここまで自動で表を作成するマクロについてプログラムの解説を入れて説明してきました。
しかし、ここで紹介しているプログラムは実用的ではありません。
その理由は2つあります。
理由2|行数を固定するマクロはメンテナンス性に欠ける
一つずつ説明します。
理由1|表の枠を作るような作業だけではマクロの効果は得られない
この記事では、表の枠を自動作成するマクロを紹介しました。
しかし、表の枠を作るだけなら1分もあればマウスを使って作成可能です。
そのため、このマクロでは数十分~数時間の業務効率化をもたらすことはできません。
残念ですが、表の枠をつくるだけではマクロの本当の効果は得られないのです。
もし、本当に仕事を効率化するマクロを作りたいなら、請求書作成のようなプログラムを書くと効果は抜群です。
興味があれば、ぜひ読んでみてください。
理由2|行数を固定するマクロはメンテナンス性に欠ける
ここで紹介したマクロは行数を21で固定しました。
しかし、このように行数を固定してしまうとメンテナンス性に欠けます。
なぜなら、作成したい表に応じて、毎回行数は増減するからです。
したがって21に固定してしまうと、マクロを使うたびに21を他の数値に変えなくてはなりません。
毎回マクロを修正していたのでは、全く実用的ではありません。
また、行数だけでなく列の数も増減する場合もあるはずです。
そのため、より効果の出るマクロを作れるようになるために機能を付与する必要があります。
Excel VBAについて詳しく理解したいなら
VBAを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にVBAを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
動画でも解説しています。
エクセルマクロVBAで出来ることを15の事例で紹介|日常業務をラクにするヒントを見つけよう!
(音声が小さいので、ボリュームを上げてご覧いただければと思います)
VBAの勉強方法
私はプログラミング初心者からVBAを勉強を始めて少しずつレベルアップしていきました。
成長の過程は以下で紹介しています。
学習の過程では、意識すべきポイントがあります。
特に独学の場合だと、勉強を優先してしまい、肝心な実践を疎かにしがちです。
私の経験では、実践から逆算した勉強が必要だと考えています。
目指すべきは会社でお金をもらいながら勉強することです。
要はVBAを仕事の一つとして上司に認めてもらうのです。
そうすればわざわざ高いお金を払って勉強をする必要がなくなります。
しかも作業を自動化して、会社やチームに貢献しつつ、自らのスキルアップできます。
そのために必要な考え方を以下で紹介しています。
とはいえ、プログラミング初心者でVBAについて知識ゼロの人もいるはずです。
いきなり会社でVBAで使うことさえ、とてつもなくハードルが高く見えてしまうものです。
その場合は、VBAの基本について学ぶ必要があります。
たとえば車の運転も慣れてしまえば、たいしたことではありません。
しかし教習所で運転の基本を学び、免許を取得することで、公道で運転できるようになります。
VBAも同じです。VBAに免許はありませんが、まずは基本を学ばないことには会社で使えるレベルにはなりません。
実際に私もプログラミング初心者のときは、動画を見たり書籍を読んだりして勉強しました。
今はオンラインの教材で無料で学習できるものも多いです。
上記のリンクでは、私の経験から勉強にオススメの教材を紹介しています。
興味がある人はご覧ください。
エクセルマクロVBAを学ぶときに役立つ動画
以下の動画も合わせてご覧いただくとエクセルマクロの理解が深まるはずです。