0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

📘 第12回:VBAの総仕上げ!関数作成と実務自動化シナリオの完全解説

Posted at

はじめに:すべては“現場で活きるコード”のために

ここまでで、セル操作・データ処理・外部連携まで一通りの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回(最終回)では、これまで学んだ技術を今後どう活かすか?他ツール連携・チーム展開・成長戦略について、学びの次の一歩を一緒に描いていきます!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?