VBA最初の一歩(その6)マクロ記録の修正とInputBox|Excel VBA |
マクロ記録されたコードを修正する際に問題となる対象セル領域の指定について、ここではユーザがマウスで選択できるような方法を考えます。
例えば選択範囲をコピーする場合、あらかじめ対象セル範囲を選択しておいてから記録マクロを実行すればよいかもしれません。
Sub Macro1()
Selection.Copy
Sheets("Sheet2").Select
Range("A1").Select
ActiveSheet.Paste
End Sub
しかし、より柔軟で、応用の利く手法としてInputBoxメソッドというものを使用する方法をご紹介します。
また、VBA最初の一歩(その5)でご紹介している変数の利用方法も合わせて検討してみます。
ここではセル範囲の操作を行うため、Range型の変数を用意します。
Dim Rng As Range
※変数名は任意の名称でかまいません。
セル範囲はオブジェクトですから、Setステートメントを用いて代入する必要がありました。
例えばセルA1からD5までを格納する場合・・・
Set Rng = ActiveSheet.Range("A1:D5")
このSetステートメントのうちの右辺を任意に指定できるようにしよう、というのがテーマです。
InputBoxメソッドを使った例をまず示しておきます。
Sub Test()
Dim Rng As Range
Set Rng = Application.InputBox( _
Prompt:="セル範囲を選択してください", _
Title:="セル選択ダイアログ", _
Type:=8)
Rng.Select
End Sub
この”Test”プロシージャを実行すると、”セル範囲を選択してください”というメッセージつきのダイアログが現れ、ユーザはマウス操作でのセル選択を促されます。
※ InputBoxメソッドの使用法(”・・・”部分は省略)
括弧内は順に(メッセージ、ダイアログタイトル、・・・データタイプ)
Application.InputBox(Prompt, Title,・・・ Type)
・選択範囲(Selection)の位置にあらかじめ用意した変数Rngを指定
・Copyメソッドの引数Destinationにコピー先を指定
この2点を考慮してマクロ記録を修正すると・・・
Sub Test1()
Dim Rng As Range
Set Rng = Application.InputBox( _
Prompt:="セル範囲を選択してください", _
Title:="セル選択ダイアログ", _
Type:=8)
Rng.Copy Destination:=Sheets("Sheet2").Range("A1")
End Sub
となります。
上記の例ではInputBoxメソッドをセル参照に用いましたが、
セル参照以外にも、引数Typeの指定により他のデータ型を指定することが出来ます。
特に数値や文字列をユーザに入力するよう促す場合などは
Type:=1 ' 数値
Type:=2 '文字列 (テキスト)
となります。
以下、InputBoxメソッドによる数値入力の例です。
Sub Test2()
Dim MyValue As Long
MyValue = Application.InputBox("数値を入力してください", Type:=1)
'変数に格納したデータをセルA1に書き出します。
Sheets("Sheet1").Range("A1").Value = MyValue
End Sub