ExcelVBAで「毎月の面倒な作業」を自動化する入門
「毎月同じ作業をExcelでやっている」なら、VBAで自動化できるかもしれません。情シスや社内SE、IT担当者はもちろん、プログラミング未経験の方でもコードをコピーして動かすところまで到達できる入門記事です。
VBAとマクロ、何が違う?
「マクロ」と「VBA」はほぼ同じ意味で使われますが、厳密には違います。
- マクロ:Excelの操作を自動化する仕組みの総称
- VBA(Visual Basic for Applications):マクロを作るためのプログラミング言語
Excelの「マクロの記録」機能でもマクロを作れますが、それで生成されるコードがVBAです。VBAを直接書けるようになると、マクロの記録では作れない複雑な処理も自動化できます。
この記事ではVBAを直接書く方法を紹介します。
準備:VBAエディタを開く
VBAのコードを書く場所(VBAエディタ)を開きます。
Excelのリボンに「開発」タブがある場合 「開発」→「Visual Basic」をクリック
「開発」タブがない場合(最初はここから)
- 「ファイル」→「オプション」を開く
- 「リボンのユーザー設定」を選ぶ
- 右側の一覧から「開発」にチェックを入れる
- 「OK」で閉じると、リボンに「開発」タブが表示される
または、キーボードの Alt + F11 でVBAエディタを直接開けます(これが一番早いです)。
VBAエディタの画面構成
VBAエディタを開くと、左側に「プロジェクト」ウィンドウ、右側に大きな白い入力エリアが表示されます。
コードを書くには、メニューの「挿入」→「標準モジュール」を選びます。「標準モジュール」を使うことをおすすめします。シートに紐づかない汎用的な処理を書けるので、使い回しやすくなります。
はじめての自動化:毎月のフォーマットを一発で整える
毎月こんな作業をしていませんか?
- A1セルに「月次レポート」と入力して太字にする
- 1行目を背景色で塗りつぶす
- 列幅を調整する
- 日付を入力する
これを毎月手作業でやっている場合、VBAで一瞬で終わらせることができます。
以下のコードを標準モジュールに貼り付けてください。
Sub 月次レポート初期設定()
' シートを変数に入れる
Dim ws As Worksheet
Set ws = ActiveSheet
' A1に「月次レポート」と入力
ws.Range("A1").Value = "月次レポート"
' A1を太字にして文字サイズを14に
ws.Range("A1").Font.Bold = True
ws.Range("A1").Font.Size = 14
' 1行目の背景色をグレーに(RGB指定)
ws.Rows(1).Interior.Color = RGB(200, 200, 200)
' B1に今日の日付を入力
ws.Range("B1").Value = Date
ws.Range("B1").NumberFormat = "yyyy年m月d日"
' A列の幅を20、B列の幅を15に設定
ws.Columns("A").ColumnWidth = 20
ws.Columns("B").ColumnWidth = 15
' 完了メッセージを表示
MsgBox "初期設定が完了しました!"
End Sub
マクロを実行する
コードを貼り付けたら、まず動かしてみましょう。
VBAエディタから実行する場合
コードの中にカーソルを置いて、ツールバーの「▶」ボタン(または F5 キー)を押します。
Excelシートからボタンで実行する場合(便利)
- 「開発」タブ→「挿入」→「ボタン(フォームコントロール)」を選ぶ
- シート上でドラッグしてボタンを配置する
- 「マクロの登録」ダイアログが出るので、「月次レポート初期設定」を選んで「OK」
- ボタンのラベル文字は右クリックで編集できる
以後はボタンをクリックするだけでマクロが実行されます。まずはボタンを押して、Excelのシートが自動で変化するのを体験してみてください。
コードの解説
動いたところで、コードが何をしているか確認しましょう。
Sub 月次レポート初期設定()
Subから始まりEnd Subで終わるのが「プロシージャ」と呼ばれる処理のかたまりです。Subの後に処理の名前をつけます。日本語でもOKです。
Dim ws As Worksheet
Set ws = ActiveSheet
Dimは変数を宣言する命令です。「wsという名前でワークシートを扱う変数を用意します」という意味です。ActiveSheetは今開いているシートを指します。
ws.Range("A1").Value = "月次レポート"
Range("A1")でA1セルを指定し、.Valueにテキストを入れています。=の右側が入れたい値です。
ws.Range("A1").Font.Bold = True
Trueは「はい」、Falseは「いいえ」を意味します。Font.Bold = Trueで太字にできます。
ws.Range("B1").Value = Date
DateはVBAの組み込み関数で、今日の日付を返します。
よくあるエラーと対処
「マクロが無効になっています」と出る場合 Excelのセキュリティ設定でマクロが無効になっています。「開発」→「マクロのセキュリティ」→「警告を表示してすべてのマクロを無効にする」を選ぶと、ファイルを開くたびに確認ダイアログが出るようになります。
「コンパイルエラー」と出る場合
コードに文法ミスがあります。全角スペースが混入していないか、SubとEnd Subが対応しているかを確認してください。
ファイルを保存するとマクロが消える場合
通常の .xlsx 形式ではマクロを保存できません。「名前を付けて保存」で拡張子を .xlsm(マクロ有効ブック)にして保存してください。
次のステップ:繰り返し処理で真価を発揮する
VBAの本当の強みは「繰り返し処理」です。たとえば「100行のデータを1行ずつ確認して条件に合う行だけ別シートに転記する」のような作業は、手作業だと1時間かかっても、VBAなら数秒で終わります。
' 繰り返し処理の基本形(ForループとIf文)
Sub サンプル_繰り返し()
Dim i As Long
Dim ws As Worksheet
Set ws = ActiveSheet
' 2行目から最終行まで繰り返す
For i = 2 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' A列の値が「完了」だったらB列を青くする
If ws.Cells(i, 1).Value = "完了" Then
ws.Cells(i, 2).Interior.Color = RGB(173, 216, 230)
End If
Next i
MsgBox "処理完了!"
End Sub
このコードを動かすには、A列に「完了」と入力されたデータが必要です。試してみてください。
まとめ
VBAは難しそうに見えて、基本の構造は「処理のかたまり(Sub〜End Sub)」「変数」「セルの操作」「繰り返し」の組み合わせです。まずはこの記事のコードをそのままコピーして動かし、「どこを変えたらどう変わるか」を試していくと理解が早まります。
毎月・毎週の定型作業をひとつVBAで自動化できると、業務効率の改善を体感できます。