パソコンスキルの教科書

パソコンスキルの教科書

東京大学大学院卒。博士課程に進学を志すも、担当教授と折が合わず、無職になる。医者を目指すも結局断念。田舎で派遣社員として働く。「スキルがなければ、仕事ももらえない」と悟り、ビジネススキルを学ぶ。プログラミング、英語を学び、一部上場企業へ転職。年間100時間以上の業務効率化を行い、社内講師に抜擢。海外の案件を担当し、数億円のプロジェクトに携わる。個人の事業でも、月売上100万を達成。現在は、自分の価値を高めるためのスキル向上支援を行う

エクセルマクロVBAで表を自動作成する方法|罫線表示とヘッダー色変更

f:id:gene320:20181106232516j:plain

エクセルマクロVBAを使って自動で表を作成する方法を紹介します。

以下のようにエクセル上に何も記載がない状態があります。

f:id:gene320:20181106222012j:plain

マクロを実行して、以下のように1行目にヘッダーを入れ、A列の値が20になるまでセルA~セルEに罫線を引いていきます。

f:id:gene320:20181106222030j:plain

この記事では、上記のように表を自動作成するマクロについて紹介します。

表を自動作成するマクロ

この記事で紹介するマクロについて動画で解説しています。


エクセルマクロVBAで表を自動作成する方法|罫線表示とヘッダー色変更

なお、動画内では

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行で処理可能です。

Range("A" & i & ":F" & i).Borders.LineStyle = xlContinuous

無駄に長いプログラムを書く必要はないので、1行で書いた方がシンプルです。

以下では動画内で紹介しているマクロのプログラムについて説明します。ただ上記で示した通り、8行ではなく1行でシンプルにしたものを紹介します。

表自動作成マクロのVBAプログラム

このマクロの概要は以下です。

ステップ1|変数などの定義
ステップ2|ヘッダーの項目を入れ込む
ステップ3|ヘッダーの罫線と背景色の塗りつぶし
ステップ4|表の行数を設定
ステップ5|for next構文で繰り返し
ステップ6|A列「No」に数値を入れる
ステップ7|A列~F列まで罫線を引く
ステップ8|for next構文の区切り

マクロのプログラムは以下です。

Option Explicit 'おまじない

'ステップ1|変数などの定義
Sub make_table1()
    Dim i As Long, cmax As Long, no As Long

'ステップ2|ヘッダーの項目を入れ込む
    Range("A1").Value = "No"
    Range("B1").Value = "A"
    Range("C1").Value = "B"
    Range("D1").Value = "C"
    Range("E1").Value = "D"
    Range("F1").Value = "E"

'ステップ3|ヘッダーの罫線と背景色の塗りつぶし
    With Range("A1:F1")
        .Borders.LineStyle = xlContinuous
        .Interior.ColorIndex = 20
    End With

'ステップ4|表の行数を設定
    cmax = 21

'ステップ5|for next構文で繰り返し
    For i = 2 To cmax        

'ステップ6|A列「No」に数値を入れる
        Range("A" & i).Value = i - 1

'ステップ7|A列~F列まで罫線を引く
        Range("A" & i & ":F" & i).Borders.LineStyle = xlContinuous

'ステップ8|for next構文の区切り
    Next

End Sub

以下でプログラムの解説をしていきます。

ステップ1|変数などの定義

Sub make_table1()
    Dim i As Long, cmax As Long, no As Long

1行目|プロシージャ名を make_table1にする

2行目|iをLong型(整数)、cmaxをLong型(整数)として定義

ステップ2|ヘッダーの項目を入れ込む

Range("A1").Value = "No"
Range("B1").Value = "A"
Range("C1").Value = "B"
Range("D1").Value = "C"
Range("E1").Value = "D"
Range("F1").Value = "E"

1行目|セルA1の値を No にする

2行目|セルB1の値を A にする

3行目|セルC1の値を B にする

4行目|セルD1の値を C にする

5行目|セルE1の値を D にする

6行目|セルF1の値を E にする

ステップ3|ヘッダーの罫線と背景色の塗りつぶし

With Range("A1:F1")
    .Borders.LineStyle = xlContinuous
    .Interior.ColorIndex = 20
End With

1行目|セルA1からセルF1までの範囲をWithでくくりだす。

With Range("A1:F1")を使うことで、WithからEnd Withで挟まれた行の先頭にRange("A1:F1")を記載しなくてよくなる。

●Withについて説明

Withは数学の共通項を前に出すのと似ている。
例えば、数学では (ab + ac) = a(b +c) とできます。これはaが共通項だからです。

このプログラムでは、Range("A1:F1")が2行目~7行目において共通項になっているので、Withでくくりだしています。

そうすることで、Range("A1:F1")を書く手間が省けます。また、可読性(プログラムの読みやすさ)が上がります。

2行目|(セルA1からセルF1) の端に罫線(実践)を引く

●罫線について

=xlContinuous|実線
=xlDash|破線
=xlDashDot|一点鎖線
=xlDashDotDot|二点鎖線
=xlDot|点線
=xlDouble|二重線
xlSlantDashDot|斜め斜線

3行目|(セルA1からセルF1) の背景色を20にする(20は水色です)

4行目|End Withで1行目のWith構文の区切りをつける

ステップ4|表の行数を設定

cmax = 21

1行目|(Long型の変数である) cmaxを21にする

ステップ5|for next構文で繰り返し

For i = 2 To cmax        

1行目|for next構文で、変数 i に2からcmaxまでの数値を代入する

ステップ4でcmax=21としているため、 i = 2, 3, 4, ・・・, 20, 21として処理を進める

ステップ6|A列「No」に数値を入れる

Range("A" & i).Value = i - 1

1行目|セルAi を i-1 とする。i=2 であれば、セルA2を1とする。i=21であれば、セルA21を20とする。

ステップ7|A列~F列まで罫線を引く

Range("A" & i & ":F" & i).Borders.LineStyle = xlContinuous

1行目|セルAiからセルFiの複数セルの端に罫線(実践)を引く

i=2であれば、セルA2からセルF2 の端に罫線(実践)を引く

ステップ8|for next構文の区切り

    Next
End Sub

1行目|for Next構文の区切り

2行目|プロシージャ make_table1 を終了する

このプログラムは実用的ではない

ここまで自動で表を作成するマクロについてプログラムの解説を入れて説明してきました。

しかし、ここで紹介しているプログラムは実用的ではありません。

その理由は2つあります。

理由1|表の枠を作るような作業だけではマクロの効果は得られない
理由2|行数を固定するマクロはメンテナンス性に欠ける

一つずつ説明します。

理由1|表の枠を作るような作業だけではマクロの効果は得られない

この記事では、表の枠を自動作成するマクロを紹介しました。

しかし、表の枠を作るだけなら1分もあればマウスを使って作成可能です。

そのため、このマクロでは数十分~数時間の業務効率化をもたらすことはできません。

残念ですが、表の枠をつくるだけではマクロの本当の効果は得られないのです。

もし、本当に仕事を効率化するマクロを作りたいなら、表の中身の計算まで処理するプログラムを書く必要があります。

以下では、表の中身まで自動でデータ計算するマクロを紹介しています。

www.fastclassinfo.com

興味があれば、ぜひ読んでみてください。

理由2|行数を固定するマクロはメンテナンス性に欠ける

ここで紹介したマクロは行数を21で固定しました。

しかし、このように行数を固定してしまうとメンテナンス性に欠けます。

なぜなら、作成したい表に応じて、毎回行数は増減するからです。

したがって21に固定してしまうと、マクロを使うたびに21を他の数値に変えなくてはなりません。

毎回マクロを修正していたのでは、全く実用的ではありません。

また、行数だけでなく列の数も増減する場合もあるはずです。

そのため、より効果の出るマクロを作れるようになるために機能を付与する必要があります。

エクセルを自分用に編集アレンジして使いたいなら、エクセルマクロの無料動画で学ぼう

ここまでエクセルマクロのプログラムについて紹介してきました。

しかし、この記事を見たとき、「もっと○○ができるのでは?」や「ここはなんとかならないのか」と感じる人は少なくないはずです。

例えば、「他の条件を付け加えたい」や「さらに機能を増やしたい」といった要望が出るかもしれません。

このような要望を満たすには、マクロを勉強して自力でマクロを編集できるようになる必要があります

もし、自力でマクロを編集できるようになれば、今より仕事の効率はグッと上がります。

実際、私も自力でマクロを書けるようになってからは、仕事の生産性が一気に上がりました。

他の人が30分~1時間かけて行う仕事が、ボタン一つで終わらせることができるようになったのです。その結果、周囲からの信頼も増し、仕事で高い評価を得られるようになりました。

ただ、要望に応えるようになるためには、マクロを学ぶ必要があります。

まずは無料でマクロを勉強してみる

ウェブや書籍で勉強すれば、マクロを習得できると考えている人は少なくありません。

しかし、仕事で使えるマクロを習得したいなら、仕事で使える部分に特化した教材で学ぶことをお勧めします。

なぜなら、ウェブや書籍には仕事に関係しない部分まで提供していることが多いからです。

例えば、マクロ初心者なのに配列を学ぼうとする人がいます。実は配列なしでも仕事で使えるマクロを書くことは可能です。

しかし、マクロ初心者ほど「全ての知識が必要だ」と考えて、無駄な学習に時間を使ってしまうのです。詳しくは、こちらの記事で紹介しています。

www.fastclassinfo.com

www.fastclassinfo.com

そこで、私がお勧めするのは仕事に直結するマクロ教材です。とくにお勧めするのは、こちらの無料オンライン動画です。

なぜなら、仕事に直結する部分に絞って、エクセルマクロを学ぶことができるからです。

マクロの作り方・考え方から解説しているので、教材をしっかり学べばここで紹介したマクロをゼロから書けるようになります。

マクロ初心者が、仕事に直結したいマクロを学ぶなら、まずはこちらの無料オンライン動画を試すのがいいです。

興味がある人は、まずは無料でエクセルマクロの勉強を始めてみてください。

もっと学びたいと感じたら、さらに深く勉強をしてみることをお勧めします。