記事キャッチ画像
  (06) Excelワークシートからも呼び出せる「関数」を作成してみよう! 

 引数(パラメーター)を持つプロシージャの作成 

 結果を返す Function プロシージャ(関数)の作成 
ルールに従った Public Function プロシージャを作れば、Excel の関数としても利用可能に!
  「広告」  
 

 (06) Excelワークシートからも呼び出せる「関数」を作成してみよう! 

Excel メニューバーの [ヘルプ] - [更新プログラムのチェック] にて、適用されていないアップデートがあれば行ってください。 

Excel 2016 for Mac 環境での説明となりますので、 Mac版 Excel 2011 では( VBA が利用できますが )同じ結果にならない場合があるかもしれません。

現状、 VBAコード 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。

 引数(パラメーター)を持つプロシージャの作成 

デフォルトのフォントが、Excel2016から「游ゴシック」体に変更されていますね!
00

「空のブック」Excelファイルを新規作成にて作成後、A1 〜 A3 セルに 1, 2, 3 と入力します。
「A1 : A3」セル選択後、右下のポインタを下にドラッグして A10 セルにてマウスを離します。

03
「A10」セルまでフィルされます。

30
「名前を付けて保存…」にて、「Excel マクロ有効ブック(.xlsm)」ファイル形式にて任意の名前で保存。
「マクロの記録」で記録失敗する場合があるため、一度 Excel を終了後、ファイルを開き直します。

21
マクロの保存先に「作業中のブック」を指定して [ OK ] ボタンをクリックし、マクロ記録を開始します。

16
「A1」セルを選択後、マクロ記録を終了します。

25
上記画面のように、以下の VBAコード を間違いなく入力するか、ブラウザ画面から VBAコード を貼り付けます。


Public Function FuncTest1(n As Long) As Long
Rem
Rem FuncTest1 = n * (n + 1) / 2
Rem

    Dim i As Long
    Dim j As Long

    j = 0
    
    For i = 1 To n Step 1
        j = j + i
    Next i
    
    FuncTest1 = j

End Function

今まで使用したプロシージャには引数が無かったため プロシージャ名の後は () でしたが、今回は引数(パラメーター)を1つ持つため FuncTest1( n as Long ) となっている点に注意してください。
引数を利用すると、外部からプロシージャ内へ値を渡すことが可能になります。
変数宣言の Dim 文と同様、引数も「変数名 as 変数の型」のように指定します。
 Integer 型では格納できる範囲が限られているため、Integer 型より大きい整数値を格納可能な Long 型を使用してます。
(関数は一つの結果しか返すことはできませんが、引数は複数持つことが可能)

結果を返す Function プロシージャ(関数)の作成 

結果を返す(関数)プロシージャを示す Function の前に記述した Public キーワードは このプロシージャを公開するという意味で付加しています。
また、 FuncTest1( n As Long ) のあとの As Long にて 関数が返す値の「」を指定します。

最後の行の「 関数プロシージャ名 = j 」にて、最終的に関数が返す値をセット
右辺には最終的に 指定した型( 今回なら、Long )の値をセットする必要があります。

まずは、動作確認を含め、イミディエイトウィンドウにてこの関数の結果を確認します。
判別しやすいように「FuncTest1」とコード記述しますが、VB (Visual Basic) は大文字/小文字を区別しないため、上記画面のように呼び出し時は 全部小文字あるいは大文字で入力しても問題ありません。

Debug.Print FuncTest1(3)  入力後 [return] キーにて、結果の 6 が表示されます。
? FuncTest1(10)  では、結果 55 が表示されます。
「階和」の結果を返す関数で、コード中のコメントにもあるとおり「 n * (n + 1) / 2 」でも計算できますが、前回に引き続き For 〜 Next ループを利用して計算しています。
(なお、今回は Step 1 のため、この部分は省略可能)


11
Excel では Public Function で記述した関数を Excelワークシートから「ユーザー定義関数」として利用することができます。
「関数名」の先頭の数文字を入力すると候補が表示され、マウスで選択すると上記画面のように補完されます。
用意されている関数が自分の求める用途に適さない場合、「ユーザー定義関数」を作成すると便利です。
引数や関数が返す値が整数値の場合、 Long を指定しておくと無難です。

54
次にマウスで「A1」列をクリックすると (A1) となるため、 [return] キーで確定しましょう。

57
「B1」セルを [command] + [C] にてコピーした後、「B2 : B10」セルを選択して [command] + [V] にて貼り付けます。

40
このように、プロシージャ内から 関数を呼び出す以外に Excelワークシートから 自分の作成した関数を利用できる点が Excel VBA が重宝する理由の一つです。


お疲れ様でした!
[command] + [Q] にてExcel を終了時、「作業中のブック」を保存するか確認のダイアログ画面が表示されるため 「保存」しましょう。
現状、 VBAコード 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。

  「広告」  
  

最後まで読んでいただき、ありがとうございます。
ぜひ、右側の「人気ブログランキング」投票に ご協力ください。
また、お越しくださいませ。
// アタル
 

  「広告」