初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

初心者のためのExcel(エクセル)マクロVBA入門-プログラミングの基礎6~関数って?

関数とは?

制御構文までまだもう少しかかります。さて、またまた改めて、
最初のコードに登場してもらいましょう。

Public Sub Sample()
    
    '名前格納用変数を用意してね
    Dim name As String
    
    '名前を入力してもらうウインドウを表示して、入力された名前をname変数に入れてね
    name = InputBox("名前を入力してください。", "名前の入力", "")
    
    '名前をセルに出力してね
    Sheet1.Range("A1").Value = "私は" + name + "です。"
    
    '出力が終わったというメッセージウィンドウを表示してね
    MsgBox "名前を出力しました。", vbOKOnly, "プログラム終了"
    
End Sub

この中の名前を入力してもらうウィンドウを表示して入力結果をname変数にいれているのが、「Input関数」という関数になります。
記憶力がある人は覚えていますでしょうか?数学でやった「y=f(x)」ですね。実は関数という言葉がy=f(x)を表しているのではなく、関数とは

「ある入力に対して何か結果を出力するものまたは式」

のことを言います。ですからy=f(x)というのをなぜ関数と呼ぶか?というとxに何かを入力するとyという結果が得られる式fというものだからです。
ですから、関数は何か入れたら何か処理して結果が返ってくるもの。とざっくり覚えましょう。(入れなくても処理して結果が返る場合もあります)
さて、話を戻します。このInputBoxというのが先に説明したy=f(x)のfに当たる部分です。

InputBox関数:入力ボックスを表示し、入力された値を「返す」

という機能を持った「関数」になります。入力値は複数あって、

prompt:入力ボックスに出力する説明文
title:入力ボックスのタイトル
default:入力ボックスに表示される初期値

などがあります。(実は他にもありますが、省略できます)
さて、実行した方がその関数の機能をより実感できると思うので、実行してみましょう。
実行すると・・・

「名前の入力」というタイトルの入力ボックスが表示されたと思います。これがInputBoxの機能です。たった一文でこれだけのことを実行してくれます。超便利ですね。
このように関数には様々なものがあらかじめ用意されており、それを使って入力値を入れてやれば、いろんな処理を自動的に行って勝手に結果を返してくれます。他にも本当にたくさん用意されているのですが、全部覚える必要ありません。
やりながら、良く使うものだけ何となく覚えておいて、後はネットで書式「関数の書き方」を調べればいいだけです。またVisual Basic Editorには便利なサジェスト機能があります。
関数を書いて(を入力すると自動的にその関数の引数を表示してくれますのでこれも利用すると良いでしょう。

この入力するものを「引数(ひきすう)」と言い、返してくれるものを「戻り値」と言います。
関数は例外もありますが、基本的に引数と戻り値を持ちます。

関数は作れる。

関数をオリジナルで作成することも可能です。引数と戻り値を持つものを作ればいいわけです。
さっそく作ってみましょう。

Public Sub Sample()
    
    '名前格納用変数を用意してね
    Dim name As String
    
    '名前を入力してもらうウインドウを表示して、入力された名前をname変数に入れてね
    name = InputBox("名前を入力してください。", "名前の入力", "")
    
    '関数を呼び出します。
    name = getName()
    
    '名前をセルに出力してね
    Sheet1.Range("A1").Value = "私は" + name + "です。"
    
    '出力が終わったというメッセージウィンドウを表示してね
    MsgBox "名前を出力しました。", vbOKOnly, "プログラム終了"
    
End Sub



Private Function getName()
    
    
    getName = "スズキ"
    
    
End Function

この新しく追加したgetNameが関数になります。SampleプロシージャでgetName関数を呼び出しています。getName関数には引数がありません。なので名前の()の中には何も入っていません。呼び出せば自動的に「スズキ」という文字列を返します。
このように関数は簡単に作ることができます。ちなみに戻り値がある場合は必ず「Function」になります。ない場合は「Sub」です。

今回はこのくらいで。次回はやっと制御構文です。


かしこ