最終行を教え移動するかどうかたずねる~Excel2013 マクロ講座

MsgBox関数で最終行に移動するか聞く

マクロ講座50回 
最終行を教え移動するかどうかたずねるMsgBox関数

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つを選択させ、それに応じて以降の処理の内容を決めることが可能です。
MsgBox 式

『最終行を取得1』マクロでは、第1引数promptだけを指定していますが、MsgBox関数は最大5つの引数を指定することができます。
第1引数promptには、メッセージとして表示する文字列を指定します。
第2引数のbuttonsでは、ボタンの表示に関する設定を行い、 第3引数のtitleでは、メッセージボックスのタイトル部分に表示する文字列を指定できるのです。
[はい] ボタンと [いいえ] ボタン、「キャンセル」ボタンを表示するvbYesNoCancelを使ってみましょう。
引数ボタンで使用可能な定数MsgBox 使用可能な定数
ボタンを表示するまでのコードは次のようになります。
Sub 最終行とボタン表示()
    Dim LastRow As Long
    LastRow = ActiveSheet.Range("A1").End(xlDown).Row
    MsgBox ("最終行は: " & LastRow & "行です。移動しますか", vbYesNoCancel)
End Sub

メッセージボックスの戻り値で条件分岐する

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