【Excelマクロ】関数

Excelマクロ

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上でも組むことができるものもありますが、ある程度、特定の動作ができる関数は非常に重宝するものなので、うまく組み合わせて、使っていきましょう。

コメント