マクロ記録されたコードを修正する際に問題となる対象セル領域の指定について、
ここではユーザがマウスで選択できるような方法を考えます。
例えば選択範囲をコピーする場合、あらかじめ対象セル範囲を選択しておいてから
記録マクロを実行すればよいかもしれません。
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メソッドの使用法■
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メソッドを使う■
上記の例では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
|