【2026年8月最新】VBA関数の使い方完全ガイド|組み込み関数一覧とワークシート関数(WorksheetFunction)の使い分け
「セルの日付から3ヶ月後の日付を計算したい」「文字列の余分な空白を消したい」「Excelの標準機能にあるSUMIFSやVLOOKUPを、VBAのコードの中からも使いたい」——Excel VBAでマクロを組んでいると、こうした「関数」に関する疑問に必ず突き当たります。
厄介なのは、VBAには「VBA自体が持っている組み込み関数」と「Excelのワークシート関数をVBAから呼び出す仕組み(WorksheetFunction)」という、性質の異なる2種類の関数の使い方が存在することです。どちらも「関数」と呼ばれるため混同しやすく、「なぜこの関数はVBAにそのまま書けるのに、あの関数はWorksheetFunctionを付けないとエラーになるのか」と混乱した経験がある方も多いはずです。
この記事を最後まで読むと、次の内容が理解できます。
01 WHAT ARE FUNCTIONS VBAの「関数」とは何か・2種類の関数を区別する 組み込み関数とワークシート関数、性質が違う2つの「関数」
VBAで「関数」と呼ばれるものには、大きく分けて3つの種類があります。1つ目はVBA自体に標準搭載されている組み込み関数(LeftやRound、Nowなど)、2つ目はExcelのセルに入力する「関数」をVBAから呼び出す仕組み(WorksheetFunctionオブジェクト経由)、3つ目は自分で定義するユーザー定義関数(Function プロシージャ)です。この記事では、業務マクロで最も出番の多い1つ目と2つ目を中心に整理します。
📚 用語解説
VBA組み込み関数:VBA言語自体が標準で用意している関数群。Left・Right・Mid・Round・Now・DateAddなど、文字列操作・数値計算・日付処理・型変換のための基本機能が最初から使える。ワークシート関数と違い、セルの数式バーには入力できず、VBAコードの中でのみ使う。
📚 用語解説
ワークシート関数(WorksheetFunction):Excelのセルに「=SUM(A1:A10)」のように入力する関数のこと。VBAからこれらを利用したい場合は、Application.WorksheetFunction オブジェクト経由で呼び出す。SUMIFS・VLOOKUP・COUNTIFなど、Excelユーザーにはおなじみの関数がそのままVBAでも使える。
' VBA組み込み関数の例(そのままコード内に書ける)
Sub BuiltinFunctionExample()
Dim s As String
s = Left("見積書_20260801.xlsx", 3) ' "見積書"
Debug.Print s
Debug.Print Round(1234.567, 2) ' 1234.57
End Sub
' ワークシート関数の例(WorksheetFunction経由が必要)
Sub WorksheetFunctionExample()
Dim total As Double
total = Application.WorksheetFunction.Sum(Range("A1:A10"))
Debug.Print total
End Sub
見分け方のポイントは、「関数名の前にApplication.WorksheetFunction(または短縮形のWorksheetFunction)を書く必要があるかどうか」です。Left・Right・Round・NowのようなVBA組み込み関数はそのままコードに書けますが、SUMIFSやVLOOKUPのようなワークシート関数はWorksheetFunctionを経由しないと呼び出せません。
整理する
文字列処理か
集計処理か
関数を探す
該当すれば
そのまま使える
WorksheetFunction
Excel関数を
そのまま流用
自作Function
独自ロジックを
組み立てる
VBA組み込み関数の方が実行速度が速く、記述も短くなる傾向があります。似た機能がVBA組み込み関数とワークシート関数の両方にある場合(例:RoundとWorksheetFunction.Round)は、基本的にVBA組み込み関数を優先するのがセオリーです。ただしRoundは境界値(.5)を偶数側に丸める「銀行丸め」、WorksheetFunction.Roundは0から遠い方向に丸める通常の四捨五入と、挙動が異なる点には注意してください。
02 STRING FUNCTIONS VBA組み込み関数一覧:文字列操作系 業務マクロで頻出する文字列関数を用途別に整理
文字列操作は、ファイル名の加工・帳票の整形・入力データのクレンジングなど、業務マクロで最も出番の多い処理です。まずは代表的な文字列関数を一覧で整理します。
| 関数 | 用途 | 構文例 | 結果の例 |
|---|---|---|---|
| Left / Right | 先頭・末尾から指定文字数を取り出す | Left("VBA入門", 3) | "VBA" |
| Mid | 任意の位置から指定文字数を取り出す | Mid("見積書_2026", 5, 4) | "2026" |
| Len | 文字列の長さ(文字数)を取得 | Len("こんにちは") | 5 |
| Trim / LTrim / RTrim | 前後(片側)の空白を除去 | Trim(" 在庫 ") | "在庫" |
| InStr | 文字列内の位置を検索 | InStr("A-1234-B", "-") | 2 |
| Replace | 文字列を置換 | Replace("A/B/C", "/", "-") | "A-B-C" |
| UCase / LCase | 大文字・小文字に変換 | UCase("abc") | "ABC" |
| Format | 数値・日付を書式付き文字列に変換 | Format(1234, "#,##0") | "1,234" |
📚 用語解説
引数(ひきすう):関数を呼び出すときに渡す値のこと。Left("VBA入門", 3) の場合、"VBA入門"と3の2つが引数にあたる。関数によって必須の引数と省略可能な引数(Optional)があり、順番と型を間違えるとエラーや意図しない結果になる。
' 文字列関数の実践例:ファイル名から日付部分だけ抽出する
Sub ExtractDateFromFileName()
Dim fileName As String
fileName = "見積書_20260801_v2.xlsx"
Dim datePart As String
datePart = Mid(fileName, InStr(fileName, "_") + 1, 8)
Debug.Print datePart ' "20260801"
' 抽出した文字列を日付型に変換して整形する
Dim d As Date
d = DateSerial(CInt(Left(datePart, 4)), CInt(Mid(datePart, 5, 2)), CInt(Right(datePart, 2)))
Debug.Print Format(d, "yyyy年mm月dd日") ' "2026年08月01日"
End Sub
上記の例のように、InStr・Mid・Leftを組み合わせることで、決まった形式のファイル名から必要な部分だけを抜き出せます。実務では、この「関数を複数組み合わせる」判断こそが最初の壁になりやすいポイントです。
2-1. Format関数は書式コードの暗記が最大の壁
Format関数は数値や日付を「見やすい文字列」に変換する際の定番ですが、書式コード(#,##0やyyyy/mm/ddなど)を覚える必要があるため、非エンジニアの方が最初につまずきやすい関数の1つです。
📚 用語解説
Format関数:数値・日付・文字列を、指定した書式コードに従って整形済みの文字列に変換するVBA組み込み関数。Format(1234, "#,##0")なら桁区切りカンマ付きの"1,234"、Format(Now, "yyyy/mm/dd")なら"2026/08/01"のような日付文字列が得られる。書式コードの種類は数十通りあり、目的に応じて使い分ける。
Format関数は数値を渡しても戻り値は必ず文字列型(String)になります。整形後の値を再び計算に使いたい場合は、CDbl関数などで数値型に戻す必要がある点に注意してください。整形結果をそのまま加算しようとしてエラーになる、というのはよくある失敗パターンです。
03 NUMBER & DATE FUNCTIONS VBA組み込み関数一覧:数値・日付・変換系 集計・請求書処理・型変換で使う頻出関数
文字列関数と並んで実務で頻出するのが、数値計算・日付処理・型変換系の関数です。特に日付計算は、請求書の支払期日計算や、契約更新日のリマインドなど、業務システムの核になる処理でよく使われます。
| 関数 | 用途 | 構文例 | 結果の例 |
|---|---|---|---|
| Round | 四捨五入(指定桁数) | Round(1234.567, 1) | 1234.6 |
| Int / Fix | 小数点以下切り捨て | Int(-1.5) / Fix(-1.5) | -2 / -1(負数で挙動差あり) |
| Abs | 絶対値を取得 | Abs(-500) | 500 |
| Now / Date | 現在の日時・日付を取得 | Now | 実行時の日時 |
| DateAdd | 日付に期間を加算 | DateAdd("m", 3, #2026/8/1#) | 2026/11/1 |
| DateDiff | 2つの日付の差を計算 | DateDiff("d", d1, d2) | 日数差 |
| CInt / CLng / CDbl | 数値型への変換 | CInt("123") | 123(Integer型) |
| CStr / CDate | 文字列型・日付型への変換 | CDate("2026/8/1") | 日付型の値 |
| IsNumeric | 数値として解釈できるか判定 | IsNumeric("123abc") | False |
📚 用語解説
DateAdd関数:指定した日付に、指定した単位・数値の期間を加算(または減算)するVBA組み込み関数。DateAdd("m", 3, 基準日)なら3ヶ月後、DateAdd("d", -7, 基準日)なら7日前の日付が得られる。単位は"yyyy"(年)"m"(月)"d"(日)などの文字コードで指定する。
' 日付関数の実践例:請求書の支払期日を自動計算する
Sub CalculateDueDate()
Dim invoiceDate As Date
invoiceDate = DateSerial(2026, 8, 1)
Dim dueDate As Date
dueDate = DateAdd("m", 1, invoiceDate) ' 発行日の1ヶ月後
Debug.Print Format(dueDate, "yyyy/mm/dd") ' "2026/09/01"
Dim daysLeft As Long
daysLeft = DateDiff("d", Date, dueDate)
Debug.Print "支払期日まで残り" & daysLeft & "日"
End Sub
' 型変換関数の実践例:セルの値が数値として扱えるか安全にチェックする
Function SafeToNumber(cellValue As Variant) As Double
If IsNumeric(cellValue) Then
SafeToNumber = CDbl(cellValue)
Else
SafeToNumber = 0
End If
End Function
特にIsNumeric関数は、セルの値が「数値として扱える文字列かどうか」を事前にチェックするために欠かせません。CIntやCDblでいきなり型変換しようとすると、数値に変換できない値が混ざっていた場合に実行時エラーで処理が止まってしまうため、IsNumericで事前判定してからCDblを呼ぶのが安全な書き方です。
📚 用語解説
IsNumeric関数:引数として渡した値が、数値として解釈できるかどうかをTrue/Falseで返すVBA組み込み関数。CIntやCDblのような型変換関数の前段でチェックに使うことで、変換エラーによるマクロの異常終了を防げる。ただし、日付形式の文字列も一部Trueと判定される点には注意が必要。
3-1. Int関数とFix関数の違いに注意
Int関数とFix関数は、どちらも「小数点以下を切り捨てる」関数ですが、負の数を扱ったときの挙動が異なります。Intは「その数より小さい最大の整数」(負の無限大方向への切り捨て)、Fixは「小数点以下を単純に切り捨てる」(0方向への切り捨て)という違いがあり、正の数では同じ結果になりますが負の数では結果が変わります。
Int(-1.5)は-2、Fix(-1.5)は-1になります。マイナス値を扱う可能性がある計算(在庫の増減・損益計算など)でIntとFixを混同すると、集計結果が1ずれるバグにつながります。負数を扱う処理では、どちらの挙動が必要かを意識して選んでください。
04 WORKSHEET FUNCTION WorksheetFunctionでExcel関数をVBAから呼び出す SUMIFS・VLOOKUP・COUNTIFなど、おなじみの関数をコードから使う
Excelユーザーであれば、SUM・VLOOKUP・SUMIFS・COUNTIFといった関数をセルに入力した経験がある方は多いはずです。これらのワークシート関数を、VBAのコードの中からそのまま呼び出せるのがWorksheetFunctionオブジェクトです。すでに知っている関数の知識をそのままVBAに転用できるため、覚え直しのコストが少ないのが利点です。
' WorksheetFunctionの基本構文
Sub WorksheetFunctionBasics()
Dim ws As Worksheet
Set ws = ActiveSheet
' SUM: 範囲の合計を取得
Dim total As Double
total = Application.WorksheetFunction.Sum(ws.Range("B2:B100"))
' SUMIFS: 複数条件付きの合計
Dim salesTotal As Double
salesTotal = Application.WorksheetFunction.SumIfs( _
ws.Range("C2:C100"), ws.Range("A2:A100"), "営業部", ws.Range("D2:D100"), ">=2026/4/1")
' VLOOKUP: 表から値を検索
Dim price As Variant
price = Application.WorksheetFunction.VLookup("A0001", ws.Range("A2:C100"), 3, False)
' COUNTIF: 条件に一致するセル数をカウント
Dim errorCount As Long
errorCount = Application.WorksheetFunction.CountIf(ws.Range("E2:E100"), "エラー")
Debug.Print total, salesTotal, price, errorCount
End Sub
構文は共通して「Application.WorksheetFunction.関数名(引数)」です。「Application.」は省略して「WorksheetFunction.関数名」と書くこともできますが、コードの可読性を考えると省略しない方が「どこからワークシート関数を呼んでいるか」が分かりやすくなります。
📚 用語解説
Application.WorksheetFunction:VBAからExcelのワークシート関数(セルに入力する関数)を呼び出すためのオブジェクト。SUM・VLOOKUP・SUMIFS・COUNTIFなど、Excel上で使い慣れた関数の多くがこの経由でVBAコード内から利用できる。ただし全てのワークシート関数に対応しているわけではなく、一部の関数(IF・AND・ORなど)はVBAの制御構文・演算子と衝突するため対応リストから除外されている。
4-1. VLookupでエラーになる場合はエラーハンドリングが必須
WorksheetFunction経由のVLookupは、検索対象が見つからない場合にVBAの実行時エラーを起こすという特徴があります。ワークシート上でVLOOKUPが「#N/A」を返すのとは異なり、VBAでは処理そのものが止まってしまうため、On Error文と組み合わせた対策が必要です。
' VLookupのエラーハンドリング例
Function SafeVLookup(key As Variant, tbl As Range, col As Long) As Variant
On Error Resume Next
SafeVLookup = Application.WorksheetFunction.VLookup(key, tbl, col, False)
If Err.Number <> 0 Then
SafeVLookup = "該当なし"
Err.Clear
End If
On Error GoTo 0
End Function
IF・AND・ORなど、VBA自体に同等の機能(If文・And演算子・Or演算子)がある関数はWorksheetFunction経由で使えないことがあります。使いたい関数名がエラーになる場合は、まずVBA側に同等の書き方がないかを確認してみてください。
05 COMPARISON VBA関数 vs ワークシート関数 使い分け比較 同じ処理ができる場合、どちらを選ぶべきか
文字列の連結や条件分岐など、VBA組み込み関数とワークシート関数の両方で実現できる処理も少なくありません。ここでは、判断に迷いやすい代表的なケースを比較しながら、選び方の基準を整理します。
| やりたいこと | VBA側の書き方 | ワークシート関数での書き方 | おすすめ |
|---|---|---|---|
| 文字列の連結 | "A" & "B" | Application.WorksheetFunction.Concat("A","B") | VBAの&演算子(シンプルで速い) |
| 条件分岐して値を返す | If文 | WorksheetFunction.If(経由では常に使用不可) | VBAのIf文 |
| 範囲の合計 | ループでDo While集計 | WorksheetFunction.Sum(範囲) | ワークシート関数(コードが短い) |
| 複数条件の集計 | 自前でループ+条件判定 | WorksheetFunction.SumIfs(...) | ワークシート関数(圧倒的に簡潔) |
| 四捨五入 | Round(値, 桁数) | WorksheetFunction.Round(値, 桁数) | VBAのRound関数(追加記述が不要) |
全体の判断基準としては、「単純な計算・変換はVBA組み込み関数」「セル範囲を対象にした集計・検索はワークシート関数」という住み分けが基本になります。ループを自前で書くくらいなら、SUMIFSやCOUNTIFSのようなワークシート関数を1行呼び出す方が、コード量も実行速度も有利なケースが多くあります。
📚 用語解説
戻り値:関数が処理を終えたときに呼び出し元へ返す値のこと。Round(1234.567, 1)を呼び出すと1234.6という戻り値が返る。VBA組み込み関数・ワークシート関数のいずれも、関数名の後ろに書いた引数を処理した結果を戻り値として返す点は共通している。
また、実行速度の観点でも違いがあります。ワークシート関数のWorksheetFunction経由の呼び出しは、VBA組み込み関数の直接呼び出しよりもわずかにオーバーヘッド(処理の余分な負荷)が発生します。数千件・数万件規模のループの中で毎回WorksheetFunctionを呼ぶような設計は、処理速度に影響することがあるため注意が必要です。
数万行のループの中でWorksheetFunction.VLookupを毎回呼び出すような設計は、処理時間が大幅に伸びる原因になります。可能であれば、事前にDictionaryオブジェクトへデータを読み込んでおき、ループ内はDictionary参照だけで完結させる設計に変更すると、体感できるレベルで速度が改善します。
06 PRACTICAL PATTERNS 業務での実践活用パターン集 データ集計・請求書処理・入力チェックへの応用例
ここでは、これまで紹介した関数を組み合わせた、実務で使える具体的なユースケースを紹介します。
6-1. 部門別・期間別の売上集計
' SumIfsで部門別・期間別の売上を集計する
Sub SummarizeSalesByDept()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("売上データ")
Dim depts As Variant
depts = Array("営業部", "開発部", "経理部")
Dim i As Long
For i = LBound(depts) To UBound(depts)
Dim total As Double
total = Application.WorksheetFunction.SumIfs( _
ws.Range("C:C"), ws.Range("A:A"), depts(i), _
ws.Range("B:B"), ">=" & DateSerial(2026, 4, 1))
Debug.Print depts(i) & ":" & Format(total, "#,##0") & "円"
Next i
End Sub
6-2. 入力データの数値チェックとハイライト
' IsNumericで不正データをチェックしてハイライトする
Sub ValidateNumericInput()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Dim i As Long
For i = 2 To lastRow
If Not IsNumeric(ws.Cells(i, 2).Value) Then
ws.Cells(i, 2).Interior.Color = RGB(255, 200, 200)
End If
Next i
End Sub
6-3. ファイル名を日付関数で規則的にリネーム
' Format+Now で日付付きのファイル名を生成する
Sub GenerateDatedFileName()
Dim baseName As String
baseName = "月次レポート"
Dim fileName As String
fileName = baseName & "_" & Format(Now, "yyyymmdd") & ".xlsx"
Debug.Print fileName ' 例:"月次レポート_20260801.xlsx"
End Sub
07 GENAI CASE DATA 【独自データ】GENAI社内のVBA関数活用の実態 関数の組み合わせ設計にどれだけの時間がかかっていたか
ここでは、弊社(株式会社GENAI)が実際にどの程度の業務時間をExcel/VBAの関数まわりの実装・検証に費やしていたか、社内の実運用データをもとに紹介します。関数そのものの知識よりも、「どの関数を、どう組み合わせれば目的の処理になるか」を設計する時間が、見えにくいコストになっているケースが多くあります。
| 項目 | 内容 |
|---|---|
| 利用プラン | Claude Max 20x(月額$200/約30,000円) |
| 利用開始 | 2025年後半〜 |
| 適用範囲 | 経営・営業・広告・開発・経理・秘書業務・個人業務まで全社 |
| 関数活用関連の主な用途 | Excel/VBAでの集計処理・入力チェック・帳票整形の自動化 |
弊社の経理業務では、請求書チェックや経費仕訳のように「決まった条件で数値を集計・検証する」作業が定常的に発生します。以前はSUMIFSやIsNumericのような関数を都度組み合わせてマクロを作成し、動作確認・修正を繰り返す形で対応していました。
| 業務領域 | 主な用途 | 概算削減時間(肌感ベース) |
|---|---|---|
| 経理 | 請求書チェック・経費仕訳・Freee連携 | 月40h → 月5h |
| 開発 | WordPress/HTML/LP制作、スクリプト書き捨て | 都度数時間削減 |
| 秘書業務 | 日報生成・議事録・スケジュール調整 | 日2h → 日15分 |
上記は弊社の肌感ベースの数値であり、業種・業態・担当者のスキルによって削減時間は変動します。「完全自動化」ではなく、人間のレビュー・微調整を伴う運用である点にもご留意ください。
特に経理領域の集計・チェック処理は、この記事で紹介したSUMIFSやIsNumericのような関数の組み合わせがそのまま活きる領域です。ただし実務では、「今回のデータにはどの関数をどの順番で組み合わせるか」を都度設計する作業が、これまでのボトルネックでした。
08 COMMON PITFALLS 【独自】非エンジニアが関数選びでハマる3つの罠 つまずきやすいポイントとチェックリスト
VBAの関数は種類が多いため、非エンジニアの方が独学で使い始めると、共通してつまずくポイントがあります。ここでは代表的な3つの罠と、その回避方法を整理します。
8-1. 罠1:VBA関数とワークシート関数を混同してエラーになる
最も多いのが、ワークシート関数をWorksheetFunctionなしでそのまま書いてしまい、コンパイルエラーになるパターンです。SUMIFSやVLOOKUPをExcelの数式感覚でそのままVBAに書いてしまい、「未定義の変数です」といったエラーで止まってしまうケースが典型的です。
' NG例:ワークシート関数をそのまま書いてしまう
Sub WrongExample()
' Dim total As Double
' total = SumIfs(Range("A:A"), Range("B:B"), "営業部") ' エラーになる
' OK例:WorksheetFunctionを付ける
Dim total As Double
total = Application.WorksheetFunction.SumIfs(Range("A:A"), Range("B:B"), "営業部")
Debug.Print total
End Sub
8-2. 罠2:引数の順番や型を間違える
関数によって、引数の並び順や必須・省略可能の区別が異なります。特にVLookupは「検索値・検索範囲・列番号・完全一致かどうか」という4つの引数の順序を間違えやすく、第4引数(完全一致指定)を省略すると意図しない曖昧一致になってしまうことがあります。
VLookupの第4引数を省略(またはTrueを指定)すると、「近似一致」で検索されます。マスタデータが昇順に並んでいない場合、意図しないデータがヒットしてしまう危険があるため、完全一致で検索したい場合は必ずFalseを明示してください。
8-3. 罠3:型変換関数を使わずに数値と文字列を混在させる
セルから取得した値は既定でVariant型(あらゆる型を格納できる型)として扱われることが多く、見た目は数値でも実体は文字列として格納されているケースがあります。この状態で計算しようとすると、エラーになったり、文字列の連結("1"&"2"="12")になってしまったりします。
📚 用語解説
Variant型:VBAにおいて、数値・文字列・日付・オブジェクトなど、あらゆる種類のデータを格納できる汎用的な変数の型。セルの値をDimで型指定せずに受け取ると、既定でVariant型として扱われる。便利な反面、意図しない型(数値のつもりが文字列)が混入しやすい原因にもなる。
WorksheetFunction
が必要か確認
必須/省略を
ヘルプで確認
型を事前
チェック
戻り値を
Debug.Print確認
09 WITH CLAUDE CODE 関数を1つずつ覚えなくても、Claude Codeに選ばせる VBA関数一覧を暗記する代わりに、日本語の指示で組み立てを代行させる
ここまで見てきた通り、VBAの関数は文字列系・数値系・日付系だけでも数十種類あり、さらにワークシート関数まで含めると覚えるべき対象は膨大です。8章で挙げたような「WorksheetFunctionの付け忘れ」「引数の順番違い」「型変換の抜け」といった落とし穴を踏まずに、毎回正しい関数を選んでコードに落とし込むのは、VBAに慣れていない人ほどハードルが高いのが実情です。
この「やりたいことに対して、どの関数をどう組み合わせるかを考え、コードに落とし込み、テストする」という一連の作業は、Claude Codeのようなエージェント型AIツールに日本語でそのまま依頼できる領域です。関数一覧を暗記する必要はなく、「このデータに対してこういう処理をしたい」という要件をそのまま伝えるだけで、適切な関数の組み合わせを提案してもらえます。
📚 用語解説
Claude Code:Anthropic社が提供するAIエージェントツール。チャット形式で「〇〇をやって」と指示するだけで、ファイルの内容を読み取り、コードの作成・修正・実行までを自律的に行う。ターミナル版だけでなく、ターミナル操作が不要なデスクトップ版も提供されており、非エンジニアでも日本語の指示だけで業務を任せられる。VBAの関数名や引数の順番を暗記していなくても、目的を伝えるだけで正しいコードが得られる。
' Claude Codeへの依頼イメージ(実際はチャットで日本語のまま指示するだけ)
' 依頼例:
' 「売上データのA列に部門名、B列に日付、C列に金額が入っています。
' 2026年4月以降の営業部の売上合計を出して、
' 金額はカンマ区切りで表示するVBAマクロを書いて」
' Claude Codeが生成するコード例
Sub DeptSalesSummary()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim total As Double
total = Application.WorksheetFunction.SumIfs( _
ws.Range("C:C"), ws.Range("A:A"), "営業部", _
ws.Range("B:B"), ">=" & DateSerial(2026, 4, 1))
MsgBox "営業部の2026年4月以降の売上合計:" & Format(total, "#,##0") & "円"
End Sub
この依頼の中で、「WorksheetFunction.SumIfsを使うべきか」「日付の比較条件はどう書くか」「金額の表示はFormat関数で整形するか」といった、この記事で説明してきた判断がすべて自動的に反映されている点に注目してください。関数一覧を横断的に覚えていなくても、目的さえ言語化できれば正しい実装にたどり着けます。
「この列にはこういう値が入っている」という具体例(実際のセルの値やシートのスクリーンショット)を一緒に伝えると、想定外の型(数値のつもりが文字列など)を踏まえたコードが得られやすくなります。抽象的な説明だけより、実データを見せる方が精度の高い提案が返ってきます。
10 PRACTICAL WORKFLOW Claude Codeで業務マクロを組む実践フロー ターミナル操作なし・デスクトップ版で完結する4ステップ
「Claude Codeが便利なのは分かったが、エンジニアじゃないので導入が不安」という方向けに、実際にどのような手順で業務マクロを組み立てていくのかを整理します。ターミナル(黒い画面)の知識は一切不要です。
日本語で伝える
対象のシート・
データ例・条件
コード生成
関数の選定・
組み合わせを自動判断
動作確認
結果を見ながら
微調整を依頼
組み込み
継続的に利用
10-1. Step1:まず1つの処理だけを具体的に伝える
いきなり複数の処理をまとめて依頼するのではなく、「このシートのこの列に対して、この条件で処理したい」という1つの具体的な要望から始めるのがコツです。「請求書チェックを自動化したい」のような抽象的な依頼より、「B列の金額が全て正の数値になっているかチェックして、違う値があれば色を付けて」のような具体的な依頼の方が、精度の高いコードがすぐに得られます。
10-2. Step2:出てきたコードをそのまま実行して確認する
Claude CodeはExcelファイルを直接読み書きしたり、VBAコードをその場で提示したりできます。生成されたコードをVBEditor(Alt+F11)に貼り付けて実行するか、Claude Code自体にファイル操作を任せる形で、実際のデータに対して結果を確認します。
10-3. Step3:期待と違う結果が出たら、そのまま日本語で伝える
「思っていた結果と違う」と感じたら、専門用語を使わずに「〇〇のケースだと結果がおかしい」とそのまま伝えるだけで十分です。8章で紹介したような型変換や引数順序の問題も、Claude Codeが原因を特定して修正してくれます。
10-4. Step4:うまくいった処理を横展開する
1つの処理で効果が確認できたら、同じ考え方を他の業務にも広げていくのが次のステップです。たとえば「請求書チェック」で使ったSUMIFS+IsNumericの組み合わせは、経費精算や在庫チェックなど、似た構造のデータであれば同様に応用できます。
弊社では、こうした「決まった条件で集計・検証する」類のVBA業務についても、関数の選定から実装、テストデータでの検証までをClaude Codeに任せる形で運用しています。7章で紹介した経理領域の削減事例も、こうした細かな関数活用の積み重ねによるものです。
11 CONCLUSION まとめ VBA関数の基本を押さえつつ、選定の負担は仕組みで減らす
この記事では、VBAの関数について、VBA組み込み関数とワークシート関数(WorksheetFunction)の違い、文字列・数値・日付系の主要関数、使い分けの基準、業務での実践パターンまでを整理しました。最後にポイントを振り返ります。
VBAの関数は種類が多く、最初はどれを使えばいいか迷うものですが、「単純な処理はVBA組み込み関数、範囲を対象にした集計・検索はワークシート関数」という基準さえ押さえれば、実務で困る場面は大きく減ります。まずは本記事のコード例を実際に動かしながら、自分の業務データに当てはめて試してみてください。
VBA関数の選定・業務マクロの自動化、Claude Codeで一緒に進めませんか
「このデータ集計をVBAでやりたいが、どの関数を組み合わせればいいかわからない」「既存のマクロの関数の使い方を見直したい」——弊社AI鬼管理では、Claude Codeを使った業務VBA・Excel自動化の設計から導入までを支援しています。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
よくある質問
Q. VBA組み込み関数とワークシート関数、どちらを優先して覚えるべきですか?
A. まずはLeft・Right・Mid・Round・Format・DateAddといったVBA組み込み関数から覚えるのがおすすめです。これらは記述がシンプルで実行速度も速く、業務マクロの基礎になります。SUMIFSやVLOOKUPのようなワークシート関数は、すでにExcelで使い慣れている方であれば、WorksheetFunction経由の書き方だけ後から覚えれば十分です。
Q. ワークシート関数をVBAで使うとエラーになるのですが、なぜですか?
A. SUMIFSやVLOOKUPなどのワークシート関数は、そのままVBAのコードに書くとエラーになります。関数名の前に「Application.WorksheetFunction.」を付ける必要があります。IF・AND・ORなど、VBA側に同等機能(If文・And演算子)がある一部の関数は、WorksheetFunction経由では使えないので注意してください。
Q. VLookupをVBAで使うとエラーで処理が止まってしまいます。どう対処すればいいですか?
A. WorksheetFunction経由のVLookupは、検索対象が見つからない場合に実行時エラーを起こします。On Error Resume Nextと組み合わせてエラーをキャッチし、見つからなかった場合の処理(例:"該当なし"を返す)を用意しておくことで、処理が止まらないようにできます。
Q. IntとFixはどちらも小数点以下を切り捨てる関数ですが、違いは何ですか?
A. 正の数では同じ結果になりますが、負の数では挙動が異なります。Intは負の無限大方向に切り捨てる(Int(-1.5)は-2)のに対し、Fixは0方向に切り捨てる(Fix(-1.5)は-1)という違いがあります。マイナス値を扱う処理では、必要な挙動に応じて使い分けてください。
Q. セルの値を数値として計算しようとするとエラーになります。原因は何が考えられますか?
A. セルの値がVariant型として文字列扱いになっている可能性があります。IsNumeric関数で数値として解釈できるかを事前にチェックしてから、CDblやCIntなどの型変換関数で明示的に数値型に変換することで、多くの場合は解決します。
Q. Format関数の書式コードを覚えるのが大変です。簡単に調べる方法はありますか?
A. 書式コードを全て暗記する必要はありません。よく使う"#,##0"(桁区切り)や"yyyy/mm/dd"(日付)などいくつかのパターンを手元にメモしておくか、目的を伝えてClaude Codeのようなツールに書式コードごと生成してもらう方法もあります。
Q. VBAの関数選びをAIに任せることはできますか?
A. できます。Claude Codeのようなエージェント型AIツールであれば、対象のデータ構造と実現したい処理を日本語で伝えるだけで、VBA組み込み関数とワークシート関数を適切に組み合わせたコードを生成してもらえます。引数の順番や型変換など、細かい仕様も含めて考慮したコードが得られやすいのが利点です。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




