HOME > 即効テクニック > Excel VBA > その他関連のテクニック > VBA最初の一歩(その6)マクロ記録の修正とInputBox

VBA最初の一歩(その6)マクロ記録の修正とInputBox|Excel VBA

その他関連のテクニック

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