VBA Functionプロシージャ入門|コードを簡潔に効率化する方法

当ページのリンクには広告 (Amazonアソシエイト含む) が含まれています。
VBA Functionのアイキャッチ

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


コードが長くなり管理が大変!

同じ処理を何度も書いている…非効率だなと感じる!

処理結果をほかの「プロシージャ」や「セル」でも使いたい!

今回は、VBAの「Functionプロシージャ」について
解説します!


この記事では、VBAの「Functionプロシージャ」をについて解説をします。

Functionプロシージャは、処理結果を返すことでコードをスッキリまとめられる便利な仕組みです。

この記事では、VBA初心者でも簡単に使えるように、Functionプロシージャの「基本構文」から「使い方」「使いどころ」、さらには「戻り値」「引数」の設定方法まで、徹底的に解説します。

初心者の方でもすぐに使えるサンプルコードを用意していますので、ぜひ参考にしてください!


【 この記事の概要 】

よく使う度
難しさ
覚えておくと安心度

VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?

そんな方には、UdemyのVBA講座がおすすめです。

動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!

多彩な講座から自分に合った講座を探そう!
UdemyでVBAを検索
UdemyでVBAを検索 画像出典:Udemy

\  自分のペースで学べるVBA講座はこちら  /

目次

この記事を読むとできること

この記事を読むことで、次のことができるようになります。

スポンサーリンク

VBAの「Functionプロシージャ」と「Subプロシージャ」の違いを解説

「Functionプロシージャ」とは、処理を行ってその結果(値)を返すことができるプログラムのブロックです。
例えば、複雑な計算を行い、その結果を別のプロシージャやセルで使いたいときに役立ちます。

VBAには「Subプロシージャ」というもう1つの仕組みもありますが、Functionプロシージャとは明確な違いがあります。

それぞれの特徴を理解し、適切に使い分けることで、VBAのコードがスッキリし、効率的に管理できるようになります。

Subプロシージャとは?

Subプロシージャは、処理を行うだけで結果を返さないプログラムのブロックです。

たとえば、セルの値を変更したり、メッセージを表示する処理に向いています。

Sub を使うべき場合
  • 処理を行うだけで、結果を返す必要がない場合
  • 「セルの値を更新」「メッセージを表示」などの単純な処理を行いたい場合

Subプロシージャは、他のプロシージャから呼び出すことができます。
その際に使用するのが「Callステートメント」です。

Callステートメントを使うことで、複数のSubプロシージャを順次実行することが可能です。

Callステートメントについては、別の記事で詳しく解説を行っています。
合わせてご覧ください。

あわせて読みたい
VBAでByVal(値渡し)とByRef(参照渡し)の違いを理解しよう|Callステートメントの使い方を徹底解説 「VBAを使っていると、コードが複雑になってよく分からなくなる...」そんな悩みありませんか? ・複数の処理をまとめて呼び出す方法がわからない…・関数に渡したデー...

例:Subプロシージャのコード

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

このコードは「MsgBox」を使ってメッセージを表示するだけのシンプルな例です。

Subプロシージャはこのように「結果を返す必要がない処理」に適しています。

Functionプロシージャとは?

一方で、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は文字列を表します。
  • As データ型
    • 「As データ型」は、Functionプロシージャが返すデータの種類です。
      例えば、計算の結果として数値を返したい場合はLongDoubleを指定します。

より詳しい情報は、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

処理結果

Functionの処理結果

詳細解説

Functionの動作概要
詳細解説について
  • 関数の呼び出し
    • MainProcedureSumValues関数を呼び出し、引数として「10」と「20」を渡しています。
      関数を呼び出す際には、関数名(引数)の形で記述します。
  • 戻り値の利用
    • SumValues関数が計算結果(2つの数値の合計)を返し、その結果をresult変数に格納します。
      このように、Functionプロシージャを使えば、計算や処理の結果を簡単に他のプロシージャで活用できます。
  • 結果の表示
    • 計算結果をMsgBoxを使って表示しています。
      この例では、「合計は 30」というメッセージが表示されます。

ポイント : ByValとByRefについて

このコードでは、引数num1num2ByVal(値渡し)が指定されています。

  • ByVal(値渡し)
    • 引数の値をコピーして関数に渡します。元の変数の値は変更されません。
  • ByRef(参照渡し)
    • 引数として渡された変数自体を操作します。元の変数の値が変更される場合があります。

詳しくは、以下の記事でByValとByRefの違いや活用方法について解説していますので、興味がある方はご覧ください。

あわせて読みたい
VBAでByVal(値渡し)とByRef(参照渡し)の違いを理解しよう|Callステートメントの使い方を徹底解説 「VBAを使っていると、コードが複雑になってよく分からなくなる...」そんな悩みありませんか? ・複数の処理をまとめて呼び出す方法がわからない…・関数に渡したデー...

このように、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)の基本から応用例までを詳しく解説している記事があります。
以下のリンクから詳細を確認して、さらに理解を深めましょう。

あわせて読みたい
VBAでユーザー定義関数を作成する方法:初心者向け完全ガイド 「エクセルの関数を自作したい…」そんな風に考えたことはありませんか? ・エクセルに標準でない特殊な関数を使いたい・他の人も簡単に使えるオリジナル関数を作成した...

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プロシージャを利用するのが適切です。
それぞれのケースに応じて適切な選択をすることで、コードの可読性と保守性を向上させることができます。

あわせて読みたい
VBAでByVal(値渡し)とByRef(参照渡し)の違いを理解しよう|Callステートメントの使い方を徹底解説 「VBAを使っていると、コードが複雑になってよく分からなくなる...」そんな悩みありませんか? ・複数の処理をまとめて呼び出す方法がわからない…・関数に渡したデー...

戻り値が設定されていない場合の動作例

コード例 : 戻り値が設定されていない場合
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
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プロシージャを使用する
動作結果
  • 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にする必要があります。
あわせて読みたい
VBA 配列の使い方徹底解説:宣言、初期化、動的配列・ソートもわかる基本ガイド 「ループ処理を使ってセルにデータを転記していたけれど、データが増えると動作が遅くなる…」このように困ったことはありませんか? ・複数のデータをまとめて管理する...

工夫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
ByRef(参照渡し)を活用して、関数内で複数の変数の値を直接変更した結果
ポイント
  • Functionプロシージャの戻り値とは別に、ByRefで渡された引数を利用して複数の結果を返します。
  • 計算結果を直接変数に反映できるため、効率的に値をやり取りできます。
スポンサーリンク

使用例:VBAのFunctionプロシージャを使ってみよう

それでは実際にFunctionプロシージャを使ってみましょう。

以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例は、ぜひご覧いただき、実際に実行してみてください。

VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?

そんな方には、UdemyのVBA講座がおすすめです。

動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!

多彩な講座から自分に合った講座を探そう!
UdemyでVBAを検索
UdemyでVBAを検索 画像出典:Udemy

\  自分のペースで学べる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

処理結果

使用例1

コードの動作概要

STEP
変数resultの宣言と初期設定

「MainProcedure」内で「result」というLong型変数を宣言し、初期化します。

STEP
関数SumValuesの呼び出し

関数「SumValues」を呼び出し、引数として「10」と「20」を渡します。
この関数は、2つの数値の合計を返します。

STEP
メッセージボックスに結果を表示

関数「SumValues」から返された合計値をメッセージボックスで表示します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub MainProcedure()
    • これは新しいサブルーチン「MainProcedure」を定義しています。
      Subは「サブルーチン(Subroutine)」の略で、VBAにおける一連の処理をまとめた小さなプログラムのことです。
  2. Dim result As Long
    • Long型の変数「result」を宣言します。
      この変数は、後で関数「SumValues」の結果を受け取るために使用されます。
  3. result = SumValues(10, 20)
    • ここで、関数「SumValues」を呼び出し、引数として「10」と「20」を渡しています
      関数「SumValues」は、これらの引数を受け取り、その合計を計算して結果を返します
      その結果が、変数「result」に格納されます。
  4. MsgBox “合計は ” & result
    • MsgBoxはメッセージボックスを表示するための関数です。
      ここでは、result変数に格納された合計値をメッセージボックスに表示しています。
  5. End Sub
    • End Subは、サブルーチンの終わりを示す命令です。

  1. Function SumValues(ByVal num1 As Long, ByVal num2 As Long) As Long
    • ここでは、新しい関数を定義しています。
      「Function」は、VBAで関数を作成するためのキーワードです。
      関数は、特定の処理を行い、その結果を返すことができます。
      • 「SumValues」という名前の関数を定義しており、この関数は2つの引数「num1」と「num2」を受け取ります
        「ByVal」は、引数を値として渡すことを意味しています。
        引数のデータ型はLong型(長整数)です。
        最後の「As Long」は、この関数がLong型の値を返すことを示しています。
  2. SumValues = num1 + num2
    • ここでは、「num1」と「num2」の2つの数値を足した結果を、関数「SumValues」の返り値として設定しています。
      例えば、「num1」が「10」で、「num2」が「20」であれば、この行は「30」という結果を返します。
      この結果は、「MainProcedure」の中で変数「result」に格納され、メッセージボックスで表示されます。
  3. End Function
    • 「End Function」は、関数の終わりを示します。
      これにより、関数「SumValues」が終了し、計算された結果が返されます。
      この行がないと、関数が正常に終了せず、エラーが発生する可能性があります。
      関数が終了すると、VBAはこの関数の呼び出し元に戻り、処理を続行します。

このコードは、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

処理結果

使用例2

コードの動作概要

STEP
配列の受け渡し

「MainProcedure」で、関数「GetMinMax」を呼び出し、2つの数値(10と20)を引数として渡します。
この関数内で、この2つの数値を使って最小値と最大値を計算し、それらを配列として返します。

STEP
結果の表示

関数「GetMinMax」から返された配列は、変数「minMax」に格納されます。
この配列の最初の要素には最小値が、2番目の要素には最大値が格納されています。
MsgBox関数を使って、最小値と最大値をメッセージボックスに表示します。

STEP
関数の処理内容

Function GetMinMax(ByVal num1 As Long, ByVal num2 As Long) As Variantでは、2つの引数「num1」と「num2」をもとに、Excelの「MIN」および「MAX関数」を使って最小値と最大値を計算します。
その後、それらを配列に格納して返します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub MainProcedure()
    • これは新しいサブルーチン「MainProcedure」を定義しています。
      Subは「サブルーチン(Subroutine)」の略で、VBAにおける一連の処理をまとめた小さなプログラムのことです。
  2. Dim minMax() As Long
    • ここで、「minMax」という名前の配列変数を宣言しています。
      「Dim」は変数宣言のためのキーワードで、「minMax()」は、複数の数値(ここではLong型の整数)を格納できる配列です。
      配列を使うことで、複数の値を1つの変数名で扱うことができます。
  3. minMax = GetMinMax(10, 20)
    • 「GetMinMax」という関数を呼び出し、その結果を配列「minMax」に代入しています。
      関数「GetMinMax」は、「10」と「20」という2つの数値を引数として受け取り、その最小値と最大値を配列にして返します。
      この配列の最初の要素「minMax(0)」には最小値が、2番目の要素「minMax(1)」には最大値が格納されます。
  4. MsgBox “最小値は ” & minMax(0) & “, 最大値は ” & minMax(1)
    • MsgBox関数を使用して、メッセージボックスに最小値と最大値を表示しています。
      「minMax(0)」には最小値が、「minMax(1)」には最大値が格納されており、それらを文字列に結合して表示しています。
      このようにメッセージボックスで結果をユーザーに表示することで、コードの実行結果が確認できるようになっています。
  5. End Sub
    • End Subは、サブルーチンの終わりを示す命令です。

  1. Function GetMinMax(ByVal num1 As Long, ByVal num2 As Long) As Variant
    • ここで、新しい関数「GetMinMax」を定義しています。
      「Function」は、計算や処理を行って、その結果を返すブロックを定義するためのキーワードです。
      「ByVal」は、引数「num1」と「num2」を値として関数に渡すことを示しており、これらの引数はLong型の整数です。
      戻り値の型はVariantとしており、これはどのようなデータ型でも返せる万能型です。
      今回は、配列を返すためにVariant型を使用しています。
  2. Dim result(1) As Long
    • ここで、「result」という名前の配列変数を宣言しています。
      「result(1)」という指定は、2つの要素を持つ配列を意味します(0から1までのインデックスを持ちます)。
      この配列には、最小値と最大値がそれぞれ格納されます。
  3. result(0) = WorksheetFunction.Min(num1, num2)
    • 「WorksheetFunction.Min」は、Excelのワークシート関数「MIN」をVBA内で使用するための命令です。
      この行では、「num1」と「num2」のうち小さい方の数値を取得し、配列「result」の最初の要素「result(0)」に格納しています。
      これにより、result(0)には最小値が保存されます。
  4. result(1) = WorksheetFunction.Max(num1, num2)
    • 「WorksheetFunction.Max」を使用して、「num1」と「num2」のうち大きい方の数値を取得し、配列「result」の2番目の要素「result(1)」に格納しています。
      これにより、「result(1)」には最大値が保存されます。
  5. GetMinMax = result
    • 関数「GetMinMax」の戻り値として、配列「result」を返しています
      この配列には最小値と最大値が格納されており、関数を呼び出した元の場所(ここではMainProcedure)に返されます。
  6. End Function
    • 「End Function」は、関数「GetMinMax」の終了を示しています。
      これにより、関数が正常に終了し、VBAはこの関数から返された値を元の場所に渡します。
      「End Function」がない場合、関数は正常に終了しないため、エラーが発生します。

このコードは、2つの数値を比較して最小値と最大値を求め、それらを配列として返し、その結果をメッセージボックスに表示するシンプルな処理を示しています。

関数「GetMinMax」を使用して、最小値と最大値の計算を行い、その結果を1つの配列にまとめて返す手法は、複数の値を一度に扱う際に非常に便利です。

また、WorksheetFunctionを利用することで、VBAコード内でもExcelの標準関数を活用できる点が重要です。
このような処理は、データ分析やレポート作成など、さまざまな場面で応用可能です。

スポンサーリンク

この記事のまとめ

「Functionプロシージャ」は、処理結果を他のプロシージャやセルに返すための非常に便利な方法です。

計算やデータ処理の結果を再利用する必要がある場合や、コードの可読性を高めたいときに効果的に使用できます。
また、配列を使うことで、複数の結果を返すことも可能です。
これにより、コードがシンプルになり、効率的なプログラム作成が可能となります。

ポイントのおさらい

VBAのFunctionプロシージャは、結果を返すことで処理の再利用性を高め、コードをシンプルに保つ強力なツールです。

配列を使用することで、複数の値を効率的に扱えるため、複雑な計算や処理にも対応できます。

この記事を通じて、より柔軟で効率的なVBAコードの作成方法を習得できるでしょう。

あわせて読みたい
サイトマップ このページは、本サイトの記事を分かりやすくまとめました。ぜひご覧ください。 目次 「VBA」を見る 「Officeスクリプト」を見る 「ワークシート関数」を見る 「JavaScr...
スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次