VBA入門
VBA関数について

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
最終更新日:2021-09-09

第44回.VBA関数について


ワークシートに関数があるように、マクロVBAにも専用の関数が用意されています、
このマクロVBA専用の関数をVBA関数と呼んだりします。
関数とは、
多くの人が共通して必要となる機能(命令)を一塊にしてプログラミング言語として用意されているものです。


また、マクロVBAではVBA関数だけでなく、ワークシート関数も使えますが、
それは、WorkSheetFunctionクラスを使うもので、これについては後々に説明いたします。
VBA関数以外に、Excelワークシート関数をマクロVBAで使うことが出来ます、ワークシート関数は、VBA関数よりはるかに多くの関数があるので、ぜひ活用したいところです。。ワークシート関数を使う事で、VBAコードを非常に簡潔に記述することが出来る場合が多いものです。


VBA関数の書き方

戻り値を他の変数やセルに代入
変数orセル = 関数名(第1引数, 第2引数, 第3引数, ・・・)
関数の戻り値を他の変数やセルに入れて使います。

関数の戻り値をIf文で判定
If 関数名(第1引数, 第2引数, 第3引数, ・・・) = ○○○ Then
関数の戻り値をIf文等で判定します。

VBA関数のネスト
変数orセル = 関数名(関数名(第1引数, 第2引数, 第3引数, ・・・), 第2引数, 第3引数, ・・・)
関数をネストして使う事も出来ます。
関数の戻り値を、別の関数の引数として指定しています。

関数は、通常は上記のように、その戻り値を使って次の処理に進みます。


関数の戻り値を使わない場合

MsgBox "メッセージ"
このように、戻り値を使用しない事も稀にあります。

この時の記述方法として、

関数名 第1引数, 第2引数, 第3引数, ・・・

戻り値を使用しない場合は、引数を()で囲まずに記述します。
関数は、ほとんどの場合は戻り値を使うので、通常は、

変数 = 関数名(第1引数, 第2引数, 第3引数, ・・・)

このように、()で引数を囲いますので、戻り値を使わない場合の記述については要注意です。

VBAにおける括弧()の使い方
オブジェクトのメソッドや、プロシージャー(Sub、Function)を呼ぶときに、引数を括弧()で囲うのか、囲わないのか… 初心者が赤い文法エラーが出て悩むことの一つです。VBAでは、どんな時に括弧を付けて、どんな時に括弧を付けないのか… ・括弧が必要な場合 ・括弧が不要な場合 これらについて具体的な例とともに解説…


名前付き引数

関数の引数は、名前付き引数が利用できますが、
慣習的に、VBA関数においては名前付き引数を使う事は少ないようです

引数自体の数が、そんなに多くないので記述を簡略化する事が多いからでしょう。
オブジェクトのメソッドの場合は引数が多いものがあるので、名前付き引数を使うようにします。

名前付き引数
引数とは、関数やメソッド等を呼び出すときに渡す値のことです。この引数を渡す時の記述方法として、名前付き引数があります。マクロVBAでの記述では、:=が使われます。この:=は名前付き引数のみで使用される記述になります。


○○○B関数

文字列をバイト データとして扱う場合の関数です。

AscB、ChrB、LeftB、LenB、RightB

これらになりますが、使用する機会は少ないでしょう。


○○○$関数

文字列型 (String) の値を返します。
これらの関数は、ドル記号を付けずに使用すると、バリアント型 (Variant) の値を返します。

Chr$、ChrB$、Command$、CurDir$、Date$、Dir$、Error$、Format$、Hex$、Input$、InputB$、LCase$、Left$、LeftB$、LTrim$、Mid$、MidB$、Oct$、Right$ RightB$ RTrim$、Space$、Str$、String$、Time$、Trim$、UCase$

多くありますが、実際に使用する事は少ないです。
これらを使わなければ処理が出来ないという事もないので、特に覚えなくても良いでしょう。


ワークシート関数との関係

VBA関数には、ワークシート関数と(ほぼ)同一名称の関数も多くあります。
従って、同様機能の関数はワークシート関数とVBA関数をセットで覚えるようにすると良いでしょう。

しかし、その引数に違いがあったり、機能の細部が違っていたりするので、ある程度の注意は必要です。
この点については、次回以降で説明します。

また、前述したように、WorkSheetFunctionを使う事でワークシート関数も使用できますが、それは後々。


自動メンバ表示

VBEにおいては、引数が自動的に表示(自動メンバ表示)されますので、これを活用して下さい。
関数名を入力すると、

マクロVBA サンプル画像

このように、引数が表示されます。
そして、引数が決められた内容の場合は、そのメンバが自動表示されます。

マクロVBA サンプル画像

上下矢印キーで選択し、TABキーで決定して下さい。


習得すべき関数

VBA関数は、全部で140以上あり(ワークシート関数は400以上ありますが)、
全てを覚えるのは大変ですし、その必要もないでしょう。
統計・財務・数学等の関数は、人それぞれで必要な関数を使えるようになれば良いと思います。

しかし、マクロを書く上で、どうしても覚える必要のある関数もあります。
日付や文字列操作の関数は、どのような業務においても必須となりますので、必ず習得して下さい。


最後に

関数なら、1行で済む事を、延々とマクロを書くような事は愚かしい事です。
また、関数を使わなくては実現困難な処理も多数あります。
少なくとも、どのような関数があるかだけは押さえておいて下さい。

具体的な引数まで知らずとも、関数の存在だけでも知っていれば、
必要な時に、調べながらマクロを書いても問題は無いはずです。

VBA関数一覧
マクロVBA関数の一覧と解説です、どんな関数があるかは一度は確認しておくとをお勧めいたします。どんな関数があるだけでも知っておけば、詳細の使い方は実際に使うときに調べても良いでしょう。文字列操作…34 分岐…3 型変換…14 データ判定…10 日付時刻…20 配列…6 ファイル操作…14 数学/財務…28 その他……

一度は、どんな関数があるか一通り目を通しておくと良いでしょう。




同じテーマ「マクロVBA入門」の記事

第41回.セルのコピー&値の貼り付け(PasteSpecial)
第42回.セルをコピーするとは
第43回.総合練習問題5
第44回.VBA関数について
第45回.VBA関数(Format)
第46回.VBA関数(日付,DateAdd)
第47回.VBA関数(文字列操作,Replace,InStr,StrConv)
第48回.VBA関数(その他,Fix,Int,Rnd,Round,IsEmpty)
第49回.Like演算子とワイルドカード
第50回.総合練習問題6
第87回.WorksheetFunction(ワークシート関数を使う)


新着記事NEW ・・・新着記事一覧を見る

VLOOKUPを使うことを基本としてシートを設計すべきか|エクセル雑感(2021-08-17)
コンピューターはブラックボックスで良い|エクセル雑感(2021-08-14)
小文字"abc"を大文字"ABC"に変換する方法|エクセル雑感(2021-08-13)
ADOでテキストデータを集計する|VBAサンプル集(2021-08-04)
VBA学習のお勧めコース|エクセル雑感(2021-08-01)
エクセル馬名ダービー|エクセル雑感(2021-07-21)
在庫を減らせ!毎日棚卸ししろ!|エクセル雑感(2021-07-05)
日付型と通貨型のValueとValue2について|エクセル雑感(2021-06-26)
DXってなんだ? ITと何が違うの?|エクセル雑感(2021-06-24)
エクセルVBA 段級位 目安|エクセル雑感(2021-06-21)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.Excelショートカットキー一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.RangeとCellsの使い方|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.マクロって何?VBAって何?|VBA入門
7.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
8.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
9.セルに文字を入れるとは(Range,Value)|VBA入門
10.とにかく書いてみよう(Sub,End Sub)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ