Excel VBA マウスのドラッグで任意の範囲を選択させる方法

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

VBAを使ってマウスで任意の範囲を選択させる方法

VBAで処理させたいデータのセルの範囲を任意で選択させたいことがありませんか?

ということで任意の範囲を選択させてみようと思います。

サンプルコード

Sub selectRange()
    Dim cellRange As Range
        
    On Error Resume Next
    Set cellRange = Application.InputBox("処理範囲をドラッグして選択してください", "処理範囲の指定", Type:=8)
    
    If cellRange Is Nothing Then Exit Sub    
    cellRange.Select
    
End Sub

解説

Inputboxでキャンセルが押下されたときのためのおまじない。(キャンセル押下されるとFalseが返ってくるから実行時エラーになっちゃう)

    On Error Resume Next

「Type:=8」でセル参照が可能になります。あとは戻り値がRangeオブジェクトなので変数に代入する際にSetを忘れずに!

    Set cellRange = Application.InputBox("処理範囲をドラッグして選択してください", "処理範囲の指定", Type:=8)

キャンセル押されて4行目のおかげで実行時エラーにならずにこの処理まで抜けてきた場合にNothingが変数に格納されてるので処理終了させるためのおまじない。

    If cellRange Is Nothing Then Exit Sub

コメント

  1. あるすくん より:

    質問なのですが、このコードを記載して動かすと、アクティブページは問題なくコピーできるのですが、別シートの選択はできませんでした。改善方法はありますか?

    • いるか より:

      コードを実行したシート以外のシートを選択したいという意図でしょうか?
      そうであれば選択した際に選択範囲に「シート名!」が付与されるため問題ないと思いますのでもしかしたら質問の意図とずれているかもですが。。。

      以下のコードで「結果」シート上でコードを実行して別のシート範囲を選択した場合に、「結果」シートに別シートの範囲の値を貼り付けることが可能です。

      Sub selectRange2()
          Dim cellRange As Range
              
          On Error Resume Next
          Set cellRange = Application.InputBox("処理範囲をドラッグして選択してください", "処理範囲の指定", Type:=8)
          
          If cellRange Is Nothing Then Exit Sub
          cellRange.Select
          
          Set ws = Worksheets("結果")
          cellRange.Copy ws.Range("A1")
      End Sub
      
タイトルとURLをコピーしました