プログラムはダラダラと「なが~く」書き続けることもできますが、ミスを探すのが大変ですし、同じプログラムを何回も書くことになるので効率が悪いです。
そこで、機能ごとに一つのまとまりにして使い回しができるようにしています。この機能のまとまりを「関数」と呼んでいます。ここでは、Excel VBA(Excel マクロ)で関数を作る方法を説明します。
目次
関数とは何か?
関数とは何でしょう? 初めてExcelで「関数」という言葉を聞いた時、「関わる数ってなんだ?」とか、「数学で習った1次関数?」とかを思い浮かべて、やたら難しいような感じがした経験があります。
関数は英語では「Function」。ファンクションは「機能」っていう意味でも使われるので、「関数」じゃなくて、「機能」っていう名前にした方が分かりやすかったんじゃないかと思います。パソコンのキーボードには「F1」とか「F2」とか書いてありますが、昔は「機能1」とか「機能2」とかって書かれていたことがありました。
Excelで関数と言えば、合計を求める「SUM」とか、平均を求める「AVERAGE」とかがよく使われます。
関数とは何かを渡すと決まった法則に基づき答えを返してくれる特別な計算式のことなんです。
この時、渡すものを「引数(ひきすう)」答えを「戻り値(もどりち)」と呼びます。返り値(かえりち)と呼ぶこともありますが、返り血ではないので注意しましょう。手品で言えば、切った白い紙を帽子に入れると鳩が出てくるような感じですね!
SUM関数なら、〇=SUM( X:Y ) って書くと思いますが、〇の部分が戻り値で、カッコの中が引数になります。ちなみにExcel で引数に「:」を使うときは、「xxx から xxx まで」という範囲の意味になります。カンマを使って SUM(5,6,7) と書くと、「5+6+7」と同じ意味になります。
干支を求める関数を作る
関数を作ってみましょう!
今回は、年を西暦4ケタで渡すと、干支が返ってくる関数を作ることにします。せっかくなので、簡単に作れて実用的なものを考えてみました。
年が「引数」で、干支が「戻り値」になります。関数の名前は何でも良いですが、ここでは GetEto にしました。
計算式は、西暦を4で割って余りを求める式になります。
余りを求めるときは「+」や「-」の代わりに「MOD」を使います。「2016 MOD 12」は割り切れて余りはないので、答えは「0」になります。2016年は申年なので、余りが「0」の時は申年になります。
では、2017年はどうでしょう?「2017 MOD 12」は割り切れず余りは「1」になります。つまり、余りが「1」の時は酉年になります。このように計算していくと、次のようになることが分かります。
あまりが0の時 申
あまりが1の時 酉
あまりが2の時 戌
あまりが3の時 亥
あまりが4の時 子
あまりが5の時 丑
あまりが6の時 寅
あまりが7の時 卯
あまりが8の時 辰
あまりが9の時 巳
あまりが10の時 午
あまりが11の時 未
Excelで関数を作る手順
干支を求める計算方法を確認したところで、実際にExcelで使えるようにしてみたいと思います。
Excel のリボンの「開発」をクリックします
「開発」がない場合は、前回の記事で詳しく説明していますので、参考にしてくださいね。
コードの表示をクリックします
メニューから「標準モジュール」を選びます
標準モジュールが追加されます
コードを入れるときは、左側が「標準モジュール」の「Module1」が選ばれているのを確認してから入れてくださいね(「Module1」がグレーに網掛け表示されているはず)違うところに入れると後でエラーになるので注意しましょう。
コードを入力します
入力すると大変なので、とりあえず以下をコピペしちゃってください! 本当はエラーチェックとか色々することがあるんですが省略してます。
Selec Case 文については、前回の記事の「条件分岐」をご参照ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Function GetEto(nen As Integer) As String Select Case nen Mod 12 Case 0 GetEto = "申" Case 1 GetEto = "酉" Case 2 GetEto = "戌" Case 3 GetEto = "亥" Case 4 GetEto = "子" Case 5 GetEto = "丑" Case 6 GetEto = "寅" Case 7 GetEto = "卯" Case 8 GetEto = "辰" Case 9 GetEto = "巳" Case 10 GetEto = "午" Case 11 GetEto = "未" Case Else GetEto = "エラー" End Select End Function |
Excelに戻って試してみる
適当なセルに西暦4ケタを入力して、GetEto関数を別のセルに入力して、その西暦を引数に指定します。
干支が出たら成功です。年を変えて試してみると楽しい♪
コードの解説
Excel で 関数を作る時は、プログラムの初めに「Function」と書き、最後は「End Function」と書きます。
Excel には、「Function」以外に「Sub」で始まるプログラムもあります。「Sub」の場合は、値を返しません。値を返すときは Function、値を返さないときは Sub という区別でOKです。
Sub でも Function でも、その次にプログラム名が来て、その次に引き数を書くのは同じです。Function の場合は、戻り値の型を付け加えます。型については、次回に詳しく説明しますが、ここでは、文字を返すときは「String を使う」と覚えておくと良いです。
プログラムの内容については、また次回に詳しく解説しますね。
まとめ
良いプログラムは、このように一つのまとまりを作って、そのまとまりを組み合わせて作ります。
そうすることで、何をしているプログラムなのか分かりやすくなり(可読性が良いと言います)、良く使う関数を作っておけば、生産性が上がります。
関数は、Excel特有のものではなく、プログラミングの基本です。
他の言語にも共通する考え方になりますので、 Excelで関数を作れるようになれば、応用が効きます。
長野県駒ヶ根市在住。ネットショップ構築とネットショップ運営サポートをしています。このサイトでは、ユーザーさん向けに役立つIT情報や、技術情報のメモを公開しています。詳しいプロフィール