VBAの関数とは
Excelで「関数」と言えば、SUM関数やVLOOKUP関数といったものがよく知られています。これらは「ワークシート関数」と呼ばれ、シート上で動作する関数です。
一方で、VBA内でも使用できる関数があり、MsgBox関数やFormat関数などがその代表例です。これらは「VBA関数」と呼ばれ、コード上で動作する関数です。
ワークシート関数とVBA関数の違い
「ワークシート関数」と「VBA関数」には、同じ名前でも異なるものがあります。
ただし、どちらも共通して引数(追加情報)を指定して動作をさせることには変わりがありません。
今回はVBA関数について、いくつか説明します。
1. MsgBox関数
MsgBoxは、「Message Box(メッセージボックス)」の略称で、メッセージを表示するための関数です。
例えば、次のようなメッセージを表示できます:
「○○しますか?」 → 「はい」「いいえ」
「データがありますが削除しても良いですか?」
この関数を使えば、マクロ動作中に自身が表示させたいメッセージを表示することができます。
MsgBox "完了しました"
このコードを使えば、特定のタイミングで「完了しました」というメッセージを表示することができます。
通常、マクロは動作後には通知しないため、いつ終わったかがわかりません。なんとなく、動作が止まったかな?ということで確認はできますが、メッセージを出すことをで視覚的にもわかりやすくなります。
このようにMsgBox関数を使って、進捗や結果を知らせると便利です。
2. Format関数
Format関数は「形式を設定する」ための関数で、指定した形式で表現できます。たとえば、日付や数値の表示を変更することができます。
日付の例
「2024/10/1」 → 「10月1日」
「2024/10/1」 → 「2024年10月」
通常のセルの表示形式を変更するのとは異なり、VBA上で形式を変換した後にセルへ入力することができます。
Cells(2, 1).Value = Format(Cells(2, 1), "yyyy年m月")
このコードでは、セルA2に入っている日付を「2024年10月」という形式に変換して、再度セルA2に入力しています。
Format関数の設定例
"m月d日" → 「10月1日」
"aaa" → 「火」
これらの設定は、ワークシートのセルの「表示形式」で使うものと同じです。そのため、「セルの書式設定」にて設定できるものを、Format関数で指定すれば、同じ表現をすることができます。
ワークシート関数とVBA関数の違いと使い方
ワークシート関数にはSUM関数やVLOOKUP関数などがありますが、これらはVBA上で直接使うことはできません。ただし、LEFT関数やRIGHT関数のように、一部の関数はワークシート関数とVBA関数の両方で同じ名前で利用できます。
そのため、VBA内でもほぼそのまま使えるケースがあります。
しかし、関数の見た目が同じでも、ワークシート上では「A1」と設定するのに対し、VBA上では「Cells(1,1)」や「Range(“A1”)」のように設定をするので、指定方法が異なる点に注意をしましょう。
VBAでワークシート関数を使う方法
VBAでワークシート関数を使用するには、WorksheetFunctionプロパティを使います。
例)SUM関数をVBAで使う
total = WorksheetFunction.Sum(Range("A1:A10"))
通常の「=SUM(“A1:A10”)」の処理と結果が同じになります。
このようにWorksheetFunctionを前につけることで、ワークシート関数をVBA内で利用可能になります。
このようにすれば、VBA関数にはないもので、ワークシート関数を使いたい場合でもWorksheetFunctionを使えば、利用することができます。
VBA関数の使い方
一方で、LEFT関数などはワークシート関数にも、VBA関数にもあるので、 WorksheetFunctionを使う必要はありません。
例)LEFT関数を使う
f_txt = Left(Cells(2, 1).Value, 3)
「A2(Cells(2,1)の値のうち、左から3文字抜き出す」という動作を行います。
このようにVBA関数はセルの値を直接指定して操作でき、使い方は通常のワークシートとほぼ同じです。
まとめ
ワークシート関数はシート上で使える関数のため、VBA上で利用する場合には、WorksheetFunctionプロパティを活用する必要があります。
VBA関数はそのまま使用可能で、ワークシート関数にはない関数もあります。
同じ動作をVBA上でも組むことができるものもありますが、ある程度、特定の動作ができる関数は非常に重宝するものなので、うまく組み合わせて、使っていきましょう。
コメント