「VBAで計算や処理を簡潔にまとめて、再利用したいけど、どうやって始めればいいんだろう…」
このように悩んでいませんか?

・コードが長くなり管理が大変!
・同じ処理を何度も書いている…非効率だなと感じる!
・処理結果をほかの「プロシージャ」や「セル」でも使いたい!



今回は、VBAの「Functionプロシージャ」について
解説します!
この記事では、VBAの「Functionプロシージャ」をについて解説をします。
Functionプロシージャは、処理結果を返すことでコードをスッキリまとめられる便利な仕組みです。
この記事では、VBA初心者でも簡単に使えるように、Functionプロシージャの「基本構文」から「使い方」「使いどころ」、さらには「戻り値」「引数」の設定方法まで、徹底的に解説します。
初心者の方でもすぐに使えるサンプルコードを用意していますので、ぜひ参考にしてください!
【 この記事の概要 】
よく使う度 | |
難しさ | |
覚えておくと安心度 |
VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?
そんな方には、UdemyのVBA講座がおすすめです。
動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!


\ 自分のペースで学べるVBA講座はこちら /
この記事を読むとできること
この記事を読むことで、次のことができるようになります。
- 「Function」と「Sub」の違いを把握する
- VBAのFunctionプロシージャの基礎を理解する
- Functionプロシージャを使うことのメリットを学ぶ
- Functionを使用する際の注意ポイントを確認する
- Functionの使用例を知り、自分でコードを記述できるようになる
VBAの「Functionプロシージャ」と「Subプロシージャ」の違いを解説
「Functionプロシージャ」とは、処理を行ってその結果(値)を返すことができるプログラムのブロックです。
例えば、複雑な計算を行い、その結果を別のプロシージャやセルで使いたいときに役立ちます。
VBAには「Subプロシージャ」というもう1つの仕組みもありますが、Functionプロシージャとは明確な違いがあります。
それぞれの特徴を理解し、適切に使い分けることで、VBAのコードがスッキリし、効率的に管理できるようになります。
Subプロシージャとは?
Subプロシージャは、処理を行うだけで結果を返さないプログラムのブロックです。
たとえば、セルの値を変更したり、メッセージを表示する処理に向いています。
- 処理を行うだけで、結果を返す必要がない場合
- 「セルの値を更新」「メッセージを表示」などの単純な処理を行いたい場合
Subプロシージャは、他のプロシージャから呼び出すことができます。
その際に使用するのが「Callステートメント」です。
Callステートメントを使うことで、複数のSubプロシージャを順次実行することが可能です。
Callステートメントについては、別の記事で詳しく解説を行っています。
合わせてご覧ください。


例:Subプロシージャのコード
Sub ShowMessage()
MsgBox "これはSubプロシージャの例です"
End Sub


このコードは「MsgBox」を使ってメッセージを表示するだけのシンプルな例です。
Subプロシージャはこのように「結果を返す必要がない処理」に適しています。
Functionプロシージャとは?
一方で、Functionプロシージャは、処理を行った後に結果(値)を返すことができます。
これにより、計算結果や処理結果を他のプロシージャやセルで再利用することが可能になります。
- 計算結果や処理結果を返したい場合
- 複数のプロシージャで同じ計算ロジックを使いたい場合
例:Functionプロシージャのコード
Function AddNumbers(num1 As Double, num2 As Double) As Double
AddNumbers = num1 + num2
End Function
この関数は2つの数値を足し合わせ、その結果を返します。
例えば、他のプロシージャから次のように呼び出すことで結果を取得できます。
SubとFunctionの使い分け早見表
特徴 | Subプロシージャ | Functionプロシージャ |
---|---|---|
処理の目的 | 処理を行うだけ | 処理を行い、結果を返す |
値の返却 | 不可 | 可能 |
呼び出し方 | Call Sub名 または直接呼び出し | 結果 = Function名 |
使用例 | セルの値変更、メッセージ表示など | 計算、条件分岐、結果の再利用が必要な処理 |
VBAのFunctionプロシージャとは?使い方と基本構文
VBAの「Functionプロシージャ」とは、処理を行ってその結果(値)を返すプログラムのブロックのことです。
例えば、複雑な計算を行い、その結果を別のプロシージャやExcelのセルで再利用したいときに便利です。
ここでは、Functionプロシージャの基本構文と、具体的なコード例を交えてその仕組みをわかりやすく解説します。
Functionプロシージャの基本構文


- 関数名
- Functionプロシージャには、自分でつける名前が必要です。
この名前を使って、後から関数を呼び出します。
関数名は自由に決めることができますが、意味のある名前にすると後でわかりやすくなります。
- Functionプロシージャには、自分でつける名前が必要です。
- (引数 As データ型)
- 引数とは、Functionに渡す「データ」です。
外部から関数にデータを入力し、それをもとに処理を行います。 - データ型は、その引数がどの種類のデータを受け取るかを決めるものです。
たとえば、Long
は整数、String
は文字列を表します。
- 引数とは、Functionに渡す「データ」です。
- As データ型
- 「As データ型」は、Functionプロシージャが返すデータの種類です。
例えば、計算の結果として数値を返したい場合はLong
やDouble
を指定します。
- 「As データ型」は、Functionプロシージャが返すデータの種類です。
より詳しい情報は、Microsoft公式のFunction ステートメントを参照してください。
Functionプロシージャは、計算結果や処理結果を他のプロシージャやセルに返すことができるため、再利用性が高まります。
Functionプロシージャを実際に使用する際は、次のように記載します。
Functionプロシージャの実例コード
例:2つの数値の合計を計算する場合
Sub MainProcedure()
Dim result As Long
result = SumValues(10, 20)
MsgBox "合計は " & result
End Sub
Function SumValues(ByVal num1 As Long, ByVal num2 As Long) As Long
SumValues = num1 + num2
End Function
処理結果


詳細解説


- 関数の呼び出し
MainProcedure
でSumValues
関数を呼び出し、引数として「10」と「20」を渡しています。
関数を呼び出す際には、関数名(引数)
の形で記述します。
- 戻り値の利用
SumValues
関数が計算結果(2つの数値の合計)を返し、その結果をresult
変数に格納します。
このように、Functionプロシージャを使えば、計算や処理の結果を簡単に他のプロシージャで活用できます。
- 結果の表示
- 計算結果を
MsgBox
を使って表示しています。
この例では、「合計は 30」というメッセージが表示されます。
- 計算結果を
■ ポイント : ByValとByRefについて
このコードでは、引数num1
とnum2
にByVal
(値渡し)が指定されています。
- ByVal(値渡し)
- 引数の値をコピーして関数に渡します。元の変数の値は変更されません。
- ByRef(参照渡し)
- 引数として渡された変数自体を操作します。元の変数の値が変更される場合があります。
詳しくは、以下の記事でByValとByRefの違いや活用方法について解説していますので、興味がある方はご覧ください。


このように、SumValuesという関数を作ると、どこでも簡単に使うことができ、結果(合計値)を返してくれます。
VBA Functionプロシージャのメリットと活用法
Functionプロシージャを活用することで、VBAコードの効率化や再利用性の向上が実現します。
ここでは、その便利さを具体例を交えながらわかりやすく解説します。
1. 同じ処理を何度も再利用できる
Functionプロシージャを使えば、複雑な計算や処理を1つの関数にまとめられるため、コードを何度も書き直す必要がありません。
コード例 : 税金計算を関数化
Sub UseCalculateTax()
Dim totalAmount As Double
totalAmount = CalculateTax(1000) '// 税込み金額を計算
MsgBox "税込金額は " & totalAmount
End Sub
Function CalculateTax(amount As Double) As Double
'// 税率10%を計算して戻り値として返す
CalculateTax = amount * 1.1
End Function
解説
CalculateTax
関数を作成することで、どのプロシージャからも呼び出すだけで簡単に税金計算ができます。
コードの重複を防ぎ、保守性が向上します。
2. コードがスッキリし、管理が楽になる
処理をFunctionプロシージャに分けることで、コードが整理されて読みやすくなるだけでなく、エラーの原因が特定しやすくなります。
改善前(Subだけで書いた例)
Sub MainProcedure()
Dim total As Double, tax As Double
total = 1000
tax = total * 0.1
MsgBox "税込金額は " & total + tax
End Sub
改善後(Functionを活用した例)
Sub MainProcedure()
Dim result As Double
result = CalculateTotalWithTax(1000)
MsgBox "税込金額は " & result
End Sub
Function CalculateTotalWithTax(amount As Double) As Double
CalculateTotalWithTax = amount + CalculateTax(amount)
End Function
Function CalculateTax(amount As Double) As Double
CalculateTax = amount * 0.1
End Function
解説
処理を分割することで、コード全体がスッキリし、後から修正が必要になった場合でも特定のFunctionだけを変更すれば済みます。
3. 条件に応じた結果を返すことができる
Functionプロシージャを使えば、条件に基づいて異なる結果を返す柔軟なコードを書くことができます。
コード例 : 割引率を条件によって変える関数
Sub UseDiscountFunction()
Dim discountedPrice As Double
discountedPrice = CalculateDiscount(1200)
MsgBox "割引後の金額は " & discountedPrice
End Sub
Function CalculateDiscount(amount As Double) As Double
If amount > 1000 Then
CalculateDiscount = amount * 0.1 '// 10%割引
Else
CalculateDiscount = amount * 0.05 '// 5%割引
End If
End Function
解説
CalculateDiscount
を条件付きで記述することで、特定の金額に応じた結果を自動的に返すことができます。
4. 結果をセルや他のプロシージャで利用できる
VBAのFunctionプロシージャは、「ユーザー定義関数(UDF: User-Defined Function)」としてExcelのセルで直接利用することが可能です。
これにより、標準のExcel関数では対応できない計算や処理をカスタマイズして作成できます。
コード例 : セルでユーザー定義関数を利用
Function SumValues(num1 As Double, num2 As Double) As Double
SumValues = num1 + num2
End Function
Excelのセルに次の数式を入力すると、計算結果が表示されます。=SumValues(A1, A2)
ユーザー定義関数をさらに詳しく学ぶ
ユーザー定義関数(UDF)の基本から応用例までを詳しく解説している記事があります。
以下のリンクから詳細を確認して、さらに理解を深めましょう。


5. 配列を使って複数の結果を返す
通常、Functionプロシージャは1つの値しか返せませんが、配列を活用することで複数の結果を1つのFunctionで返すことができます。
コード例 : 配列を返すFunctionプロシージャ
Sub UseGetMinMax()
Dim results() As Double
results = GetMinMax(10, 20)
MsgBox "最小値は " & results(0) & ", 最大値は " & results(1)
End Sub
Function GetMinMax(num1 As Double, num2 As Double) As Variant
Dim result(1) As Double
result(0) = WorksheetFunction.Min(num1, num2)
result(1) = WorksheetFunction.Max(num1, num2)
GetMinMax = result
End Function
解説
このコードでは、最小値と最大値を配列として返し、呼び出し元でそれぞれの値を利用できます。
Functionプロシージャを使うメリットまとめ
- 再利用性の向上
- 同じ処理を繰り返し使える
- コードが整理される
- 読みやすく、保守しやすい
- 柔軟な処理が可能
- 条件による分岐や複数の値の返却に対応
- 他のプロシージャやセルで利用できる
- 効率的なデータ活用が可能
VBAのFunctionプロシージャを使う際の注意ポイント
VBAのFunctionプロシージャを正しく活用するためには、いくつかの重要な注意点を押さえる必要があります。
ここでは、特に「戻り値の設定とSubプロシージャの使い分け」「複数の結果を返す方法」について詳しく解説します。
1. VBA Functionプロシージャの戻り値とSubの使い分け
Functionプロシージャは、基本的に結果を返すことを目的として設計されています。
しかし、戻り値を設定しない場合でもエラーは発生しません。
この場合、戻り値のデータ型に応じた既定値(0や空文字列など)が返されるため、意図しない動作が発生する可能性があります。
一方で、戻り値が不要な場合は、無理にFunctionを使わずにSubプロシージャ
を利用するのが適切です。
それぞれのケースに応じて適切な選択をすることで、コードの可読性と保守性を向上させることができます。


戻り値が設定されていない場合の動作例
コード例 : 戻り値が設定されていない場合
Sub TestCalculateSquare()
Dim result As Double
result = CalculateSquare(5) '// Functionを呼び出し
MsgBox "計算結果は " & result
End Sub
Function CalculateSquare(num As Double) As Double
'// 結果を設定しない
End Function


このコードを実行すると、戻り値が設定されないため、Double
型の既定値である0
が返されます。
結果として「計算結果は 0」という意図しない動作になります。
解決策1: 必ず「戻り値」を設定する
戻り値を設定することで、Functionプロシージャが意図した通りに動作し、他のプロシージャやセルで再利用可能になります。
Sub TestCalculateSquare()
Dim result As Double
result = CalculateSquare(5) '// Functionを呼び出し
MsgBox "計算結果は " & result
End Sub
Function CalculateSquare(num As Double) As Double
CalculateSquare = num ^ 2 '// 戻り値を設定
End Function


このコードを実行すると、「計算結果は 25」と表示され、期待通りの動作になります。
解決策2: Subプロシージャを使用する
戻り値が不要な場合は、無理にFunctionプロシージャを使わず、Subプロシージャ
を使用するのが適切です。
Subプロシージャ
は、処理を行うだけで結果を返さないため、シンプルに記述できます。
Sub TestShowMessage()
Call ShowMessage("Hello, VBA!") '// Subプロシージャを呼び出し
End Sub
Private Sub ShowMessage(message As String)
MsgBox message '// メッセージを表示
End Sub


Subプロシージャ
は、処理を行うだけで結果を返しません。- 戻り値が不要な単純な処理(例: メッセージ表示など)に適しています。
- スコープを限定するために
Private Sub
を使うことで、モジュール外からの誤用を防ぐことができます。
2. VBAで複数の結果を返す方法|配列とByRefの活用
VBAのFunctionプロシージャでは、1つの値しか直接返せません。
しかし、以下の方法を使うことで、複数の結果を返すことが可能になります。
工夫1: 配列を使う方法
配列を使うことで、複数の値を1つの戻り値としてまとめて返すことができます。
コード例 : 配列を使用して複数の結果を返す
Sub UseGetMinMax()
Dim results() As Double
results = GetMinMax(10, 20)
MsgBox "最小値: " & results(0) & " 最大値: " & results(1)
End Sub
Function GetMinMax(num1 As Double, num2 As Double) As Variant
Dim result(1) As Double
result(0) = WorksheetFunction.Min(num1, num2) '// 最小値
result(1) = WorksheetFunction.Max(num1, num2) '// 最大値
GetMinMax = result '// 配列を返す
End Function
- 配列を使えば、関連する複数のデータを1つにまとめて扱うことが可能です。
- 配列を返す場合、戻り値のデータ型を
Variant
にする必要があります。


工夫2: ByRefを使う方法
ByRef
(参照渡し)を活用すると、関数内で複数の変数の値を直接変更することができます。
この方法では、Functionの戻り値以外に、複数の結果を同時に返すことが可能です。
コード例 : ByRef (参照渡し)を活用して、関数内で複数の値を直接変更する
Sub UseCalculateSumAndDifference()
Dim total As Double, diff As Double
Dim message As String
message = CalculateSumAndDifference(10, 5, total, diff)
MsgBox message & vbCrLf & "合計: " & total & " 差分: " & diff
End Sub
Function CalculateSumAndDifference(ByVal num1 As Double, ByVal num2 As Double, _
ByRef sum As Double, ByRef difference As Double) As String
sum = num1 + num2
difference = num1 - num2
CalculateSumAndDifference = "計算完了"
End Function


- Functionプロシージャの戻り値とは別に、
ByRef
で渡された引数を利用して複数の結果を返します。 - 計算結果を直接変数に反映できるため、効率的に値をやり取りできます。
使用例:VBAのFunctionプロシージャを使ってみよう
それでは実際にFunctionプロシージャを使ってみましょう。
以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例は、ぜひご覧いただき、実際に実行してみてください。
VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?
そんな方には、UdemyのVBA講座がおすすめです。
動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!


\ 自分のペースで学べるVBA講座はこちら /
使用例1: 引数を2つ渡して、合計を計算する
2つの数値を引数として関数に渡し、その合計を計算する方法を紹介します。
主な使用用途: 複数の場所で同じ計算を行いたいときに、Functionプロシージャとしてまとめて再利用できます。
コード例 | 引数を2つ渡して、合計を計算する
Sub MainProcedure()
Dim result As Long
result = SumValues(10, 20)
MsgBox "合計は " & result
End Sub
Function SumValues(ByVal num1 As Long, ByVal num2 As Long) As Long
SumValues = num1 + num2
End Function
処理結果


コードの動作概要
「MainProcedure」内で「result」というLong型変数を宣言し、初期化します。
関数「SumValues」を呼び出し、引数として「10」と「20」を渡します。
この関数は、2つの数値の合計を返します。
関数「SumValues」から返された合計値をメッセージボックスで表示します。
このコードで使用している機能
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub MainProcedure()
- これは新しいサブルーチン「MainProcedure」を定義しています。
Subは「サブルーチン(Subroutine)」の略で、VBAにおける一連の処理をまとめた小さなプログラムのことです。
- これは新しいサブルーチン「MainProcedure」を定義しています。
- Dim result As Long
- Long型の変数「result」を宣言します。
この変数は、後で関数「SumValues」の結果を受け取るために使用されます。
- Long型の変数「result」を宣言します。
- result = SumValues(10, 20)
- ここで、関数「SumValues」を呼び出し、引数として「10」と「20」を渡しています。
関数「SumValues」は、これらの引数を受け取り、その合計を計算して結果を返します。
その結果が、変数「result」に格納されます。
- ここで、関数「SumValues」を呼び出し、引数として「10」と「20」を渡しています。
- MsgBox “合計は ” & result
- MsgBoxはメッセージボックスを表示するための関数です。
ここでは、result変数に格納された合計値をメッセージボックスに表示しています。
- MsgBoxはメッセージボックスを表示するための関数です。
- End Sub
- End Subは、サブルーチンの終わりを示す命令です。
- Function SumValues(ByVal num1 As Long, ByVal num2 As Long) As Long
- ここでは、新しい関数を定義しています。
「Function」は、VBAで関数を作成するためのキーワードです。
関数は、特定の処理を行い、その結果を返すことができます。- 「SumValues」という名前の関数を定義しており、この関数は2つの引数「num1」と「num2」を受け取ります。
「ByVal」は、引数を値として渡すことを意味しています。
引数のデータ型はLong型(長整数)です。
最後の「As Long」は、この関数がLong型の値を返すことを示しています。
- 「SumValues」という名前の関数を定義しており、この関数は2つの引数「num1」と「num2」を受け取ります。
- ここでは、新しい関数を定義しています。
- SumValues = num1 + num2
- ここでは、「num1」と「num2」の2つの数値を足した結果を、関数「SumValues」の返り値として設定しています。
例えば、「num1」が「10」で、「num2」が「20」であれば、この行は「30」という結果を返します。
この結果は、「MainProcedure」の中で変数「result」に格納され、メッセージボックスで表示されます。
- ここでは、「num1」と「num2」の2つの数値を足した結果を、関数「SumValues」の返り値として設定しています。
- End Function
- 「End Function」は、関数の終わりを示します。
これにより、関数「SumValues」が終了し、計算された結果が返されます。
この行がないと、関数が正常に終了せず、エラーが発生する可能性があります。
関数が終了すると、VBAはこの関数の呼び出し元に戻り、処理を続行します。
- 「End Function」は、関数の終わりを示します。
このコードは、2つの数値を合計するシンプルな処理を示しています。
サブルーチン「MainProcedure」で数値を渡し、関数「SumValues」でその合計を返す流れは、よく使用されるパターンです。
特に複雑な計算を関数として分離することで、コードが読みやすく、メンテナンスしやすくなります。
使用例2: 配列を使って複数の結果を返す関数
複数の数値を配列で受け取り、その合計と平均を1つの関数から配列として返す方法を紹介します
VBAのFunctionプロシージャでは基本的に1つの値しか返せませんが、配列を使うことで複数の値を返すことができます。
コード例 | 配列を使って複数の結果を返す関数
Sub MainProcedure()
Dim minMax() As Long
minMax = GetMinMax(10, 20)
MsgBox "最小値は " & minMax(0) & ", 最大値は " & minMax(1)
End Sub
Function GetMinMax(ByVal num1 As Long, ByVal num2 As Long) As Variant
Dim result(1) As Long
result(0) = WorksheetFunction.Min(num1, num2)
result(1) = WorksheetFunction.Max(num1, num2)
GetMinMax = result
End Function
処理結果


コードの動作概要
「MainProcedure」で、関数「GetMinMax」を呼び出し、2つの数値(10と20)を引数として渡します。
この関数内で、この2つの数値を使って最小値と最大値を計算し、それらを配列として返します。
関数「GetMinMax」から返された配列は、変数「minMax」に格納されます。
この配列の最初の要素には最小値が、2番目の要素には最大値が格納されています。
MsgBox関数を使って、最小値と最大値をメッセージボックスに表示します。
Function GetMinMax(ByVal num1 As Long, ByVal num2 As Long) As Variantでは、2つの引数「num1」と「num2」をもとに、Excelの「MIN」および「MAX関数」を使って最小値と最大値を計算します。
その後、それらを配列に格納して返します。
このコードで使用している機能
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub MainProcedure()
- これは新しいサブルーチン「MainProcedure」を定義しています。
Subは「サブルーチン(Subroutine)」の略で、VBAにおける一連の処理をまとめた小さなプログラムのことです。
- これは新しいサブルーチン「MainProcedure」を定義しています。
- Dim minMax() As Long
- ここで、「minMax」という名前の配列変数を宣言しています。
「Dim」は変数宣言のためのキーワードで、「minMax()」は、複数の数値(ここではLong型の整数)を格納できる配列です。
配列を使うことで、複数の値を1つの変数名で扱うことができます。
- ここで、「minMax」という名前の配列変数を宣言しています。
- minMax = GetMinMax(10, 20)
- 「GetMinMax」という関数を呼び出し、その結果を配列「minMax」に代入しています。
関数「GetMinMax」は、「10」と「20」という2つの数値を引数として受け取り、その最小値と最大値を配列にして返します。
この配列の最初の要素「minMax(0)」には最小値が、2番目の要素「minMax(1)」には最大値が格納されます。
- 「GetMinMax」という関数を呼び出し、その結果を配列「minMax」に代入しています。
- MsgBox “最小値は ” & minMax(0) & “, 最大値は ” & minMax(1)
- MsgBox関数を使用して、メッセージボックスに最小値と最大値を表示しています。
「minMax(0)」には最小値が、「minMax(1)」には最大値が格納されており、それらを文字列に結合して表示しています。
このようにメッセージボックスで結果をユーザーに表示することで、コードの実行結果が確認できるようになっています。
- MsgBox関数を使用して、メッセージボックスに最小値と最大値を表示しています。
- End Sub
- End Subは、サブルーチンの終わりを示す命令です。
- Function GetMinMax(ByVal num1 As Long, ByVal num2 As Long) As Variant
- ここで、新しい関数「GetMinMax」を定義しています。
「Function」は、計算や処理を行って、その結果を返すブロックを定義するためのキーワードです。
「ByVal」は、引数「num1」と「num2」を値として関数に渡すことを示しており、これらの引数はLong型の整数です。
戻り値の型はVariantとしており、これはどのようなデータ型でも返せる万能型です。
今回は、配列を返すためにVariant型を使用しています。
- ここで、新しい関数「GetMinMax」を定義しています。
- Dim result(1) As Long
- ここで、「result」という名前の配列変数を宣言しています。
「result(1)」という指定は、2つの要素を持つ配列を意味します(0から1までのインデックスを持ちます)。
この配列には、最小値と最大値がそれぞれ格納されます。
- ここで、「result」という名前の配列変数を宣言しています。
- result(0) = WorksheetFunction.Min(num1, num2)
- 「WorksheetFunction.Min」は、Excelのワークシート関数「MIN」をVBA内で使用するための命令です。
この行では、「num1」と「num2」のうち小さい方の数値を取得し、配列「result」の最初の要素「result(0)」に格納しています。
これにより、result(0)には最小値が保存されます。
- 「WorksheetFunction.Min」は、Excelのワークシート関数「MIN」をVBA内で使用するための命令です。
- result(1) = WorksheetFunction.Max(num1, num2)
- 「WorksheetFunction.Max」を使用して、「num1」と「num2」のうち大きい方の数値を取得し、配列「result」の2番目の要素「result(1)」に格納しています。
これにより、「result(1)」には最大値が保存されます。
- 「WorksheetFunction.Max」を使用して、「num1」と「num2」のうち大きい方の数値を取得し、配列「result」の2番目の要素「result(1)」に格納しています。
- GetMinMax = result
- 関数「GetMinMax」の戻り値として、配列「result」を返しています。
この配列には最小値と最大値が格納されており、関数を呼び出した元の場所(ここではMainProcedure)に返されます。
- 関数「GetMinMax」の戻り値として、配列「result」を返しています。
- End Function
- 「End Function」は、関数「GetMinMax」の終了を示しています。
これにより、関数が正常に終了し、VBAはこの関数から返された値を元の場所に渡します。
「End Function」がない場合、関数は正常に終了しないため、エラーが発生します。
- 「End Function」は、関数「GetMinMax」の終了を示しています。
このコードは、2つの数値を比較して最小値と最大値を求め、それらを配列として返し、その結果をメッセージボックスに表示するシンプルな処理を示しています。
関数「GetMinMax」を使用して、最小値と最大値の計算を行い、その結果を1つの配列にまとめて返す手法は、複数の値を一度に扱う際に非常に便利です。
また、WorksheetFunctionを利用することで、VBAコード内でもExcelの標準関数を活用できる点が重要です。
このような処理は、データ分析やレポート作成など、さまざまな場面で応用可能です。
この記事のまとめ
「Functionプロシージャ」は、処理結果を他のプロシージャやセルに返すための非常に便利な方法です。
計算やデータ処理の結果を再利用する必要がある場合や、コードの可読性を高めたいときに効果的に使用できます。
また、配列を使うことで、複数の結果を返すことも可能です。
これにより、コードがシンプルになり、効率的なプログラム作成が可能となります。
ポイントのおさらい
- VBAのFunctionプロシージャを使って結果を返す方法を理解する
- Functionプロシージャは、計算や処理を行い、その結果を他の場所で利用するために返す構文です。
コードを短く、再利用しやすくするために非常に役立ちます。
⇒ 「VBAのFunctionプロシージャとは?使い方と基本構文」もう一度見る。
- Functionプロシージャは、計算や処理を行い、その結果を他の場所で利用するために返す構文です。
- FunctionとSubの違いを把握する
- Functionは結果を返すことができ、Subは結果を返さずに処理を実行するためのプロシージャです。
両者の使い分けが重要です。
⇒ 「VBAの「Functionプロシージャ」と「Subプロシージャ」の違いを解説」もう一度見る。
- Functionは結果を返すことができ、Subは結果を返さずに処理を実行するためのプロシージャです。
- Functionプロシージャのメリット
- Functionプロシージャを使用することで、コードが短くなり、再利用が可能となります。
また、複数の場所で同じ処理を行う際に、その処理を1つにまとめられるため、コードがシンプルかつ保守しやすくなります。
⇒ 「VBA Functionプロシージャのメリットと活用法」もう一度見る。
- Functionプロシージャを使用することで、コードが短くなり、再利用が可能となります。
- 配列を使った関数の使用例を確認する
- VBAのFunctionプロシージャでは1つの値しか返せませんが、配列を使うことで複数の値を返すことが可能です。
これにより、複雑な処理を簡潔にまとめることができます。
使用例を実践することで、Functionプロシージャの理解が深まり、VBAコードがより効率的に書けるようになります。
⇒ 「使用例:Functionプロシージャを使ってみよう」もう一度見る。
- VBAのFunctionプロシージャでは1つの値しか返せませんが、配列を使うことで複数の値を返すことが可能です。
VBAのFunctionプロシージャは、結果を返すことで処理の再利用性を高め、コードをシンプルに保つ強力なツールです。
配列を使用することで、複数の値を効率的に扱えるため、複雑な計算や処理にも対応できます。
この記事を通じて、より柔軟で効率的なVBAコードの作成方法を習得できるでしょう。

