【2026年8月最新】VBA関数の使い方完全ガイド|組み込み関数一覧とワークシート関数(WorksheetFunction)の使い分け

【2026年8月最新】VBA関数の使い方完全ガイド|組み込み関数一覧とワークシート関数(WorksheetFunction)の使い分け

「セルの日付から3ヶ月後の日付を計算したい」「文字列の余分な空白を消したい」「Excelの標準機能にあるSUMIFSやVLOOKUPを、VBAのコードの中からも使いたい」——Excel VBAでマクロを組んでいると、こうした「関数」に関する疑問に必ず突き当たります。

厄介なのは、VBAには「VBA自体が持っている組み込み関数」「Excelのワークシート関数をVBAから呼び出す仕組み(WorksheetFunction)」という、性質の異なる2種類の関数の使い方が存在することです。どちらも「関数」と呼ばれるため混同しやすく、「なぜこの関数はVBAにそのまま書けるのに、あの関数はWorksheetFunctionを付けないとエラーになるのか」と混乱した経験がある方も多いはずです。

代表菅澤 代表菅澤
弊社でも業務マクロを組むとき、この「VBA関数かワークシート関数か」の見極めで手が止まる場面がよくあります。慣れれば数秒で判断できますが、覚えることが多いので最初は誰でもつまずくポイントです。
AI鬼管理山崎 AI鬼管理山崎
この記事では、VBAの組み込み関数を用途別に整理し、WorksheetFunctionの使い方、そして両者の使い分けの基準まで一気に押さえます。最後に「そもそも関数を1つずつ覚えなくても済む方法」についても触れていきます。

この記事を最後まで読むと、次の内容が理解できます。

✔️VBA関数とワークシート関数の違い:2種類の関数の性質と見分け方
✔️文字列・数値・日付系の主要関数:業務でよく使う関数を用途別に整理
✔️WorksheetFunctionの使い方:ExcelのSUMIFSやVLOOKUPをVBAから呼ぶ方法
✔️関数選びの使い分け基準:同じ処理でもどちらを選ぶべきかの判断軸
✔️業務での実践活用パターン:データ集計・請求書処理・入力チェックへの応用
✔️関数選定自体をAIに任せる方法:日本語の指示だけでVBAコードを組み立てる選択肢
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理
📌 この記事の結論
【2026年8月最新】VBA関数の使い方完全ガイド|組み込み関数一覧とワークシート関数(WorksheetFunction)の使い分け
VBAの関数の使い方を徹底解説。文字列・数値・日付の組み込み関数一覧、WorksheetFunctionでExcel関数を呼び出す方法、関数選びで迷わないための使い分け表まで整理。関数選定自体をClaude Codeに任せる方法も紹介します。

01 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を経由しないと呼び出せません。

やりたい処理を
整理する

文字列処理か
集計処理か
VBA組み込み
関数を探す

該当すれば
そのまま使える
なければ
WorksheetFunction

Excel関数を
そのまま流用
どちらもなければ
自作Function

独自ロジックを
組み立てる
AI鬼管理山崎 AI鬼管理山崎
この記事では自作Function(ユーザー定義関数)の作り方までは踏み込みません。Functionプロシージャの定義・引数・戻り値については別記事で詳しく扱っているので、まずはVBAとExcelそれぞれが持っている「既製の関数」をどう使い分けるかに集中します。
💡 迷ったらまずVBA組み込み関数を探す

VBA組み込み関数の方が実行速度が速く、記述も短くなる傾向があります。似た機能がVBA組み込み関数とワークシート関数の両方にある場合(例:RoundとWorksheetFunction.Round)は、基本的にVBA組み込み関数を優先するのがセオリーです。ただしRoundは境界値(.5)を偶数側に丸める「銀行丸め」、WorksheetFunction.Roundは0から遠い方向に丸める通常の四捨五入と、挙動が異なる点には注意してください。

02 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関数の戻り値は文字列型

Format関数は数値を渡しても戻り値は必ず文字列型(String)になります。整形後の値を再び計算に使いたい場合は、CDbl関数などで数値型に戻す必要がある点に注意してください。整形結果をそのまま加算しようとしてエラーになる、というのはよくある失敗パターンです。

✔️Left / Right:先頭・末尾から固定文字数を取り出す
✔️Mid:任意の開始位置から取り出す(可変長データの抽出に強い)
✔️InStr:文字列の中の位置を調べる(Mid・Leftと組み合わせて使うことが多い)
✔️Trim系:入力データの余分な空白除去(データクレンジングの定番)
✔️Format:数値・日付を人が読みやすい文字列に変換する

03 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
DateDiff2つの日付の差を計算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/Fixの負数での挙動差に注意

Int(-1.5)は-2、Fix(-1.5)は-1になります。マイナス値を扱う可能性がある計算(在庫の増減・損益計算など)でIntとFixを混同すると、集計結果が1ずれるバグにつながります。負数を扱う処理では、どちらの挙動が必要かを意識して選んでください。

代表菅澤 代表菅澤
日付計算や型変換の関数は、地味ですが業務システムの土台になる部分です。特にDateAddとDateDiffの組み合わせは、支払期日・契約更新日・リマインド通知など、あらゆる「〇日後に何かする」系の処理で必ずと言っていいほど登場します。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

04 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
💡 WorksheetFunctionが使えない関数もある

IF・AND・ORなど、VBA自体に同等の機能(If文・And演算子・Or演算子)がある関数はWorksheetFunction経由で使えないことがあります。使いたい関数名がエラーになる場合は、まずVBA側に同等の書き方がないかを確認してみてください。

AI鬼管理山崎 AI鬼管理山崎
ExcelのVLOOKUPやSUMIFSに慣れている方であれば、WorksheetFunctionは「知っている関数をそのままコードに書けるだけ」なので、実はVBA組み込み関数より覚えるハードルが低いというのが弊社の実感です。

05 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行呼び出す方が、コード量も実行速度も有利なケースが多くあります。

🏆
VERDICT
使い分けが正解
優劣ではなく適材適所。単純な値の計算・変換はVBA関数、セル範囲を対象にした集計・検索はワークシート関数という住み分けがコードをシンプルに保つ。

📚 用語解説

戻り値:関数が処理を終えたときに呼び出し元へ返す値のこと。Round(1234.567, 1)を呼び出すと1234.6という戻り値が返る。VBA組み込み関数・ワークシート関数のいずれも、関数名の後ろに書いた引数を処理した結果を戻り値として返す点は共通している。

また、実行速度の観点でも違いがあります。ワークシート関数のWorksheetFunction経由の呼び出しは、VBA組み込み関数の直接呼び出しよりもわずかにオーバーヘッド(処理の余分な負荷)が発生します。数千件・数万件規模のループの中で毎回WorksheetFunctionを呼ぶような設計は、処理速度に影響することがあるため注意が必要です。

⚠️ 大量ループ内でのWorksheetFunction多用に注意

数万行のループの中でWorksheetFunction.VLookupを毎回呼び出すような設計は、処理時間が大幅に伸びる原因になります。可能であれば、事前にDictionaryオブジェクトへデータを読み込んでおき、ループ内はDictionary参照だけで完結させる設計に変更すると、体感できるレベルで速度が改善します。

06 業務での実践活用パターン集 データ集計・請求書処理・入力チェックへの応用例

ここでは、これまで紹介した関数を組み合わせた、実務で使える具体的なユースケースを紹介します。

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
✔️SUMIFS:部門別・期間別・条件別の集計処理をループなしで完結させる
✔️IsNumeric:入力データの数値チェックとエラーハイライト
✔️Format:日付・金額を人が読みやすい形式に整形して出力する
✔️DateAdd/DateDiff:支払期日・契約更新日の自動計算とリマインド
✔️VLOOKUP(WorksheetFunction経由):マスタ表から関連データを検索・転記する
代表菅澤 代表菅澤
こうしたパターンは、1つひとつは単純な関数の組み合わせですが、「どの関数をどう組み合わせるか」を毎回ゼロから考えるのは地味に時間がかかります。弊社では最近、このパターン設計自体をClaude Codeに相談しながら進めることが増えています。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

07 【独自データ】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のような関数の組み合わせがそのまま活きる領域です。ただし実務では、「今回のデータにはどの関数をどの順番で組み合わせるか」を都度設計する作業が、これまでのボトルネックでした。

代表菅澤 代表菅澤
関数そのものは覚えれば使えますが、「このデータ構造にはSUMIFSとVLOOKUPどちらが適切か」「ループで書くべきかワークシート関数1本で済むか」といった設計判断は、経験がないと時間がかかります。弊社では、この設計判断の部分もClaude Codeに相談しながら進めることで、担当者が本来の業務判断に集中できる時間を増やしています。

08 【独自】非エンジニアが関数選びでハマる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引数を省略しない

VLookupの第4引数を省略(またはTrueを指定)すると、「近似一致」で検索されます。マスタデータが昇順に並んでいない場合、意図しないデータがヒットしてしまう危険があるため、完全一致で検索したい場合は必ずFalseを明示してください。

8-3. 罠3:型変換関数を使わずに数値と文字列を混在させる

セルから取得した値は既定でVariant型(あらゆる型を格納できる型)として扱われることが多く、見た目は数値でも実体は文字列として格納されているケースがあります。この状態で計算しようとすると、エラーになったり、文字列の連結("1"&"2"="12")になってしまったりします。

📚 用語解説

Variant型:VBAにおいて、数値・文字列・日付・オブジェクトなど、あらゆる種類のデータを格納できる汎用的な変数の型。セルの値をDimで型指定せずに受け取ると、既定でVariant型として扱われる。便利な反面、意図しない型(数値のつもりが文字列)が混入しやすい原因にもなる。

関数名の前に
WorksheetFunction
が必要か確認
引数の順番・
必須/省略を
ヘルプで確認
IsNumericで
型を事前
チェック
テストデータで
戻り値を
Debug.Print確認
✔️ワークシート関数:Application.WorksheetFunction を付け忘れていないか
✔️引数の順番:特にVLookupの第4引数(完全一致指定)を省略していないか
✔️型変換:セルの値をIsNumericでチェックしてからCDbl等で変換しているか
✔️Int/Fixの違い:負の数を扱う処理で意図した切り捨て方向になっているか
✔️テストケース:正常なデータ・異常なデータ両方でDebug.Print確認をしたか
AI鬼管理山崎 AI鬼管理山崎
この3つの罠は、弊社の導入支援先でも本当によく見かけるパターンです。「関数自体は正しいのに、引数の順番や型変換の抜けで動かない」というのは、経験を積むまでは避けにくいミスなので、テストデータでの検証を習慣にすることをおすすめします。

09 関数を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関数で整形するか」といった、この記事で説明してきた判断がすべて自動的に反映されている点に注目してください。関数一覧を横断的に覚えていなくても、目的さえ言語化できれば正しい実装にたどり着けます。

💡 依頼するときはサンプルデータを一緒に見せる

「この列にはこういう値が入っている」という具体例(実際のセルの値やシートのスクリーンショット)を一緒に伝えると、想定外の型(数値のつもりが文字列など)を踏まえたコードが得られやすくなります。抽象的な説明だけより、実データを見せる方が精度の高い提案が返ってきます。

代表菅澤 代表菅澤
VBA関数一覧を印刷して手元に置いて調べながらコードを書く、という作業自体が、今の時代はもう必須ではなくなってきていると感じます。「どの関数を使うべきか」という部分こそAIに相談すればいい領域で、人間が判断すべきなのは「そもそも何をしたいか」という要件の部分です。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

10 Claude Codeで業務マクロを組む実践フロー ターミナル操作なし・デスクトップ版で完結する4ステップ

「Claude Codeが便利なのは分かったが、エンジニアじゃないので導入が不安」という方向けに、実際にどのような手順で業務マクロを組み立てていくのかを整理します。ターミナル(黒い画面)の知識は一切不要です。

やりたいことを
日本語で伝える

対象のシート・
データ例・条件
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が原因を特定して修正してくれます。

✔️最初の依頼は「1つの処理・1つのシート」に絞る
✔️サンプルデータや実際のセルの値を具体的に伝える
✔️生成されたコードは必ず一度、少量のテストデータで動作確認する
✔️結果がおかしいときは専門用語を使わず「〇〇の場合がおかしい」と伝える
✔️うまくいったパターンは、似た業務にも横展開する

10-4. Step4:うまくいった処理を横展開する

1つの処理で効果が確認できたら、同じ考え方を他の業務にも広げていくのが次のステップです。たとえば「請求書チェック」で使ったSUMIFS+IsNumericの組み合わせは、経費精算や在庫チェックなど、似た構造のデータであれば同様に応用できます。

AI鬼管理山崎 AI鬼管理山崎
弊社では、最初に経理の請求書チェックで試したパターンを、営業の見積データチェックや広告レポートの集計にもそのまま横展開しました。関数の組み合わせという「考え方」自体は使い回せるので、1つ成功パターンができると展開が早いです。

弊社では、こうした「決まった条件で集計・検証する」類のVBA業務についても、関数の選定から実装、テストデータでの検証までをClaude Codeに任せる形で運用しています。7章で紹介した経理領域の削減事例も、こうした細かな関数活用の積み重ねによるものです。

代表菅澤 代表菅澤
VBA関数を1つずつ暗記する必要がなくなると、業務マクロを作るハードルは大きく下がります。「どの関数を使うか」より「どんな結果が欲しいか」を考える時間に集中できるようになるのが、Claude Codeを使う最大のメリットだと感じています。

11 まとめ VBA関数の基本を押さえつつ、選定の負担は仕組みで減らす

この記事では、VBAの関数について、VBA組み込み関数とワークシート関数(WorksheetFunction)の違い、文字列・数値・日付系の主要関数、使い分けの基準、業務での実践パターンまでを整理しました。最後にポイントを振り返ります。

✔️VBAの「関数」にはVBA組み込み関数・ワークシート関数・自作Functionの3種類がある
✔️ワークシート関数はApplication.WorksheetFunction経由で呼び出す必要がある
✔️文字列操作はLeft/Right/Mid/InStr/Trim/Format、数値・日付はRound/DateAdd/DateDiff/IsNumericが頻出
✔️単純な計算・変換はVBA組み込み関数、セル範囲の集計・検索はワークシート関数が向いている
✔️VLookupは検索対象が見つからないと実行時エラーになるためエラーハンドリングが必須
✔️型変換関数を使う前にIsNumericで事前チェックすると異常終了を防げる
✔️関数一覧を暗記しなくても、Claude Codeに日本語で目的を伝えれば適切な組み合わせを提案してくれる

VBAの関数は種類が多く、最初はどれを使えばいいか迷うものですが、「単純な処理はVBA組み込み関数、範囲を対象にした集計・検索はワークシート関数」という基準さえ押さえれば、実務で困る場面は大きく減ります。まずは本記事のコード例を実際に動かしながら、自分の業務データに当てはめて試してみてください。

代表菅澤 代表菅澤
VBA関数の基礎知識は、覚えておいて損はありません。ただ、実際の業務では「この処理にはどの関数の組み合わせが最適か」を都度考える時間の方が長くなりがちです。そうした設計・実装の手間を減らしたい方は、AI鬼管理まで気軽にご相談ください。

VBA関数の選定・業務マクロの自動化、Claude Codeで一緒に進めませんか

「このデータ集計をVBAでやりたいが、どの関数を組み合わせればいいかわからない」「既存のマクロの関数の使い方を見直したい」——弊社AI鬼管理では、Claude Codeを使った業務VBA・Excel自動化の設計から導入までを支援しています。

AI鬼管理山崎 AI鬼管理山崎
サンプルデータを見せていただければ、その場で関数の組み合わせイメージをお伝えできます。まずは無料相談で、今かかっている集計・チェック作業の時間感覚をお聞かせください。

NEXT STEP

この記事の内容を、あなたのビジネスで
実践してみませんか?

AI鬼管理 — Claude Code導入支援トレーニング

AI活用を自社で回せるようになりたい方へ

AI鬼管理

Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。

AIBPO by AI鬼管理 — 定型業務の丸ごと代行

業務を丸ごと任せたい方へ

AIBPO by AI鬼管理

請求処理・データ入力・問い合わせ対応などの定型業務を、AI×人の品質管理体制で丸ごと代行。いまのコストの75%目安で、日々は成果物を承認するだけ。

よくある質問

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組み込み関数とワークシート関数を適切に組み合わせたコードを生成してもらえます。引数の順番や型変換など、細かい仕様も含めて考慮したコードが得られやすいのが利点です。

AIAI鬼管理

AI鬼管理へのお問い合わせ

この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。

会社名を入力してください
業種を選択してください
お名前を入力してください
※法人・事業用のメールアドレスでお願いします(Gmail等の個人用フリーメールは受付できません)
正しいメールアドレスを入力してください

1つ以上選択してください
1つ以上選択してください
月額コストを選択してください

約1時間のオンライン面談(Google Meet)です

空き枠を取得中...
面談日時を選択してください

予約確定後、Google Calendarの招待メールをお届けします。
しつこい営業は一切ございません。

監修 最終更新日: 2026年8月8日
菅澤孝平
菅澤 孝平 株式会社GENAI 代表取締役
  • AI業務自動化サービス「AI鬼管理」を運営 — Claude Code を活用し、経営者の業務を「AIエージェントに任せる仕組み」へ転換するパーソナルトレーニングを 伴走構築 で提供。日報・採用・問い合わせ対応・経費精算・議事録・データ集計・営業リスト等の定型業務を、AIに代行させる体制を経営者と一緒に作り込む
  • Claude Code 実装ノウハウを 経営者・法人クライアント に直接指導。生成AIを「便利ツール」ではなく 「業務を任せる存在」 として運用する手法を体系化
  • 「やらせ切る管理」メソッドの開発者。シンゲキ株式会社(2021年設立・鬼管理専門塾運営)にて累計3,000名以上の学習者を志望校合格に導いた管理メソッドを、AI × 経営者支援 に転用
  • 著書『3カ月で志望大学に合格できる鬼管理』(幻冬舎)、『親の過干渉こそ、最強の大学受験対策である。』(講談社)
  • メディア出演: REAL VALUE / カンニング竹山のイチバン研究所 / ええじゃないかBiz 他
  • 明治大学政治経済学部卒
現在は AI鬼管理(Claude Code活用の伴走型パーソナルトレーニング)を主事業とし、経営者と二人三脚で「AIに業務を任せる仕組み」を実装。「実行を強制する環境」を AI で構築する手法を、自社の実運用知見をもとに発信している。