はじめに:すべては“現場で活きるコード”のために
ここまでで、セル操作・データ処理・外部連携まで一通りのVBA技術を習得してきました。
でも最も重要なのは、「現場の困りごとをどう解決するか?」という視点。今回は、関数の自作と、それを活かした実務シナリオ構築によって、VBAを使いこなすラストステップへ踏み込みます。
🛠 Functionプロシージャ:使い回せる自作関数を作ろう!
基本構文
Function 関数名(引数1 As 型, 引数2 As 型) As 戻り値の型
' 処理内容
関数名 = 戻り値
End Function
例:割引金額の計算
Function CalculateDiscount(price As Double, rate As Double) As Double
CalculateDiscount = price * (1 - rate)
End Function
Dim result As Double
result = CalculateDiscount(10000, 0.1) ' → 9000
→ 業務で使うロジックを関数として切り出しておくと、シンプル&再利用可能に!
関数化するメリット
項目 | 内容 |
---|---|
保守性 | 同じ処理を何度も書かなくてよい |
可読性 | 処理名で何をしているかが一目瞭然 |
再利用性 | 引数で使い回しが可能 |
小話:関数の見直しで月次処理のバグ激減
複数の売上計算ロジックを、関数として整理したことで**「どこを直せばいいか」が明確になり、バグの発見も改修も高速化。**コードレビューでも評価されるようになりました。
📊 実務シナリオ①:勤怠表の自動集計
背景
スタッフの勤怠管理は、Excelファイルに出退勤時刻・休憩時間・残業時間などを入力 → 月末に集計&報告。この作業を**ワンクリックで完了させたい!**という現場ニーズから生まれた自動化です。
実装ポイント
- 各行ごとに勤務時間を計算(退勤−出勤−休憩)
- 集計列に合計勤務時間を算出
- 条件付きで残業者をハイライト
サンプルコード(抜粋)
Sub SummarizeAttendance()
Dim lastRow As Long, i As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
Dim startTime As Date, endTime As Date, breakTime As Double
startTime = Cells(i, 2).Value
endTime = Cells(i, 3).Value
breakTime = Cells(i, 4).Value
Cells(i, 5).Value = (endTime - startTime) * 24 - breakTime
If Cells(i, 5).Value > 9 Then
Cells(i, 5).Interior.Color = RGB(255, 200, 200)
End If
Next i
End Sub
工夫ポイント
- 処理時間を「* 24」で時間単位に変換
- 残業判定には色づけ処理でわかりやすく
- Function化すれば計算式の再利用も可能!
📄 実務シナリオ②:請求書の一括出力
背景
毎月、複数店舗分の請求書をPDF化してメール送信する作業に時間がかかっていた。店舗名・金額・日付が変わるため、テンプレを元に毎月手作業していた状況を完全自動化。
実装構成
- Excelテンプレートに出力対象店舗一覧
- 店舗ごとに該当データを転記
- PDF化して指定フォルダへ保存
- ファイル名や日付も動的に自動挿入
サンプルコード(抜粋)
Sub CreateInvoicePDFs()
Dim lastRow As Long, i As Long, ws As Worksheet
Set ws = Worksheets("請求テンプレ")
lastRow = Worksheets("店舗一覧").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
Dim storeName As String, amount As Double
storeName = Worksheets("店舗一覧").Cells(i, 1).Value
amount = Worksheets("店舗一覧").Cells(i, 2).Value
ws.Range("B2").Value = storeName
ws.Range("B3").Value = amount
ws.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:="C:\請求書\" & storeName & ".pdf", _
Quality:=xlQualityStandard
Next i
End Sub
小話:PDF一括出力+自動送信ができると“業務の一部”になった
以前は5時間かかっていた請求処理が、VBA導入後は20分で完了+アウトルック送信まで一括で可能になりました。上司からも「業務のフローがシステム化されてる!」と高評価。自分自身も「コードで現場を支えてる」と実感できた瞬間でした。
✨ まとめ:VBAは単なる技術じゃない、“業務の味方”だ
- 自作関数で再利用性・メンテ性を高める
- 実務処理を「シナリオ」として構築する
- 手作業の課題を“仕組み”で乗り越える
この段階に来たあなたは、もうただのVBAユーザーではなく、現場の仕組みを再設計できるエンジニアです。
最終回予告:これからのVBA活用
次回、第13回(最終回)では、これまで学んだ技術を今後どう活かすか?他ツール連携・チーム展開・成長戦略について、学びの次の一歩を一緒に描いていきます!