最終行を教え移動するかどうかたずねる〜Excel2013 マクロ講座
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 If
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

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


スポンサーリンク
スポンサーリンク