Excel VBA

エクセルVBAのメッセージボックスの使い方を紹介します。【Msgbox】

エクセルVBAの学習を始めた頃に知ることが多い「メッセージボックス」

メッセージを表示するだけでなく、処理を分岐させることができるなど、プログラムの利用者が使いやすくするには必要な機能だと思います。

便利な反面、設定できることが多く使いにくい時もあります。
今回は、そんなメッセージボックスについて紹介したいと思います。

こんな方におすすめ

  • エクセルVBAを学習したいと思っている方
  • プログラムにメッセージボックスを使ってみたい方
  • エクセルVBAでどのようなことができるのか知りたい方


メッセージボックスを使う場面

エクセルVBAでメッセージボックスを使う場面を紹介します。


メッセージボックスを使う場面

  • プログラムの実行を知らせる
  • 実行するプログラムを選ぶ
  • エラーメッセージを分かりやすく伝える
  • プログラムの終了を知らせる

メッセージの表示なので、プログラムを利用する方にとって便利で分かりやすいものになればOKだと思います。

ポイント

一番シンプルなのが「プログラムの終了を知らせる」です。
エクセルVBAのプログラムは、メッセージがない場合「いつ終わったのか分かりにくい」と感じています。

そのため、処理の最後に「処理が完了しました」などのメッセージを表示するようにすると分かりやすくなります。

メモ

エクセルVBAで、メッセージボックスを使う場合は引数が4つあります。
※4つ目は使う機会が少ないので3つだけ紹介します。

  • MsgBox (①表示したいメッセージ, ②ボタンの種類 , ③メッセージボックスのタイトル)

①表示したいメッセージだけ入力してもプログラムを動かすことができます。

②使用場面によってボタンの種類を変更することができます。
 ※メッセージボックスの種類で詳しく紹介します。

③メッセージボックスのタイトルも指定することができます。

メッセージボックスの種類

メッセージボックスのうち、使いそうなものを紹介します。

メッセージボックス

  • 【OK】を表示するもの
  • 【OK】と【キャンセル】を表示させるもの
  • 【中止】【再試行】【無視】を表示されるもの
  • 【はい】【いいえ】【キャンセル】を表示させるもの
  • 【はい】と【いいえ】を表示させるもの
  • 【再試行】と【キャンセル】を表示させるもの
  • 重要な【OK】を表示させるもの
  • 確認の【OK】を表示させるもの
  • 注意を促す【OK】を表示させるもの
  • 情報を伝える【OK】を表示させるもの
  • 【OK】と【ヘルプ】を表示させるもの
  • 【OK】を表示※メッセージを右揃えにする

実際に使うのは、ほんの一部かもしれませんが、使い分けられるようになるとプログラムの幅が広がりそうです。

メッセージボックスを変更するには

メッセージボックスで「表示させたいメッセージ」の後に【,】(カンマ)を入力してから「メッセージの種類を選択」ことができます。

MsgBox ("表示したいメッセージ", ここに入力)


メッセージの選択肢が複数ある場合は、条件分岐のIf文を使います。
If文について知りたい方はこちらの記事で紹介しています。

こちらもCHECK

エクセルVBAのIf文を紹介します。【プログラムの幅が広がるかも】

エクセルVBAで業務改善プログラムを作成していると絶対といってもいいくらい使用するコードが「If文」です。 条件に応じてプログラムの処理を変更できるので、実務でも役に立ちます。 If文はマクロの記録で ...

続きを見る


【OK】を表示する

メッセージボックスの一番シンプルな形はこちらのコードです。

Sub MessageBox()
  MsgBox "処理が完了しました。"
End Sub

メッセージが表示されるだけのシンプルなプログラムです。
プログラムを実行するとこちらのような画面が表示されます。
(メッセージに表示する文面は自由に設定できます)

【OK】ボタンを押すとメッセージが消えます。

メモ

マクロの記録で作成したプログラムの最後にメッセージを追加すると便利です。


【OK】と【キャンセル】を表示する

メッセージボックスに【OK】と【キャンセル】を表示させることもできます。

書き方

コード

MsgBox("表示させたいメッセージ。", vbOKCancel)

表示させたいメッセージの後にカンマ【,】を入力、その後に【vbOKCancel】と入力します。

コードはこちらです。
If文と組み合わせることでボタンごとに異なる処理を実行できるようになります。

Sub MessageBox()
Dim okCancel As Integer
  okCancel = MsgBox("処理を開始しますか?。", vbOKCancel)
  If okCancel = 1 Then
    Sheet1.Range("A1") = 1 'OKボタンを押した時の処理
  Else
    Sheet1.Range("A1") = 2 'キャンセルボタンを押した時の処理
  End If
End Sub

プログラムの処理をするか、しないかを決めるときなどに使えます。


ちなみにSelect Caseでもプログラムを作ることができます。

Sub MessageBox()
'Select Caseを使った場合
  Select Case MsgBox("処理を開始しますか?。", vbOKCancel)
    Case 1
      Sheet1.Range("A1") = 1 'OKボタンを押した時の処理
    Case 2
      Sheet1.Range("A1") = 2 'キャンセルボタンを押した時の処理
  End Select
End Sub


プログラムを実行するとこのような画面が表示されます。
(メッセージは好きな内容にできます)


ポイント

【OK】と【キャンセル】ボタンを表示させるメッセージボックスは、押すボタンによって戻り値(プログラムから渡される値)がそれぞれあります。

  • 【OK】ボタンを押した場合:1
  • 【キャンセル】ボタンを押した場合:2

このような流れにして使っています。

  1. メッセージボックスの戻り値を入れる変数を宣言
  2. メッセージボックスの戻り値を変数に入れる
  3. 変数の値に応じて処理を分岐させる

条件分岐と組み合わせることで「プログラムを実行する」か「プログラムを終了する」などのように使用することもできます。


【中止】と【再試行】と【無視」を表示する

【中止】【再試行】【無視】の3択が表示されるメッセージボックスもあります。

書き方

コード

MsgBox("表示させたいメッセージ。", vbAbortRetryIgnore)

表示させたいメッセージの後にカンマ【,】を入力、その後に【vbAbortRetryIgnore】と入力します。

文と組み合わせることでボタンごとに異なる処理を実行できるようになります。

Sub MessageBox()
Dim Sentaku As Integer
  Sentaku = MsgBox("エラーが発生しました", vbAbortRetryIgnore)
  If Sentaku = 3 Then
    Sheet1.Range("A1") = 1 '中止ボタンを押した時の処理
  ElseIf Sentaku = 4 Then
    Sheet1.Range("A1") = 2 '再試行ボタンを押した時の処理
  Else
    Sheet1.Range("A1") = 3 '無視ボタンを押した時の処理
  End If
End Sub


こちらもSelect Caseで書くことができます。

Sub MessageBox()
'Select Caseを使った場合
  Select Case MsgBox("エラーが発生しました", vbAbortRetryIgnore)
    Case 3
      Sheet1.Range("A1") = 1 '中止ボタンを押した時の処理
    Case 4
      Sheet1.Range("A1") = 2 '再試行ボタンを押した時の処理
    Case 5
      Sheet1.Range("A1") = 3 '無視ボタンを押した時の処理
  End Select
End Sub


プログラムを実行するとこのような画面が表示されます。
(メッセージは好きな内容にできます)


ポイント

【中止】と【再試行】と【無視】ボタンを表示させるメッセージボックスは、押すボタンによって戻り値(プログラムから渡される値)がそれぞれあります。

  • 【中止】ボタンを押した場合:3
  • 【再試行】ボタンを押した場合:4
  • 【無視】ボタンを押した場合:5

このような流れにして使っています。

  1. メッセージボックスの戻り値を入れる変数を宣言
  2. メッセージボックスの戻り値を変数に入れる
  3. 変数の値に応じて処理を分岐させる

【再試行】と【無視】ボタンで処理を分ける場合は難しいかもしれませんが、ぴったりな場面がある時には便利かもしれません。


【はい」と【いいえ」と【キャンセル】を表示する

【はい】【いいえ】【キャンセル】の3択のメッセージを表示させることもできます。

書き方

コード

MsgBox("表示させたいメッセージ。", vbYesNoCancel)

表示させたいメッセージの後にカンマ【,】を入力、その後に【vbYesNoCancel】と入力します。

文と組み合わせることでボタンごとに異なる処理を実行できるようになります。

Sub MessageBox()
Dim Sentaku As Integer
  Sentaku = MsgBox("処理を実行しますか?", vbYesNoCancel)
  If Sentaku = 6 Then
    Sheet1.Range("A1") = 1 'はいボタンを押した時の処理
  ElseIf Sentaku = 7 Then
    Sheet1.Range("A1") = 2 'いいえボタンを押した時の処理
  Else
    Sheet1.Range("A1") = 3 'キャンセルボタンを押した時の処理
  End If
End Sub


Select Caseでも書くことができます。

Sub MessageBox()
  Select Case MsgBox("処理を実行しますか?", vbYesNoCancel)
    Case 6
      Sheet1.Range("A1") = 1 'はいボタンを押した時の処理
    Case 7
      Sheet1.Range("A1") = 2 'いいえボタンを押した時の処理
    Case 2
      Sheet1.Range("A1") = 3 'キャンセルボタンを押した時の処理
  End Select
End Sub


プログラムを実行するとこのような画面が表示されます。


ポイント

【はい】と【いいえ】と【キャンセル】ボタンを表示させるメッセージボックスは、押すボタンによって戻り値(プログラムから渡される値)がそれぞれあります。

  • 【はい】ボタンを押した場合:6
  • 【いいえ】ボタンを押した場合:7
  • 【キャンセル】ボタンを押した場合:2

このような流れにして使っています。

  1. メッセージボックスの戻り値を入れる変数を宣言
  2. メッセージボックスの戻り値を変数に入れる
  3. 変数の値に応じて処理を分岐させる

【はい】と【いいえ】と【キャンセル】ボタンで処理を分けることができるようになります。
3択になることでさらに細かい処理をすることができます。


【はい】と【いいえ】を表示する

【はい】と【いいえ】の2択でメッセージを表示することもできます。
(このメッセージは、使いやすいと思います)

書き方

コード

MsgBox("表示させたいメッセージ。", vbYesNo)

表示させたいメッセージの後にカンマ【,】を入力、その後に【vbYesNo】と入力します。

文と組み合わせることでボタンごとに異なる処理を実行できるようになります。

Sub MessageBox()
Dim Sentaku As Integer
  Sentaku = MsgBox("処理を実行しますか?", vbYesNo)
  If Sentaku = 6 Then
    Sheet1.Range("A1") = 1 'はいボタンを押した時の処理
  Else
    Sheet1.Range("A1") = 2 'いいえボタンを押した時の処理
  End If
End Sub


Select Caseでの書けます。

Sub MessageBox()
  Select Case MsgBox("処理を実行しますか?", vbYesNo)
    Case 6
      Sheet1.Range("A1") = 1 'はいボタンを押した時の処理
    Case 7
      Sheet1.Range("A1") = 2 'いいえボタンを押した時の処理
  End Select
End Sub

ポイント

【はい】と【いいえ】ボタンを表示させるメッセージボックスは、押すボタンによって戻り値(プログラムから渡される値)がそれぞれあります。

  • 【はい】ボタンを押した場合:6
  • 【いいえ】ボタンを押した場合:7

このような流れにして使っています。

  1. メッセージボックスの戻り値を入れる変数を宣言
  2. メッセージボックスの戻り値を変数に入れる
  3. 変数の値に応じて処理を分岐させる

条件分岐と組み合わせることで「プログラムを実行する」か「プログラムを実行しない」などのように使用することもできます。


プログラムを実行するとこのような画面が表示されます。



【再試行】と【キャンセル】を表示する

【再試行】と【キャンセル】の2択のメッセージです。

使ったことはありませんが、プログラムの内容によっては使えるのかもしれません。

書き方

コード

MsgBox("表示させたいメッセージ。", vbRetryCancel)

表示させたいメッセージの後にカンマ【,】を入力、その後に【vbRetryCancel】と入力します。

文と組み合わせることでボタンごとに異なる処理を実行できるようになります。

Sub MessageBox()
Dim Sentaku As Integer
  Sentaku = MsgBox("処理が中断しました。", vbRetryCancel)
  If Sentaku = 4 Then
    Sheet1.Range("A1") = 1 '再試行ボタンを押した時の処理
  Else
    Sheet1.Range("A1") = 2 'キャンセルボタンを押した時の処理
  End If
End Sub



Select Caseでも書けます。

Sub MessageBox()
'Select Caseの場合
  Select Case MsgBox("処理が中断しました。", vbRetryCancel)
    Case 4
      Sheet1.Range("A1") = 1 '再試行ボタンを押した時の処理
    Case 2
      Sheet1.Range("A1") = 2 'キャンセルボタンを押した時の処理
  End Select
End Sub

プログラムを実行するとこのような画面が表示されます。


ポイント

【再試行】と【キャンセル】ボタンを表示させるメッセージボックスは、押すボタンによって戻り値(プログラムから渡される値)がそれぞれあります。

  • 【再試行】ボタンを押した場合:4
  • 【キャンセル】ボタンを押した場合:2

このような流れにして使っています。

  1. メッセージボックスの戻り値を入れる変数を宣言
  2. メッセージボックスの戻り値を変数に入れる
  3. 変数の値に応じて処理を分岐させる

条件分岐と組み合わせることで「プログラムを再開する」か「プログラム中止する」などのように使用することもできます。


重要な【OK】を表示する

通常の【OK】ボタンだけのメッセージよりも重要度を上げたい場合に使えるかもしれません。

書き方

コード

MsgBox("表示させたいメッセージ。", vbCritical)

表示させたいメッセージの後にカンマ【,】を入力、その後に【vbCritical】と入力します。


コードはこちらです。

Sub MessageBox()
  MsgBox "処理が中断しました。", vbCritical
End Sub


プログラムを実行するとこのような画面が表示されます。


ポイント

【OK】ボタンを表示させるだけのメッセージボックスですが、【OK】ボタンを押すことによって戻り値(プログラムから渡される値)が得られます。

  • 【OK】ボタンを押した場合:1

メッセージの表示の後に何か処理を加えたい場合には、If文と組み合わせてもいいかもしれません。
※何もしない場合でも、OKボタンを押した後はプログラムの流れに沿って順に処理が行われます。


確認の【OK】を表示する

通常の【OK】ボタンだけのメッセージの印象を変えることができます。

書き方

コード

MsgBox("表示させたいメッセージ。", vbQuestion)

表示させたいメッセージの後にカンマ【,】を入力、その後に【vbQuestion】と入力します。


コードはこちらです。

Sub MessageBox()
  MsgBox "入力内容の確認をしましたか?", vbQuestion
End Sub


こちらがプログラムを実行した画面です。


ポイント

【OK】ボタンを表示させるだけのメッセージボックスですが、【OK】ボタンを押すことによって戻り値(プログラムから渡される値)が得られます。

  • 【OK】ボタンを押した場合:1

メッセージの表示の後に何か処理を加えたい場合には、If文と組み合わせてもいいかもしれません。
※何もしない場合でも、OKボタンを押した後はプログラムの流れに沿って順に処理が行われます。


注意を促す【OK】を表示する

通常の【OK】ボタンだけのメッセージの注意効果を付けることができます。

書き方

コード

MsgBox("表示させたいメッセージ。", vbExclamation)

表示させたいメッセージの後にカンマ【,】を入力、その後に【vbExclamation】と入力します。


こちらがコードです。

Sub MessageBox()
  MsgBox "入力内容に不備があります。", vbExclamation
End Sub


こちらがプログラムを実行した画面です。


ポイント

【OK】ボタンを表示させるだけのメッセージボックスですが、【OK】ボタンを押すことによって戻り値(プログラムから渡される値)が得られます。

  • 【OK】ボタンを押した場合:1

メッセージの表示の後に何か処理を加えたい場合には、If文と組み合わせてもいいかもしれません。
※何もしない場合でも、OKボタンを押した後はプログラムの流れに沿って順に処理が行われます。


情報を伝える【OK】ボタンを表示する

通常の【OK】ボタンだけのメッセージの注意効果を付けることができます。

書き方

コード

MsgBox("表示させたいメッセージ。", vbInformation)

表示させたいメッセージの後にカンマ【,】を入力、その後に【vbInformation】と入力します。


こちらがコードです。

Sub MessageBox()
  MsgBox "業務改善するプログラムです。", vbInformation
End Sub


プログラムを実行した画面です。


ポイント

【OK】ボタンを表示させるだけのメッセージボックスですが、【OK】ボタンを押すことによって戻り値(プログラムから渡される値)が得られます。

  • 【OK】ボタンを押した場合:1

メッセージの表示の後に何か処理を加えたい場合には、If文と組み合わせてもいいかもしれません。
※何もしない場合でも、OKボタンを押した後はプログラムの流れに沿って順に処理が行われます。


【OK】と【ヘルプ】を表示する

【OK】と【ヘルプ】を表示するメッセージを出すこともできます。

※【ヘルプ】ボタンを押した場合の処理を別途記載する必要があります。

書き方

コード

MsgBox("表示させたいメッセージ。", vbMsgBoxHelpButton)

表示させたいメッセージの後にカンマ【,】を入力、その後に【vbMsgBoxHelpButton】と入力します。


こちらがコードです。

Sub MessageBox()
  MsgBox "処理を実行します", vbMsgBoxHelpButton
End Sub


こちらがプログラムを実行したときの画面です。


メモ

【ヘルプ】ボタンを押すと、ヘルプファイルを表示することができるようです。
実際にコードを書いて試してみたのですが、うまく動かすことができませんでした。(説明によると、エクセルを起動している状態でF1を押した時のヘルプ画面のことのようです)
動かせたら追記したいと思います。
(ヘルプファイルの選択まではできたのですが、ヘルプコードが分からず、プログラムを実行するとヘルプコードが見つかりませんでしたという画面になってしまいます)

エクセルのヘルプ画面を表示ことはあまりないと思いますので、使う機会は少ないかもしれません。


【OK】を表示する※メッセージを右揃え

あまり使わないかもしれませんが、メッセージを右揃えにすることもできます。

書き方

コード

MsgBox("表示させたいメッセージ。", vbMsgBoxRight)

表示させたいメッセージの後にカンマ【,】を入力、その後に【vbMsgBoxRight】と入力します。

Sub MessageBox()
  MsgBox "処理を実行します", vbMsgBoxRight
End Sub


こちらがプログラム実行時の画面です。


メッセージボックスのタイトルを変更するには

メッセージボックスのタイトルを変更することもできます。

タイトルを変更するには

MsgBox "表示したいメッセージ", ボタンの種類(省略可) , "好きなタイトルを指定"

実際のコードはこのようになります。

Sub タイトルの指定()
  MsgBox "表示したいメッセージ", , "好きなタイトルを指定"
End Sub

実行結果はこちら


メッセージを改行したいなら

メッセージボックスの内容が増えると読みにくくなります。

そんな時に便利なのが「改行」です。

まずはコードから紹介します。

Sub メッセージの改行()
  MsgBox "メッセージ1行目" & vbCrLf & "メッセージ2行目"
End Sub


プログラムを実行すると、2行に分かれたメッセージが表示されます。


ポイント

メッセージボックス内で改行をするには【vbCrlf】というコマンドを使います。

また、文字列と文字列をつなげる時には【&】が必要です。

「改行」と「文字列をつなげる」を組み合わせることで、改行することができます。

  • MsgBox "メッセージ1行目" & vbCrLf & "メッセージ2行目"


具体的な使い方の例

メッセージボックスはいろいろな使い方がありますが、例としていくつか紹介したいと思います。

具体的な使い方

  • 処理の完了を知らせる場合
  • ファイル保存先を指定する場合

他にもいろいろな場面で使うことができます。


プログラムの完了を知らせる場合

プログラムが終了したときにメッセージを表示するのがお手軽で便利です。
メッセージが表示されないと「いつプログラムの処理が終わったのか分かりにくい」ということがあります。

プログラムの最後に一行追加するだけで、処理が終わったことが分かるのでオススメです。

プログラムの例です。
下から2行目にメッセージを表示させるプログラムを書いています。

Sub ゼロ埋め()
'変数の宣言
  Dim lastRow As Long, i As Long
  With Sheet1
'最終行を取得
    lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To lastRow
'桁数を判定
      If Len(.Cells(i, 1)) < 4 Then
        .Cells(i, 1) = "'" & Format(.Cells(i, 1), "0000")
      Else
        .Cells(i, 1) = "'" & .Cells(i, 1)
      End If
    Next i
  End With
'プログラムの完了を知らせるメッセージボックス
  MsgBox "処理が完了しました。"
End Sub

「ゼロ埋め」については、こちらの記事でプログラムの紹介をしています。

こちらもCHECK

【マネするだけ】エクセルVBAでゼロ埋めをする方法を紹介

エクセルで作業をしていると、ゼロが消えてしまうことがあります。 例えば「0001」と入力してEnterキーを押すと「1」になってしまうようなことです。 エクセルが気を利かせてやってくれるのですが、ID ...

続きを見る


ファイル保存先の指定をする場合(同じパス・任意のパスの選択)

プログラムの処理後、エクセルファイルを別名で保存する場合「保存先を都度決めたい」ということがあると思います。

そんな時に役に立つのがこのコードです。

「はい」「いいえ」が表示されるメッセージボックスを使って「同じパスに保存する」か「任意の保存先を決める」か選択できるようにしてみました。

コードを紹介します。

Sub 保存パスを選択する()
Application.DisplayAlerts = False
Dim fileName As String, sentaku As Integer
label1: 'ファイル保存先選択画面でキャンセルが選択されたらここまで戻る。
'【ポイント1】メッセージボックスの表示
sentaku = MsgBox("同じパスに保存しますか?", vbYesNo)

'【ポイント2】  
  If sentaku = 6 Then 'はいボタンを押した時の処理
    '同じパスに保存する。
    ThisWorkbook.SaveAs fileName:=ThisWorkbook.Path & "\" & "保存ファイル名.xlsx", _
                      FileFormat:=xlOpenXMLWorkbook
    '保存後エクセルを終了する。
    Application.Quit
  Else
  '【ポイント3】任意のパスに保存する。
    fileName = Application.GetSaveAsFilename("保存ファイル名.xlsx", "Excelブック, *.xlsx")
    ThisWorkbook.SaveAs fileName:=fileName, _
                        FileFormat:=xlOpenXMLWorkbook
    '【ポイント4】保存画面でキャンセルボタンを押した場合
    If fileName = "False" Then
      GoTo label1 'パス選択のメッセージボックスに戻る
    Else
      '保存後エクセルを終了する。
      Application.Quit
    End If
  End If
    
Application.DisplayAlerts = True
End Sub


このプログラムで行っていること

  1. 【ポイント1】:同じパスに保存するかどうかの確認メッセージを表示
    ※【はい】【いいえ】の2択です。
  2. 【ポイント2】:【はい】を選択した場合は同じパスにエクセルファイルを保存した後にエクセルを終了します。
  3. 【ポイント3】:【いいえ】を選択した場合は、任意の保存先を選ぶ画面が表示されます。【19行目の処理】
    任意の保存先を決めて【保存ボタン】を押したら、エクセルファイルの保存をして、エクセルを終了します。

    ※保存先選択画面で【キャンセルボタン】が押されてしまうとエラーになってしまうのでその後はエラー対策処理です。

  4. 【ポイント4】:(キャンセルボタンが押されてしまった場合)再度保存パスの選択メッセージ表示をするようにします【6行目に戻る】


あとがき

今回は、エクセルVBAのメッセージボックスの使い方を紹介しました。

お手軽に使えるのでエクセルVBAを使ってみたいと思った方でも、すぐに使うことができます。
(マクロの記録では作れないコードなので、プログラムを書いたという実感が湧きやすいかもしれません)

紹介した実用的な方法は、一例なので「他に便利な方法」があれば、どんどん使ってみてください。

-Excel VBA
-, , , ,