VBAの関数の使い方|MsgBox・Format・WorksheetFunctionの使い分け

Excelで「関数」といえばSUMやVLOOKUPが代表的ですが、VBAにも独自の関数があります。ワークシート関数はセル上で動くもの、VBA関数はコード上で動くもので、使う場所と方法が異なります。

この記事では、代表的なVBA関数(MsgBox・Format・Left)とワークシート関数をVBAで使う方法(WorksheetFunction)を解説します。

MsgBox関数でメッセージを表示するには?

MsgBoxは処理の完了通知や確認ダイアログを表示するための関数です。マクロは通常動作終了の通知を出さないため、MsgBoxを入れることで処理の完了がわかりやすくなります。

MsgBox "完了しました"

「はい/いいえ」などのボタン付きダイアログも作れます。

Dim ans As Integer
ans = MsgBox("データを削除しますか?", vbYesNo)
If ans = vbYes Then
    ' 削除処理
End If

Format関数で日付・数値の表示形式を変換するには?

Format関数はセルの値をコード上で任意の形式に変換します。変換後の値を再度セルに書き込むことで、表示形式を統一できます。

' セルA2の日付を「2024年10月」形式に変換して書き込む
Cells(2, 1).Value = Format(Cells(2, 1), "yyyy年m月")

よく使うフォーマット指定の例を整理します。

書式文字列変換結果(例)
"yyyy年m月d日"2024年10月1日
"m月d日"10月1日
"aaa"火(曜日の略称)
"yyyymmdd"20241001
"#,##0"1,234(桁区切り)

WorksheetFunctionでワークシート関数をVBAから使うには?

SUMやCOUNTIFなどのワークシート関数はVBAで直接書けませんが、WorksheetFunction を前に付けることでVBAから呼び出せます。

' SUM関数をVBAで使う
Dim total As Long
total = WorksheetFunction.Sum(Range("A1:A10"))

' COUNTIF関数をVBAで使う
Dim cnt As Long
cnt = WorksheetFunction.CountIf(Range("A1:A100"), "完了")

VBAに組み込みのLeft・Right・Mid関数を使うには?

LeftRightMid などはVBA関数として直接使えます(WorksheetFunction 不要)。

' A2の値の左から3文字を取り出す
Dim f_txt As String
f_txt = Left(Cells(2, 1).Value, 3)

' A2の値の右から4文字を取り出す
Dim l_txt As String
l_txt = Right(Cells(2, 1).Value, 4)

まとめ

  • VBA関数(MsgBox・Format・Left等)はコード上でそのまま使える
  • ワークシート関数(SUM・COUNTIFなど)は WorksheetFunction.関数名() で呼び出す
  • Format(値, "書式") で日付・数値を任意の文字列に変換できる
  • Left・Right・Mid など両方に存在する関数はVBA関数として直接使える
  • ワークシート関数とVBA関数ではセル指定の方法("A1" vs Range("A1"))が異なる点に注意

よくある質問

WorksheetFunctionで使えない関数はありますか?

一部のワークシート関数はVBAから利用できません。その場合はVBAの組み込み関数で代替するか、セルに数式を入力してから値を取得する方法を検討します。

MsgBoxのボタンの種類はどう指定しますか?

第2引数に定数を指定します。vbOKOnly(OKのみ)・vbYesNo(はい/いいえ)・vbYesNoCancel(はい/いいえ/キャンセル)などがよく使われます。

Format関数とセルの表示形式の設定はどう違いますか?

セルの表示形式は見た目だけ変えて値はそのままです。Format関数はVBA上で文字列として変換した結果を変数に入れたりセルに書き込んだりするため、実際の値が変わります。

VBA関数の一覧はどこで確認できますか?

VBEのヘルプ(F1キー)や「VBA 組み込み関数 一覧」で検索すると確認できます。Len・Trim・InStr・IsNumericなど文字列・数値処理に便利な関数が多く用意されています。

ワークシート上のSUMと WorksheetFunction.Sumで結果は同じですか?

同じです。ただし WorksheetFunction.Sum はVBA変数に結果を受け取れるため、セルに書き戻すことなく計算結果をコード内で使い回せる点が異なります。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール