【VBA】エクセルの自作関数の作成方法【Excel】

VBA

今回はエクセルの自作関数の作成方法を説明していきます。
エクセルの自作関数の作り方は非常に簡単です。
エクセル関数にRAND関数がありますが、0~1の間のランダムな数値が表示されます。
その数字を丸めたり、10をかけたりして、整数を取り出したりしないとだめなんですね。

例)1~10のランダムな整数を表示する関数
  =ROUND(RAND()*10,0)

これを自作関数を作成すると、
  =RANDINT()

これだけで作成することができます。
この例は自作関数作成する必要ある?って思いますが、VLOOKUP関数とかIF関数、IFERROR関数、SUM関数等を使いまわして、どうなってるの?みたいな関数を見るのが嫌な方に向けて書いていきます。

スポンサーリンク

自作関数ってなに?

自作関数とは冒頭で説明した内容とかぶってしまいますが、EXCELに標準であるSUM関数みたいなものを自作した関数のことです。

求めている結果を表示するプログラムを作成するのは、大変かもしれませんが、関数が見やすくなったり、メンテナンス性がアップします。
(冒頭の説明文でいうと発生させるランダム要素を1~100、1~1000等に一瞬で変更することができます。)

自作関数の基本

自作関数の作り方は以下の通りです。
また、自作関数は標準モジュールに記述していきます。

Function 自作関数(Target As Range)
    
    '以下に自作関数を記述します。
    
    
    '自作関数の返り値を設定します。
    自作関数 = "自作関数を作成しました。"
    
End Function

Function 自作関数(Target As Range)について

普段マクロを作成する方はSubプロシージャでマクロを作成していますが、自作関数はFunctionプロシージャ使用します。

記述要領は一緒ですが、返り値があるのが特徴です。
また、Functionプロシージャはマクロの中でも呼び出すことができます。

引数について

引数については任意で設定できます。
必要なければTarget as Rangeの部分を消してもらえれば使用できます。
引数の部分については数値、文字列、オブジェクト等なんでも何個でも受け取ることができます。

返り値の設定方法について

返り値の設定方法については

Functionプロシージャ名 = 返り値

で設定することができます。
今回の説明用のプログラムでいうと、自作関数というFunctionプロシージャは「自作関数を作成しました。」と表示するプログラムです。
使い道なさすぎぃぃぃぃぃ笑

自作関数の使用方法

自作関数はセルの中に関数名を記述するだけで使用できます。

=自作関数(A1)

今回の説明用プログラムは引数が必要になるので、A1と入力しています。引数をなくしてしまえば()だけの記述で使用できます。

今回作成した自作関数(超簡単)

今回作成したのは冒頭で説明した通り、ランダムな整数を生成する関数です。
使いどころはないかもしれませんが、自作関数の基本を押さえていますので、参考になれば幸いです。

Function RANDINT(Optional digit As Integer = 1)
    'digitは桁数を取得します。
    
    '桁数が0だった場合は0を返します。
    If digit = 0 Then
        RANDINT = 0
    '桁数分繰り返し乱数を10倍します。
    Else
        RANDINT = Math.Rnd
        For i = 1 To digit
            RANDINT = RANDINT * 10
        Next i
    End If
    
    'RANDINTを丸めて返します。
    RANDINT = Round(RANDINT, 0)
End Function

ぜひコードをコピーして使用してみてください。

コメント

タイトルとURLをコピーしました