MsgBox関数で最終行に移動するか聞く
マクロ講座50回


MsgBox関数の使い方 マクロ講座50回
最終行を取得し移動するかたずねる
3行マクロ40回でRange.Endプロパティを使って、最終行を取得し、MsgBoxで知らせるマクロを作成しましたが、たいていは、最終行かあるいは、その次の行に移動したい場合が多いですね。
今回は、最終行を教え、移動するかどうかたずねるマクロを考えましょう。
(サンプルファイルは、こちらから 2013マクロ講座50回サンプルデータ)
最終行を教え移動するかたずねる
最終行を教えもらっても、実際には、最終行を知るだけでなく、そこに移動したい場合もあるかもしれません。
今回は、少しコードを加えて、最終行が何行目であるかを教えて、移動するかたずねるマクロを作成します。
今回は、少しコードを加えて、最終行が何行目であるかを教えて、移動するかたずねるマクロを作成します。

最終行を取得するマクロのおさらいです。
Sub 最終行を取得1() 'データに空白がないとき Dim LastRow As Long LastRow = Range("A1").End(xlDown).Row MsgBox "最終行は" & LastRow & "行目です。" End Sub
MsgBox関数の第2引数のbuttonsを利用
MsgBox関数では、メッセージボックスに自由なメッセージを表示させることができます。
また、 最大3つの選択肢の中からユーザーに1つを選択させ、それに応じて以降の処理の内容を決めることが可能です。

『最終行を取得1』マクロでは、第1引数promptだけを指定していますが、MsgBox関数は最大5つの引数を指定することができます。
第1引数promptには、メッセージとして表示する文字列を指定します。
また、 最大3つの選択肢の中からユーザーに1つを選択させ、それに応じて以降の処理の内容を決めることが可能です。

『最終行を取得1』マクロでは、第1引数promptだけを指定していますが、MsgBox関数は最大5つの引数を指定することができます。
第1引数promptには、メッセージとして表示する文字列を指定します。
第2引数のbuttonsでは、ボタンの表示に関する設定を行い、
第3引数のtitleでは、メッセージボックスのタイトル部分に表示する文字列を指定できるのです。
[はい] ボタンと [いいえ] ボタン、「キャンセル」ボタンを表示するvbYesNoCancelを使ってみましょう。
[はい] ボタンと [いいえ] ボタン、「キャンセル」ボタンを表示するvbYesNoCancelを使ってみましょう。
引数ボタンで使用可能な定数

ボタンを表示するまでのコードは次のようになります。
Sub 最終行とボタン表示() Dim LastRow As Long LastRow = ActiveSheet.Range("A1").End(xlDown).Row MsgBox ("最終行は: " & LastRow & "行です。移動しますか", vbYesNoCancel) End Sub
メッセージボックスの戻り値で条件分岐する
ただし、ユーザーがボタンを押した動作に対する処理を設定していないので、何も起こりません。ただ終了するだけです。
次の作業です。
MsgBox関数には戻り値があり、「メッセージボックス上でユーザーが押したボタン」返します。
この戻り値を変数に格納し、判定することで、ユーザーが押したボタンに応じた処理ができます。
わかりやすくするために、サンプルでは、Modoriという変数を宣言しました。
Dim Modori As Integer
次の作業です。
MsgBox関数には戻り値があり、「メッセージボックス上でユーザーが押したボタン」返します。
この戻り値を変数に格納し、判定することで、ユーザーが押したボタンに応じた処理ができます。
わかりやすくするために、サンプルでは、Modoriという変数を宣言しました。
Dim Modori As Integer
ボタンを押された時の動作は、vbYesならLastRowをSelectし、それ以外は何もしないということにします。
If~Then~Else ステートメントを使って条件分岐しましょう。

If Modori = vbYes Then ' 戻り値がvbYesだったら Range("A" & LastRow).Select ' 最終行を選択する Else MsgBox "何もしません。" ' それ以外は、これ End IfMsgBox関数の戻り値は次のようになります。

コードをまとめると、

Sub 最終行を知らせ移動2() '最終行を教え移動するかどうかたずねる Dim LastRow As Long Dim Modori As Integer LastRow = ActiveSheet.Range("A1").End(xlDown).Row Modori = MsgBox("最終行は: " & LastRow & "行です。移動しますか", _ vbYesNoCancel + vbQuestion + vbDefaultButton2 + vbApplicationModal, "最終行") If Modori = vbYes Then Range("A" & LastRow).Select Else MsgBox "何もしません。" End If End Sub

『はい』以外では、何もしませんというメッセージが表示されます。

