初心者のためのExcel エクセルマクロVBA入門-関数ってなに?
とにかく、関数ってなんかするんだよ!
今日は関数についてです。関数ってそもそもに何でしょうか?エクセルにも関数がありますよね?SUMとかAVGとかVLOOKUPなんかも有名です。エクセルマクロにも関数はたくさんあります。InStr関数やClng関数などなど・・・本当にたくさんの「関数」があります。もう関数って7回言った・・・
( ゚д゚)・・・
ここで大きくざっくりですがきちんと関数という言葉について定義をすると・・・
何か処理をするもの!
ざっくり過ぎた・・・orz
でもまぁ、こんな感じです。要するにSUMなら「足す」という処理をしてくれます。AVGなら「平均」という処理してくれます。そう関数というは大抵必ず「何か」をしてくれるんです。
というのが、ざっくりした説明。。。
関数とはy=f(x)って本当ですか?
そして、ここからが、ちゃんとした説明。関数には「引数」と「戻り値」があります。
- 引 数:関数に渡す入力値。要するにインプット。
- 戻り値:関数が返す出力値。要するにアウトプット。
という説明になります。昔の中学の数学でy=f(x)ってやりましたよね?例えばy=2xとか。これも関数です。xが引数でyが戻り値になります。xに1という入力値を与えてやると、この関数は2倍という「処理」をして2という数値を「戻り値」として返すわけです。
これが関数の本質です。
実は中学でみんな関数についてやってんですよ。実は。
( ゚д゚)マジカ?
そういう説明をする先生ってあんまりいなかったと思いますが、関数というのは入力に対して何か処理をして値を返すもの。というのが関数の考え方というか根っこになります。すぐにグラフで説明するからいろいろとねぇ・・・数学嫌いなる原因の1つが関数だったりするんですよね。。。
でもやっぱり、結局関数はなんか処理するものなんです。
では話を戻しましょう。エクセルの関数はSUMとかAVGとかですよね?よく見ればy=f(x)のfの部分をSUMにすればそのままですよね。yを合計として、、、
合計 = SUM(範囲)
ですよね。yが戻り値でxが引数ですから、つまりSUM関数は範囲を与えてあげると合計という処理をしてくれる関数ということになります。当たり前ですよね。でもとっても重要なことなんです。合計というただ足し合わせるだけの関数なので、分かりやすいですが、複雑な関数も沢山あります。しかし、その関数の中身は気にしなくて良いのです。先ほどざっくりとした説明でも言いましたが、、
なんか処理してくれるんです。
これっす。そして大事なのは、
その関数で何を得られるのか?
ということです。SUMなら合計、AVGなら平均、VLOOKUPなら検索値に応じた値というように、中の処理はどうでもいいんですよ。要するになんか処理して合計が得られるし、なんか処理して平均が得られるし、なんか処理して検索値に応じた値が得られる。ということの方がよっぽど大事なんです。では色んな関数を見てましょう!
引数がないパターン。
( ゚д゚)オイオイ・・・
関数には必ず引数があるわけではありません。例えばDate関数やNOW関数には引数がありません。それに、今まで書いてきたプロシージャのtest()ってありましたよね?あの()カッコ・・・そうですプロシージャも広い意味で関数なんです。だってなんか処理するでしょ?引数がなくても、なんか処理して何かが得られる関数もあるのです。NOWなら日付と時刻を得られるし、Dateなら日付を得られます。このように何も引数(入力値)がなくても戻り値がある関数もあります。
そして戻り値がないパターン。
( ゚д゚)?それ関数なのか?
と言われそうですが立派に関数です。今までSubプロシージャを書いたりしてましたけど、これは何も値を戻してません。セルA1に出力するという「処理」をしただけです。なんか処理したでしょ?だから関数と言えます。なので最初に言ったわけです。ざっくり説明すれば、
なんか処理するのが関数
と。。。このようにその関数を使うと、何か処理をしてくれるだけ。という物もあります。その場合は「どんな処理をしてくれるのか?」が重要ですよね。ちょっと整理すると関数にはいくつかパターンがあり。。。。
- 引数と戻り値があるパターン
- 引数がないけど戻り値があるパターン
- 引数はあるけど戻り値がないパターン
- 引数も戻り値もないパターン(なんか処理する)
です。この4パターンがあるのだな。と思ってもらえば結構です。
関数の使い方
よべ!。以上。というのも不親切なのでちょっとだけ。エクセルマクロの世界にある関数つまりVBAの関数は「いきなり関数名を書く」これでいいです。また、エクセルの関数SUMとかAVGとかCOUNTAとかCOUNTIFとかはオブジェクト式という「.」でつないだ形で書きます。
( ゚д゚)?オブジェクト式・・・・
大丈夫、難しくないです。「Application.WorkSheetFunction.関数名」というフレーズを覚えてください。アプリケーション.ワークシートファンクション.です。それ以外のプロシージャで作った関数SubやFunctionという自分が作ったヤツは「Callステートメント」で呼ぶ。大体この3パターンを覚えておけば問題ありません。ちょっとコード書きますね。
いきなり関数名よ呼ぶ!(VBAの関数)
tmp = InStr("ABCDEFG", "B")
Application.WorkSheetFuncsion(エクセルの関数)
tmp = Application.WorkSheetFunction.Sum("A1:A100")
自分で作ったプロシージャを呼ぶ!
Private Sub test() Sheet1.Range("A1").Value = "こんにちは" End Sub Pubic Sub main() Call test End Sub
これだけ。これだけマスターすれば関数は怖くない!