関数を自分で作る?【 Functionプロシージャの使い方とは 】

豆父ちゃん
こんな疑問にお答えします。
この記事ではFunctionプロシージャ処理動作が似ているCallと比較して使い方や特徴を紹介しています。
FunctionやCallはとても便利な機能なので、使いこなせるようになればVBAでさらにいろんな処理が出来るようになるので、しっかり使いこなせるようになりましょう。
目次
Functionプロシージャとは
Functionは自分で作ったプログラムをあたかも登録されている関数のように使えるようになるというもの
どのようにしてFunctionを使うかというと、Functionプロシージャ内のプログラムを実行し、処理結果の値をプログラム内もしくは結果として使用します。
※処理結果の値を戻り値といいます
注意点として戻り値は変数やオブジェクトとして使用します。

豆父ちゃん
Functionはいつくかの例を見比べて、そして自分でいろんなプログラムを作ってみるとすぐに覚えることができます。
FunctionとCallの違い
・Callは戻り値を指定できない
Callは Sub〇〇() ~ End Subの処理結果を取得
・Functionは戻り値を指定することができる
Functionは Function〇〇() ~ End Function の〇〇を変数として取得

豆父ちゃん
簡単な例で説明
1 | Function mamemame() As String |
2 | mamemame="マメマメ父ちゃん" |
3 | End Function |
mamemameが変数として使えるようになります
1 | Sub テスト() |
2 | MsgBox"mamemame" |
3 | End Sub |
結果は「マメマメ父ちゃん」が表示されます。
Functionの使い方
Subプロシージャで変数として使う
1 | Function mamemame() As String |
2 | mamemame="マメマメ父ちゃん" |
3 | End Function |
1 | Sub テスト() |
2 | MsgBox"mamemame" |
3 | End Sub |
先ほど紹介した例と全く同じです。
これはSubプロシージャで変数として使用しています。
SubプロシージャでCallで呼び出して使う
1 | Function mamemame() As String |
2 | mamemame="マメマメ父ちゃん" |
3 | End Function |
1 | Sub テスト() |
2 | Call mamemame |
3 | MsgBox"mamemame" |
4 | End Sub |
Callを使ってFunctionプロシージャを呼び出すことも可能です。
セルで呼び出して使う
1 | Function gou(i As Long , j As Long , k As Long) As String |
2 | banana = i * j + i * j * (k * 0.01) |
3 | gou = banana |
4 | End Function |
Functionプロシージャにプログラムを作った後、セルから呼び出す
セルには
= プロシージャ名( 引数 , 引数 , 引数, )
を入力
サンプルを使ってFunctionとCallの違いをわかりやすく説明
サンプル1 合計に金額のみを表示する
標準モジュールにプログラムを記載
結果
Functionを使った場合と、Callを使った場合で同じ結果を得ることが出来ました。

豆父ちゃん
サンプル1のようなときは使い分ける必要がないので使いやすい方を使いましょう。
サンプル2 合計に「合計金額は〇〇」と表示する
標準モジュールにプログラムを記載
結果
簡単な例なのでFunctionを使った場合とCallを使った場合で同じ結果にすることができました。
注目すべきはCallのプログラムです。
1 | Sub Call テスト() |
2 | Call テスト |
3 | Range(“E7″)="合計金額は" & Range(“E7") |
4 | End Sub |
2行目で処理結果をE7セルに入力し、そのあとに「合計金額は」というテキストを追加しています。
一手間加わっているのでキレイなプログラムとは言えません。。これが、FunctionとCallの最大の違いではないでしょうか。
テキストの半角・全角を変換するVBAを紹介している記事の中では主にFunctionプロシージャを使ってVBAを作っています。
私の職場で実際に使っているVBAにも導入しています。テキストの半角・全角の操作を自動化したいという方は合わせてチェックしてみて下さい。
FunctionとCallを扱えるとより複雑なVBAが開発可能に!
VBAの中でわかりにくい機能の一つがFunctionプロシージャではないでしょうか。私はFunctionとCallの違いをなかなか理解できず、Functionを避けていた時期があります。個人的にCallの方が直感でわかりやすいし使いやすい気がします。
しかしFunctionプロシージャをしっかり使いこなせるようになればVBAで作れるプログラムのレベルが一段階あがります。より複雑なプログラムを作れるということは、今まで以上に作業の効率化に繋がるVBAを作れるということです。
変数や宣言、戻り値など専門的な用語が多く理解しずらいかと思いますが、使いこなせるようにしておきましょう。
VBA初心者が効率化マクロを導入する方法
VBAなんて扱ったことないけどエクセル作業を自動化するマクロを導入したい!
このような問題を抱えながら日々のエクセル業務をこなしている方がおおくいらっしゃるのではないでしょうか。
こんな問題を解決する方法がこちら
- マクロの開発を外注に依頼する
- マクロが設定されたエクセルファイルをダウンロードする
- 参考書やネットでVBAスキルを身に付ける
VBAの勉強を始める前は上記の方法で効率化マクロを導入していました。
完成されたマクロを使ってエクセル業務を処理する
↓
作業効率が2倍以上アップ!!
↓
便利すぎて自分でもマクロを設定したいと考え始める
↓
参考書やネットの情報でVBAスキルを身に付ける
↓
マクロ開発を代行できる程のスキルを習得
VBAは
他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
という特徴があります。
毎日のルーティーン作業にうんざりしている、だれでもできる単純作業に時間を費やしている、という方はあなたに合った方法でVBAを導入しちゃいましょう。
マクロの開発を外注に依頼する
マクロの開発を外注に依頼する導入方法は
VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法
です。
「こんなエクセル作業を自動化したい」「作った資料を自動的にPDFで保存したい」「決まった様式に写真を自動で貼り付けたい」
こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

ガッツポーズの人
デメリットは、費用がかかることだけ。
開発内容、依頼先によってかかる費用は大きく異なります。
私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

疑問がある人
ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。
開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、
費用が安い!スピード納期!!
でやらせてもらっています。
ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。
ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。
マクロが設定されたエクセルファイルをダウンロードする
VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』ですぐにエクセル作業を自動化することができます。
たとえば、
A4用紙に写真を貼り付けてコメントを入力する作業を自動化したい!という場合、
『写真を貼り付けるマクロ』が設定されたエクセルファイルをダウンロードすれば問題解決です。
実際に、『写真を貼り付けるマクロ』をダウンロードして使っている様子がこちら

ガッツポーズの人
『マクロが設定されたエクセルファイルをダウンロード』する導入方法は、
VBA初心者でもマクロを導入できる、費用が安い、
というメリットがあります。
しかし
VBAに関する情報が多く公開されているとはいえ、ネット上で想定するマクロは見つけることが難しい
というデメリットもあります。

ガッツポーズの人
個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。
今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。
参考書やネットでVBAスキルを身に付ける
先程も紹介しましたが、
VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
プログラミングです。
言い換えると、
情報量が豊富なので自分で勉強できちゃう
ということです。
私のVBAスキルはほとんど独学で身に付けたもので、
考えた処理のほとんどをVBAで表現できるレベルにまで到達した!
と思っています。
私の作ったマクロをプロのプログラマーが見れば、
お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!
と感じるはずです。
でも、
私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?
独学であっても『写真を貼り付けるマクロ』『全てのシートをPDF出力するマクロ』『連番を振るマクロ』など、
業務内容に合ったマクロを開発できるようになれます。
独学でVBAスキルを身に付けるコツは、
エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる
です。
とは言っても、全くの知識0の方は何をすればいいかわからないですよね。
VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。
VBAの知識0の方でもすいすい読み進められる内容になっています。
やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。
実際に私はこの参考書を読んでからVBAの勉強を始めました。

ひらめく人
VBAの魅力を発見した後は、
ひたすら自動化したい処理を実現するコードを書くだけ
です。
【VBA 写真を貼る】、【VBA PDF出力】、のようにネット検索すれば知りたいコードをすぐにゲットできます。
実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると
自然といろんなマクロが作れるようになっているはずです。
VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。
ディスカッション
コメント一覧
まだ、コメントがありません