通常のモジュール(クラスモジュールではない)の関数は、データ型の後に()を置くことによって配列を返すことができます。. googletag.defineSlot('/21812778492/blog_728x90_common_eyecatch01_adsence', [728, 90], 'div-gpt-ad-1566564252373-0').addService(googletag.pubads()); サンプルコードで確認しましょう。 Sub macro1() Call func1 End Sub Function func1() As String MsgBox "Hello VBA!" ・IT部門の担当者は「アカウント」を作成し、依頼者に伝える, VBAでも、似たような処理を繰り返す場合、処理を共通化します。ここで、Functionプロシージャの登場です。Functionプロシージャに共通処理を記述します。, 世の中には、「依頼をする側」と「依頼を受ける側」があります。たとえばこのようなビジネスです。, Subプロシージャを呼び出す際はCallステートメントを使用し Call プロシージャ名 と記述しますが、Functionプロシージャを呼び出す際は、Callステートメントは使用しません。, 具体的なVBAのソースコードをみていきましょう。本体価格を渡すと税込金額が返ってくるプログラムです。, これを使いこなせると、開発の幅がグンと広がって、あっという間に脱・入門です!がんばって!, GAS・VBAを専門とするITライター。平日は経理のお仕事(会社員)してます。特技はGAS×freeeAPI. ©Copyright2020 プログラマー向けEXCEL活用術ブログ.All Rights Reserved. googletag.pubads().collapseEmptyDivs(); VBA 2020.5.9 【VBA】エラーが発生した行数をメッセージに出力する方法 VBA 2020.5.23 【VBA】ScriptControlを使用せずにJSONをパースする VBA 2020.5.2 【VBA】ノード名を指定せずにXMLをパースする VBA 2020.4.25 【VBA】functionの戻り値を複数にするにはどの方法がベストか googletag.cmd.push(function() { 実行結果: googletag.pubads().setTargeting('blog_type', 'Tech'); }); 処理の結果を保存して条件判定に使う時に、Boolean型の使い方を覚えておくと便利です。, たとえば、「変数Aが文字列の場合はTrue、文字列以外の場合はFalse」のように条件を指定した結果を保存するために使います。, 変数の基礎については以下で詳しく解説しているので、変数をあまり使ったことがない方は見てみてくださいね!, ここまでBoolean型の使い方について解説してきましたが、Boolean型の変数だけを使うことはほとんどなく、以下のどちらかの方法で使うケースが多いです。, たとえば、「変数Aが文字列かどうか判定し、結果をBoolean型の変数に保存する」というときに使います。, 「TypeName(A) = "String"」で変数AがString(文字列型)になっているかIF文で判定し、結果をBoolean型の変数checkResultに保存し、最後に結果を出力しています。, 条件分岐に使ったIF文の使い方について詳しく知りたい方は、以下を見てみてくださいね!, 先ほどは処理の中に直接IF文・TypeName関数を使った条件判定を書きましたが、Functionプロシージャを使って処理を分けるのが一般的です。, その戻り値にBoolean型を使うことで、同じような処理を作りつつ、結果のみメインの処理で使うことができます。, 先ほどのサンプルコードを、Functionプロシージャで書き換えたサンプルを用意しました。, 変数の型が文字列かどうかチェックするコードを「isVariableType_String」に移動して、チェック結果のみメインの「Test2」の処理で受け取って、結果を出力しています。, さきほどの処理と結果は同じですが、別の処理で同じように変数の型を調べたいときにも使えるようため、Functionプロシージャを使う方法も合わせて覚えておくと便利です!, ちなみに、Functionプロシージャの使い方については以下でも詳しく解説しているので、気になる方は見てみてくださいね!, 最後に開設した、「Boolean型 + Functionプロシージャ」の使い方をマスターすると、汎用性の高いコードが作れるようになります。, 当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。 Trueの場合はFalse、Falseの場合はTrueにしたい場合. googletag.defineSlot('/21812778492/blog_300x250_common_sidetop01_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565330658303-0').addService(googletag.pubads()); googletag.defineSlot('/21812778492/blog_300x250_common_sidemiddle01_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565198726712-0').addService(googletag.pubads()); Function プロシージャ名(引数 As データ型) As 戻り値のデータ型 プロシージャ名 = 戻り値 End Function プロシージャ内で様々な処理を行った後で、プロシージャ名に値を格納することで呼び出し元に値を返す事ができます。この返される値を戻り値と言います。 例. googletag.cmd = googletag.cmd || []; 2020.03.07 googletag.defineSlot('/21812778492/blog_728x90_common_overlay', [728, 90], 'div-gpt-ad-1584694002281-0').addService(googletag.pubads()); Functionプロシージャは、VBA入門者が苦手意識をもちやすい機能のひとつですね。, あなたの部署に、新規の派遣社員が来ることになりました。業務をしてもらうために、パソコン操作用のアカウントが必要です。, ・各部署(依頼者)は、新規派遣の「氏名」をIT部門の担当者に伝える VBAのBoolean型はTrueとFalseの2つの値しかありません。 その性質から、フラグや「OK or NG」や「On or Off」の判定結果のような用途として利用することが多い型です。 Function arrayOfPiDigits() As Long() Dim outputArray(0 To 2) As Long outputArray(0) = 3 outputArray(1) = 1 outputArray(2) = 4 arrayOfPiDigits = outputArray End Function ---------- Public wUpdI… エクセルVBAのFunctionプロシージャついて解説しています。Functionプロシージャは、戻り値を返すプロシージャです。関数のような動作をするため、ユーザー定義関数とも言われます。 Javaのboolean型を実際に使ってみよう3. 具体的なVBAのソースコードをみていきましょう。本体価格を渡すと税込金額が返ってくるプログラムです。 引数:本体価格; 返り値(戻り値):税込価格; 呼び … ヒロユキ, VBAの案件をやっていて思うのは、「ツールを納品後にほぼ確実に問い合わせ対応することになる」ということです。, 超簡単なツールであればないのですが、ある程度外部参照などを使用したツールを作成すると、環境依存の問題が必ず発生します。, (そのような環境依存問題を発生させないようにするのが優れたVBAプレイヤーなのかもしれません。), その時、エラー処理が適切にされていないとアプリがヤベーことになる可能性もあるので、しっかりと対処をしておきたいところです。, エラーに対して完全に無策の場合、エラーが発生した時点でプロジェクトが終了してしまいます。, シートに値を書き出す、ボタンを活性化させる、ファイルを書き出すなどの処理はエラーが起きた時点でプログラム実行前に戻してあげる必要があります。, ユーザーはエラーが起きたら、すぐにアプリを中断して問い合わせるようなリテラシーの高い人ばかりではないと思いますしね。, またエラーメッセージもマイクロソフトのデフォルトのものでは、非常にわかりにくいです。, あなたが「こんなエラーが出た」と言って上記の画面を見せられたところで、原因の箇所を洗い出すのは困難ですよね。, 当然ですが、予めエラーが発生しそうなところについては、エラーチェックを行ってから処理を行うのがベストです。, 上記エラーであれば、「この関数でエラーが起こったのだな」というのを開発者がすぐに特定できるため、エラーへの対応力が上がります。, VBAには、「On Error」というエラーが発生した時にどうするかを定義できる関数があり、「On Error GoTo xxxxx」と書くことでエラー用の処理に飛ばすことが出来ます。, 何故なら、正常終了した場合には、エラー処理を実行させたくない場合が大半だからです。, そのため正常処理は「Exit Sub」させ、その後にエラー用の処理を書いていきます。, ただ、どの時点でエラーが発生したのか読みにくいため関数名を入れておくのがベストです。行番号も入れられればよいのですが、これはラベルを定義しまくらないと難しいので現実的ではないです。, ついでに、Err.Descriptionでエラーの説明、Err.Numberでエラー番号を取れるので出しておきましょう。, マクロを作成する上で、サブルーチンを使わないことはまずありえないのですが、サブルーチン内でエラーになった場合の対処は結構悩ましいところです。, child「異常終了したよ」→main「正常終了したよ」という順番で表示されてしまいます。, つまりchild関数でエラーを処理した時点で、エラーがクリアされているためmain関数ではchild関数でエラーになったことを検知できないのです。, というものがあります。大規模なアプリになるほど「子から親にエラーが起きたかどうかの情報を渡す」のほうが良いですね。, 上記を実行すると、childでエラーが処理されていないため、mainの「On Error GoTo」が発火して”異常終了したよ”が表示されます。, この場合は問題ないのですが、サブルーチンが増えると適切な後処理を行うことが難しくなるので、マクロが大きくなるにつれて不便になってきます。, child関数がboolean型になっており、その関数がエラーであったかどうかの情報を返します。, まず「child = False」を指定しているので、エラーとなった場合には関数の戻り値がFalseとなります。, 問題点として、関数の戻り値がBooleanになってしまうので、直感で何をやる関数なのかわかりにくいということですね。, 自分は、ほぼ返したい変数の方をByRefにしてしまっていますが、改めて見るとコメントなしだとかなりわかりにくい気がします…。, 次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。. vba documentation: 関数から配列を返す. 通常のモジュール(クラスモジュールではない)の関数は、データ型の後に()を置くことによって配列を返すことができます。. GitHub, この場合は、変数に代入するのではなく、SubプロシージャのCall関数を使わないパターンと同様な利用の仕方をします。, Calling Sub and Function Procedures | Microsoft Docs, どのように使い分けるかですが、やはり「戻り値を受け取るか、受け取らないか」で利用するのがスッキリすると思います。, このことからも、Subプロシージャが制御のプログラム(メイン関数)として利用され、一部の機能の処理を受け持つのがFunctionプロシージャと言う位置づけなのでしょう。, Milkのメモ帳(Milk's Memo Note )は、日々の思いつきを忘れないように、メモ用の雑記ブログです。, 図解でわかる エクセルのマクロとVBAがみるみるわかる本[Excel2016/2013/2010対応最新版] (Shuwa business), 【Visual Studio】可変配列(ArrayList、List)の使い方【C#】, 【死にゲー】「CODE VEIN」って面白いの?「Bloodborne」と比較してみる。【ソウルライク】. googletag.defineSlot('/21812778492/blog_300x600_common_sidemiddle01_adsense', [300, 600], 'div-gpt-ad-1571293897778-0').addService(googletag.pubads()); 戻り値なしのFunctionプロシージャを呼び出す場合は、Callステートメントを使います。 以下のように記述します。 Call Functionプロシージャ名. pbjs.que=pbjs.que||[]; VBAのBoolean型はTrueとFalseの2つの値しかありません。 その性質から、フラグや「OK or NG」や「On or Off」の判定結果のような用途として利用することが多い型です。 googletag.defineSlot('/21812778492/blog_300x250_common_fixed01', [[300, 250], [336, 280]], 'div-gpt-ad-1559710191960-0').addService(googletag.pubads()); その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。 これは、自分でFunctionを作った時にも使えます。 戻り値の型をBooleanにするだけでなく、 エラーコードを返すようなFunctionを作った時には、 正しければ0を、間違っている場合は0以外を返すように作れば、 条件式が書きやすくなるという事です。