VBA最初の一歩(その6)・・・マクロ記録の修正とInputBox
マクロ記録されたコードを修正する際に問題となる対象セル領域の指定について、
ここではユーザがマウスで選択できるような方法を考えます。

例えば選択範囲をコピーする場合、あらかじめ対象セル範囲を選択しておいてから
記録マクロを実行すればよいかもしれません。

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




戻る


Excel Word Access VBA! モーグ