このバナーをクリックするとホームページに戻ります

エクセルVBA 3「範囲を選択する」

2005.1.9にモジュールのソースをボタンでコピーできるようにしました。ホームページに載っているソースをコピーしようとしてドラッグしかけて、うまく全体がコピーできなかったことを今まで何度も経験していると、簡単にコピーできるほうがありがたい。そんな思いで一括コピーするボタンをつけてみました。もちろん私はエクセルVBAといっても本で読んだり、他の人のHPを参考にしながら、自分が利用しそうなものをまとめているだけで、自分なりに手を加えている箇所は非常に少ないだろうと思います。

エクセルVBAのマクロの記述モジュールは緑の枠内に記述しています。「モジュールをコピーする」のボタンをクリックすると、このモジュール全体を一発でコピーします。それを貼り付けてマクロを実行してみてください。


「エクセルVBA事始め」に戻る

このページの目次



1 基準セルを含む矩形範囲選択

2 参照セルを含む入力セル矩形選択

3 入力済みセル範囲矩形選択

4 参照セルを含む可視表列の選択

5 参照セルを含む可視表行の選択

6 参照セルを左上に可視表行列の選択

7 参照セルを含むアクティブ行の選択

8 特定範囲("A1:C6", "E1:G6")内の空白のセルを選択

9 複数の範囲("A1:C6", "E1:G6")を選択

10 選択範囲("A1:D1,A3:D3,A5:D5,A7:D7")をオフセット(移動)する

11 範囲を1列右へ移動する

12 参照セルを含む表全体を選択する

13 任意セルを含む表内の列を選択する

14 任意セルを含む表内の行を選択する

15 任意セルより下の表内の列を選択する

16 任意セルより右の表内の行を選択する



◆◆◆ 1 基準セルを含む矩形範囲選択 ◆◆◆

利用するときには、変換したいところを選択してからマクロの実行をする。


Sub 基準セルを含む矩形範囲選択()
'
' 基準セルを含む矩形範囲選択 Macro
' マクロ記録日 : 2005/1/16  ユーザー名 : canchan
'
Range("C5").CurrentRegion.Select
'
End Sub
モジュールをコピーする

このページの目次に戻る

このページの目次に戻る


◆◆◆ 2 参照セルを含む入力セル矩形選択 ◆◆◆


Sub 参照セルを含む入力セル矩形選択()
'
' 参照セルを含む入力セル矩形選択 Macro
' マクロ記録日 : 2005/1/16  ユーザー名 : canchan
'
Dim C As Range

On Error GoTo errMSG        'エラーで処理を分ける

Set C = Application.InputBox(prompt:="基準セルをクリックしてください", Type:=8)
'typeは 0:数式,1:数値,2:文字列,4:論理値(true/false) ,8:セル参照(Rangeオブジェクト),16:Excelのエラー値(#N/Aなど),64:数値配列

C.CurrentRegion.Select

Exit Sub
'
If C = Range("") Then MsgBox "セルを選択せずにOKボタンが押されました。セルをクリックしてOKボタンを押してください。"

errMSG:      'ここからエラーによりメッセージを分ける
Select Case Err.Number
Case 13         '13 は「指定する型が違う。」
MsgBox "セルの位置をクリックしてください"

'以下にセルをクリックせずにOKボタンを押したときのエラーメッセージと思って記述したがどれも該当せず。
Case 327         '327 は「データ値が見つかりません。」
MsgBox "セルの位置をクリックして,OKボタンを押してください"
Case 328         '328 は「不正なパラメータです。」
MsgBox "値が不正です。セルの位置をクリックして,OKボタンを押してください"
Case 424        '424 は「オブジェクトが必要です」のエラー
MsgBox "オブジェクトが必要です。セルの位置をクリックしてOKボタンを押してください"
Case 449        '449 は「引数は省略できません」のエラー
MsgBox "セルをクリックせずにOKボタンが押されました。セルの位置をクリックしてOKボタンを押してください"
Case 461        '461 は「メソッドまたはデータメンバが見つかりません。」のエラー
MsgBox "メソッドを指定せずにOKボタンが押されました。セルの位置をクリックしてOKボタンを押してください"
End Select

End Sub
モジュールをコピーする
このページの目次に戻る


◆◆◆ 3 入力済みセル範囲矩形選択 ◆◆◆


Sub 入力済みセル範囲矩形選択()
'
' 入力済みセル範囲矩形選択 Macro
' マクロ記録日 : 2005/1/16  ユーザー名 : canchan
'
ActiveSheet.UsedRange.Select
'
End Sub
モジュールをコピーする
このページの目次に戻る


◆◆◆ 4 基準セルを含む可視表列の選択 ◆◆◆

表の中でいろいろ操作したいとき、ある列、1列であろうと2列以上の複数列であろうと、選択したいときがある。ただそのとき、列全体を選択してしまうと、網掛けなり、色付けなども文字の入力されていないところまでついてしまう。そして、狭い範囲であれば、選択もらくだが、50行を超えると1画面ではなくなり選択がやりにくくなる。左クリックしたままドラッグしていくとか、「Shiftキー + ↓」という操作もあるが、それももどかしく思うことがある。そんなとき、このマクロは簡単に確実にできる。このマクロを使用するときの注意は、表の最上端のセルを参照セルにすることである。途中のセルを参照すると、上端からそのセルまでの位置だけ表の下にずれた範囲が選択されてしまう。

このマクロを使うと、まず参照するセルを尋ねてくる。参照セル(1つのセルでも、複数のセルでもよい)を、つまり表の中の列を選択したいところの最上段のセルをクリックすると、表の中だけの列を選択する。

下の13「任意セルを含む表内の列を選択する」は選択したい列内のどのセルでも可能です。


Sub 基準セルを含む可視表列の選択()
'
' マクロ記録日 : 2005/1/16  ユーザー名 : canchan
'
Dim C As Range
Dim rCnt As Long

On Error GoTo errMSG        'エラーで処理を分ける
Set C = Application.InputBox(prompt:="基準セルをクリックしてください", Type:=8)
'typeは 0:数式,1:数値,2:文字列,4:論理値(true/false) ,8:セル参照(Rangeオブジェクト),16:Excelのエラー値(#N/Aなど),64:数値配
C.Select
'表の可視セル内の列を選択する
rCnt = C.CurrentRegion.SpecialCells(xlCellTypeVisible).Rows.Count

Selection.Resize(rCnt).Select
Exit Sub
'
If C = Range("") Then MsgBox "セルを選択せずにOKボタンが押されました。セルをクリックしてOKボタンを押してください。"

errMSG:      'ここからエラーによりメッセージを分ける
Select Case Err.Number
Case 13         '13 は「指定する型が違う。」
MsgBox "セルの位置をクリックしてください"

End Select

End Sub
モジュールをコピーする
このページの目次に戻る


◆◆◆ 5 基準セルを含む可視表行の選択 ◆◆◆

上の4と同様のことが言える。これを使用するときには、マクロを実行したら、参照セルを尋ねてくるので、選択したい行の最左端のセル(1つのセルでも、複数のセルでも)をクリックする。このとき、表の一番左のセルより右のセルをクリックすると、その分だけ表の外のセルまで選択してしまうことになるので注意してください。

下の14「任意セルを含む表内の行を選択する」は選択したい行内のどのセルでも可能です。


Sub 基準セルを含む可視表行の選択()
'
' マクロ記録日 : 2005/1/16  ユーザー名 : canchan
'
Dim C As Range
Dim cCnt As Long

On Error GoTo errMSG        'エラーで処理を分ける
Set C = Application.InputBox(prompt:="基準セルをクリックしてください", Type:=8)
'typeは 0:数式,1:数値,2:文字列,4:論理値(true/false) ,8:セル参照(Rangeオブジェクト),16:Excelのエラー値(#N/Aなど),64:数値配
C.Select
cCnt = C.CurrentRegion.SpecialCells(xlCellTypeVisible).Columns.Count
Selection.Resize(, cCnt).Select
Exit Sub
'
If C = Range("") Then MsgBox "セルを選択せずにOKボタンが押されました。セルをクリックしてOKボタンを押してください。"

errMSG:      'ここからエラーによりメッセージを分ける
Select Case Err.Number
Case 13         '13 は「指定する型が違う。」
MsgBox "セルの位置をクリックしてください"

End Select

End Sub
モジュールをコピーする
このページの目次に戻る


◆◆◆ 6 基準セルを左上に可視表行列の選択 ◆◆◆


Sub 基準セルを左上に可視表行列の選択()
'
' 基準セルを含む入力セル矩形選択 Macro
' マクロ記録日 : 2005/1/16  ユーザー名 : canchan
'
Dim C As Range
Dim rCnt As Long
Dim cCnt As Long

On Error GoTo errMSG        'エラーで処理を分ける
Set C = Application.InputBox(prompt:="基準セルをクリックしてください", Type:=8)
'typeは 0:数式,1:数値,2:文字列,4:論理値(true/false) ,8:セル参照(Rangeオブジェクト),16:Excelのエラー値(#N/Aなど),64:数値配
C.Select
rCnt = C.CurrentRegion.SpecialCells(xlCellTypeVisible).Rows.Count
'c を含む列の最下行までの行数を数える
cCnt = C.CurrentRegion.SpecialCells(xlCellTypeVisible).Columns.Count
'c を含む行の最右列までの列数を数える
Selection.Resize(rCnt, cCnt).Select
'選択した c から選択範囲を行列の最後まで拡大する
Exit Sub
'
If C = Range("") Then MsgBox "セルを選択せずにOKボタンが押されました。セルをクリックしてOKボタンを押してください。"

errMSG:      'ここからエラーによりメッセージを分ける
Select Case Err.Number
Case 13         '13 は「指定する型が違う。」
MsgBox "セルの位置をクリックしてください"

End Select

End Sub

モジュールをコピーする
このページの目次に戻る


◆◆◆ 7 基準セルからのアクティブ行の選択 ◆◆◆


Sub 基準セルからのアクティブ行の選択()
'
' マクロ記録日 : 2005/1/16  ユーザー名 : canchan
'
Dim C As Range
Dim cCnt As Long

On Error GoTo errMSG        'エラーで処理を分ける
Set C = Application.InputBox(prompt:="基準セルをクリックしてください", Type:=8)
'typeは 0:数式,1:数値,2:文字列,4:論理値(true/false) ,8:セル参照(Rangeオブジェクト),16:Excelのエラー値(#N/Aなど),64:数値配
C.Select
cCnt = C.CurrentRegion.Columns.Count
Selection.Resize(cCnt).Select
Exit Sub
'
If C = Range("") Then MsgBox "セルを選択せずにOKボタンが押されました。セルをクリックしてOKボタンを押してください。"

errMSG:      'ここからエラーによりメッセージを分ける
Select Case Err.Number
Case 13         '13 は「指定する型が違う。」
MsgBox "セルの位置をクリックしてください"

End Select

End Sub
モジュールをコピーする
このページの目次に戻る


◆◆◆ 8 特定範囲("A1:C6", "E1:G6")内の空白のセルを選択 ◆◆◆


Sub 特定範囲("A1:C6", "E1:G6")内の空白のセルを選択()

Range("A1:C6", "E1:G6").SpecialCells(xlCellTypeBlanks).Select
End Sub
モジュールをコピーする
このページの目次に戻る


◆◆◆ 9 複数の範囲("A1:C6", "E1:G6")を選択 ◆◆◆


Sub 複数の範囲を選択()
' マクロ記録日 : 2004/3/2  ユーザー名 : canchan


Range("A1:C6", "E1:G6").Select
End Sub
モジュールをコピーする
このページの目次に戻る


◆◆◆ 10 選択範囲("A1:D1,A3:D3,A5:D5,A7:D7")をオフセット(移動)する ◆◆◆


Sub 選択範囲をオフセットする()
    Worksheets("SSS").Activate                  'ワークシートをアクティブにする ※1
        Range("A1:D1,A3:D3,A5:D5,A7:D7").Select '複数のセル範囲を一度に選択する ※2
        Selection.Offset(4, 0).Select           '4行下へ移動する ※3
        Selection.Offset(0, 3).Select           '3列右へ移動する ※3
        Selection.Offset(-2, 0).Select          '2行上へ移動する ※3
        Selection.Offset(0, -1).Select          '1列左へ移動する ※3
End Sub
モジュールをコピーする
このページの目次に戻る


◆◆◆ 11 範囲を1列右へ移動する ◆◆◆


Sub 範囲を1列右へ移動する()
        Selection.Offset(0, 1).Select           '1列右へ移動する ※3
End Sub
モジュールをコピーする
このページの目次に戻る




◆◆◆ 12 参照セルを含む表全体を選択する ◆◆◆

このマクロを使用すると、参照するセルを尋ねてくるので、表のどこのセルでも良いからクリックする。そうすると表全体を選択状態にすることができる。


Sub 表全体選択参照セルを含む()
'
' 基準セルを含む矩形範囲選択 Macro
' マクロ記録日 : 2006/2/11 ユーザー名 : canchan
'
Dim 参照セル As Range
Set 参照セル = Application.InputBox(prompt:="表内のセルをクリックしてください", Type:=8)
'typeは 0:数式,1:数値,2:文字列,4:論理値(true/false) ,8:セル参照(Rangeオブジェクト),16:Excelのエラー値(#N/Aなど),64:数値配列

参照セル.CurrentRegion.Select
End Sub

モジュールをコピーする


このページの目次に戻る




◆◆◆ 13 任意セルを含む表内の列を選択する ◆◆◆

上の4「基準セルを含む可視表列の選択」に対して、このマクロを実行すると参照セルを尋ねてくるので、表内の選択したい列の中のどのセルでもよいからクリックすると、その1列を選択することができる。


Sub 列表内選択任意セルを含む()

' マクロ記録日 : 2006/2/11  ユーザー名 : canchan
'最下段のセルをクリックすると最終行まで選択してしまう。

Dim 任意セル As Range
Set 任意セル = Application.InputBox(prompt:="選択したい列の任意のセルをクリックしてください", Type:=8)
'typeは 0:数式,1:数値,2:文字列,4:論理値(true/false) ,8:セル参照(Rangeオブジェクト),16:Excelのエラー値(#N/Aなど),64:数値配列
Range(任意セル.End(xlUp), 任意セル.End(xlDown)).Select
End Sub

モジュールをコピーする


このページの目次に戻る






◆◆◆ 14 任意セルを含む表内の行を選択する ◆◆◆

上の5「基準セルを含む可視表行の選択」に対して、このマクロを実行すると参照セルを尋ねてくるので、表内の選択したい行の中のどのセルでもよいからクリックすると、その1行を選択することができる。


Sub 選択行表内任意セルを含む()
' マクロ記録日 : 2006/2/12  ユーザー名 : canchan
'最右端のセルをクリックすると最終列まで選択してしまう。
Dim 参照セル As Range
Set 参照セル = Application.InputBox(prompt:="基準セルをクリックしてください", Type:=8)
'typeは 0:数式,1:数値,2:文字列,4:論理値(true/false) ,8:セル参照(Rangeオブジェクト),16:Excelのエラー値(#N/Aなど),64:数値配列
Range(参照セル.End(xlToLeft), 参照セル.End(xlToRight)).Select

End Sub

モジュールをコピーする


このページの目次に戻る








◆◆◆ 15 任意セルより下の表内の列を選択する ◆◆◆

このマクロを実行すると参照セルを尋ねてくるので、表内の選択したい列(1つでも複数でも)のセルを選択すると、それより下の表内の列を選択する。空白セルがその中にあると、その手前で選択を終えてしまうので、その点は注意を要する。


Sub 選択左上セル下矩形()
'
' マクロ記録日 : 2006/12/3  ユーザー名 : canchan
'
Dim 任意セル As Range

Set 任意セル = Application.InputBox(prompt:="基準セルをクリックしてください", Type:=8)
'typeは 0:数式,1:数値,2:文字列,4:論理値(true/false) ,8:セル参照(Rangeオブジェクト),16:Excelのエラー値(#N/Aなど),64:数値配
任意セル.Select
Range(任意セル, 任意セル.End(xlDown)).Select

End Sub

モジュールをコピーする



このページの目次に戻る








◆◆◆ 16 任意セルより右の表内の行を選択する ◆◆◆

このマクロを実行すると参照セルを尋ねてくるので、表内の選択したい行(1つでも複数でも)のセルを選択すると、それより右の表内の行を選択する。空白セルがその中にあると、その手前で選択を終えてしまうので、その点は注意を要する。


Sub 選択左上セル右矩形()
'
' マクロ記録日 : 2006/12/3  ユーザー名 : canchan
'
Dim 任意セル As Range

Set 任意セル = Application.InputBox(prompt:="基準セルをクリックしてください", Type:=8)
'typeは 0:数式,1:数値,2:文字列,4:論理値(true/false) ,8:セル参照(Rangeオブジェクト),16:Excelのエラー値(#N/Aなど),64:数値配
任意セル.Select
Range(任意セル, 任意セル.End(xlToRight)).Select

End Sub

モジュールをコピーする



このページの目次に戻る




「エクセルVBA事始め」に戻る