| |
|
|
Sample Macro 範囲選択 [基本型] |
 |
|
|
|
1) 指定セル選択 |
 |
 |
'=========================================================================================
Sub 指定条件を満たすセルを選択する()
Worksheets("SSS").Activate 'シートをアクティブにする ※1
Range("A1").SpecialCells(xlCellTypeBlanks).Select '空白セル ※2、3
Range("A1").SpecialCells(xlCellTypeVisible).Select '可視セル ※2、3
Range("A1").SpecialCells(xlCellTypeLastCell).Select '最後のセル ※2、3
Range("A1").SpecialCells(xlCellTypeFormulas, 1).Select '数式セル ※2、3
Range("A1").SpecialCells(xlCellTypeComments).Select 'コメントを含むセル ※2、3
Range("A1").SpecialCells(xlCellTypeConstants).Select '定数を含むセル ※2、3
Range("A1").SpecialCells(xlCellTypeAllFormatConditions).Select '表示形式設定セル ※同上
Range("A1").SpecialCells(xlCellTypeSameFormatConditions).Select '同じ表示形式セル※2、3
Range("A1").SpecialCells(xlCellTypeAllValidation).Select '条件設定セル ※2、3
Range("A1").SpecialCells(xlCellTypeSameValidation).Select '同じ条件設定セル ※2、3
End Sub
'-----------------------------------------------------------------------------------------
Sub 使われたセル範囲を選択する()
Worksheets("SSS").Activate 'シートをアクティブにする ※1
ActiveSheet.UsedRange.Select '使われたセル範囲を選択
End Sub
'-----------------------------------------------------------------------------------------
Sub 上下左右端セルの選択方法()
Worksheets("SSS").Activate 'シートをアクティブにする ※1
Range("A5").End(xlUp).Select 'セルA5の列の上端を選択 ※2
Range("A5").End(xlToLeft).Select 'セルA5の行の左端を選択 ※2
Range("A1").End(xlDown).Select 'セルA1の列の下端を選択 ※2
Range("A1").End(xlToRight).Select 'セルA1の行の右端を選択 ※2
End Sub
'=========================================================================================
Sub シートの最後のセルの次の行のセルを選択する()
Range("A1").SpecialCells(xlCellTypeLastCell).Offset(1, 0).Select
End Sub
'-----------------------------------------------------------------------------------------
Sub シートの指定列の一番下のデータの次の行のセルを選択する()
Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Select
End Sub
'-----------------------------------------------------------------------------------------
Sub シートの一番下のデータの次の行のA列のセルを選択する()
列名 = "A" '※4
使われた行数 = ActiveSheet.UsedRange.Rows.Count '※5
Range(列名 & 使われた行数 + 1).Select
End Sub
'=========================================================================================
Sub 指定ブック内の指定セル範囲を選択する()
シート名 = "Sheet2"
セル範囲 = "A6"
Application.Goto Worksheets(シート名).Range(セル範囲) '※6
End Sub
'-----------------------------------------------------------------------------------------
Sub 指定ブック内の指定セル範囲を選択しスクロールする()
Application.Goto Reference:=Worksheets("Sheet2").Range("A200:E205"), scroll:=True
End Sub
'=========================================================================================
<コメント>
※1 SSSにはシート名を記入
※2 上下左右端のセル番号は任意に記入
※3 Range("A1")は ActiveSheet.Cells と記入しても可
※4 A には選択したい列名を記述

※5 対象ブックを上書き保存してから実行すると安全(UsedRangeプロパティを利用のため)
※6 そのブックがアクティブでなければアクティブになる
|
2) 範囲を検出して選択 |
 |
 |
'=========================================================================================
Sub シートの下端と右端を調べて範囲選択する()
Sheets("SSS").Select 'シートを選択する ※1
上 = 1 '基点セルの行番号(この場合はA1の1) ※2
左 = 1 '基点セルの列番号(A1のAの数字表記) ※2
下 = Range(Cells(上, 左), Cells(上, 左)).End(xlDown).Row '下端検出
右 = Range(Cells(上, 左), Cells(上, 左)).End(xlToRight).Column '右端検出
Range(Cells(上, 左), Cells(下, 右)).Select '検出した範囲を選択
End Sub
'-----------------------------------------------------------------------------------------
Sub シートの上端と左端を調べて範囲選択する()
Sheets("SSS").Select 'シートを選択する ※1
下 = 6 '基点セルの行番号(この場合はE6の6) ※2
右 = 5 '基点セルの列番号(E6のEの数字表記) ※2
上 = Range(Cells(下, 右), Cells(下, 右)).End(xlUp).Row '上端検出
左 = Range(Cells(下, 右), Cells(下, 右)).End(xlToLeft).Column '左端検出
Range(Cells(上, 左), Cells(下, 右)).Select '検出した範囲を選択
End Sub
'-----------------------------------------------------------------------------------------
Sub データの入ってない行を調べて選択する_罫線ある表()
Sheets("SSS").Select 'シートを選択する ※1
Range("A5").CurrentRegion.Select '左上セル基点にアクティブセル領域選択 ※3
行 = Selection.Row ' 〃 の行番号
下 = 行 + Selection.Rows.Count 'アクティブセルの下端の次の行番号
Range(Cells(下, 1), Cells(下, 1)).Select ' 〃 の下端の次の行を選択
End Sub
'=========================================================================================
<コメント>
※1 SSSにはシート名を記入
※2 行列番号は任意に記入
※3 A5には基点セルを任意に記入
|
3) アクティブセル |
 |
 |
'=========================================================================================
Sub アクティブセル領域を選択する()
Worksheets("SSS").Activate 'シートをアクティブにする ※1
Range("A1").CurrentRegion.Select 'アクティブセル領域を選択 ※7、8
End Sub
'-----------------------------------------------------------------------------------------
Sub アクティブセルの位置を調べる()
Worksheets("SSS").Activate 'ワークシートをアクティブにする ※1
現在位置列 = ActiveCell.Column 'アクティブセルの列番号
現在位置行 = ActiveCell.Row 'アクティブセルの行番号
アドレス = ActiveCell.Address 'アクティブセルのアドレス ※2
値 = ActiveCell.Value 'アクティブセルの値
End Sub
'-----------------------------------------------------------------------------------------
Sub アクティブセルのアドレスを取得する()
Worksheets("SSS").Activate '※1
セルアドレス = ActiveCell.Address() '※2
セルアドレス = ActiveCell.Address(RowAbsolute:=False) '※3
セルアドレス = ActiveCell.Address(ColumnAbsolute:=False) '※4
セルアドレス = ActiveCell.Address(ReferenceStyle:=xlR1C1) '※5
セルアドレス = ActiveCell.Address(External:=True) '※12
'
Set 開始点 = Worksheets("Sheet1").Cells(1, 1) '相対参照の開始点をセット
セルアドレス = ActiveCell.Address(ReferenceStyle:=xlR1C1, _
RowAbsolute:=False, ColumnAbsolute:=False, _
RelativeTo:=開始点) '※6
End Sub
'-----------------------------------------------------------------------------------------
Sub アクティブセル領域の行列数を調べる()
行数 = Range("A1").CurrentRegion.Rows.Count 'アクティブセル領域の行数を取得 ※7
列数 = Range("A1").CurrentRegion.Columns.Count ' 〃 列数 〃 ※7
End Sub
'-----------------------------------------------------------------------------------------
Sub アクティブセルのフォントを変更する()
Worksheets("SSS").Activate 'ワークシートをアクティブにする ※1
With ActiveCell.Font
.Bold = True
.Italic = True
End With
End Sub
'-----------------------------------------------------------------------------------------
Sub 見出し行以外のアクティブセル領域を選択する()
Range("A1").Select '※9
Set 領域 = ActiveCell.CurrentRegion 'アクティブセル領域を取得して参照する
領域.Offset(1, 0).Resize(領域.Rows.Count - 1, _
領域.Columns.Count).Select '指定領域のサイズを変更して取得 ※10、11
End Sub
'=========================================================================================
Sub アクティブセルが指定セル範囲内にあるかを調べる()
Set 指定セル範囲 = Range("B2:F20") '※13
Set 共有セル範囲 = Intersect(ActiveCell, 指定セル範囲)
If Not 共有セル範囲 Is Nothing Then
MsgBox "アクティブセルは指定セル範囲内にあります。", , "すぐマク"
End If
End Sub
'-----------------------------------------------------------------------------------------
Sub アクティブセルが指定セル範囲内にないことを調べる()
Set 指定セル範囲 = Range("B2:F20") '※13
Set 共有セル範囲 = Intersect(ActiveCell, 指定セル範囲)
If 共有セル範囲 Is Nothing Then
MsgBox "アクティブセルは指定セル範囲内にありません。", , "すぐマク"
Else
MsgBox "アクティブセルは指定セル範囲内にあります。", , "すぐマク"
End If
End Sub
'=========================================================================================
<コメント>
※1 SSSにはシート名を記入
※2 A1参照形式(行列とも絶対参照)
※3 A1参照形式(列:絶対、行:相対参照)
※4 A1参照形式(列:相対、行:絶対参照)
※5 R1C1参照形式(行列とも絶対参照)
※6 R[-2]C[-2] R1C1参照形式(行列ともA1セルからの相対参照)
※7 A1には左上端のセル番号を記入
※8 Range("A1")は ActiveSheet.Cells と記入しても可
※9 A1にはリスト内のセルを指定する
※10 Offset(1,0)の 1には見出し行の行数を指定する
※11 Rows.Count-1の 1は上記の行数と一致する
※12 False:ローカル参照(既定値)、True:外部参照(ブック名とシート名付)
※13 B2:F20 には調べたいセル範囲を記入
|
4) 変数名で範囲指定して選択する |
 |
 |
'=========================================================================================
Sub 変数名で範囲指定して選択する_A1方式()
Worksheets("SSS").Activate 'ワークシートをアクティブにする ※1
左上 = "B3" '選択する範囲の左上セル ※2
右下 = "E6" ' 〃 右下セル ※2
範囲 = 左上 & ":" & 右下 '選択する範囲を指定する文字列
Range(範囲).Select '指定された範囲を選択する
End Sub
'-----------------------------------------------------------------------------------------
Sub 変数名で範囲指定して選択する_R1C1方式()
Worksheets("SSS").Activate 'ワークシートをアクティブにする ※1
左 = 2 '選択する範囲の左端セルの列番号 ※3
上 = 3 ' 〃 上端 〃 行番号 ※3
右 = 5 ' 〃 右端 〃 列番号 ※3
下 = 6 ' 〃 下端 〃 行番号 ※3
Range(Cells(上, 左), Cells(下, 右)).Select '指定された範囲を選択する
End Sub
'-----------------------------------------------------------------------------------------
Sub セル番号を変化させながら順に選択する()
Worksheets("SSS").Activate 'ワークシートをアクティブにする ※1
行 = 0 '※4
Do
行 = 行 + 1
セル番号 = "A" & 行 '※5
Range(セル番号).Select
Loop While Range(セル番号).Value <> ""
End Sub
'=========================================================================================
<コメント>
※1 SSSにはシート名を記入
※2 "B3"と"E6"は例示、希望のセル名を記入
※3 2、3、5、6は例示、希望のセルの行列番号を記入
※4 0 は例示、最上行番号-1 を記入
※5 "A"は例示、希望のセルの列番号を記入
|
5) セル範囲の名前の追加・削除 |
 |
 |
'=========================================================================================
Sub セル範囲に名前を付ける()
Worksheets("SSS").Activate '※1 ワークシートをアクティブにする
ActiveWorkbook.Names.Add Name:="範囲名A", _
RefersToR1C1:="=SSS!R11C5:R13C5" '※1、2、3
End Sub
'-----------------------------------------------------------------------------------------
Sub セル範囲の名前を削除する()
Workbooks("BBB.xls").Names("範囲名A").Delete '※2、4
End Sub
'=========================================================================================
<コメント>
※1 SSSにはシート名を記入
※2 "範囲名A"は任意に命名して記入
※3 "=SSS!R11C5:R13C5"は例示、シート名と希望のセル名を記入(この例はSSSシートのE11:E13)
※4 BBBにはブック名を記入(非アクティブで可)、ActiveWorkbook としても可
関連ページ: 不規則なセル範囲に名前を付けるには
|
6) 名前付きセル範囲を選択 |
 |
 |
'=========================================================================================
Sub 名前付きセル範囲を選択する()
Worksheets("SSS").Activate '※1 ワークシートをアクティブにする
Range("範囲名A").Select '※2
End Sub
'-----------------------------------------------------------------------------------------
Sub 名前付きセル範囲を結合して選択する()
Dim 結合対象 As Range '※3 オブジェクト型変数として宣言する
Worksheets("SSS").Activate '※1
Set 結合対象 = Application.Union(Range("範囲名A"), Range("範囲名C")) '※2、3 結合
結合対象.Select '※3 結合されたセルを選択する
End Sub
'=========================================================================================
<コメント>
※1 SSSにはシート名を記入
※2 "範囲名A"、"範囲名C"は予め設定した範囲名を記入
※3 "結合対象"には変数名を記入
|
7) 名前付きセル範囲のアドレスを取得 |
 |
 |
'=========================================================================================
Sub 名前付きセル範囲のアドレスを取得する()
アドレス = Range("範囲名A").Address '※1
End Sub
'-----------------------------------------------------------------------------------------
Sub 名前付きセル範囲の行列数を取得する()
行数 = Range("範囲名A").Rows.Count '※1
列数 = Range("範囲名A").Columns.Count '※1
End Sub
'-----------------------------------------------------------------------------------------
Sub 名前付きセル範囲の行列番号を取得する()
Range("範囲名A").Select '※1
左上行 = ActiveCell.Row
左上列 = ActiveCell.Column
右下行 = 左上行 + Selection.Rows.Count - 1
右下列 = 左上列 + Selection.Columns.Count - 1
End Sub
'=========================================================================================
<コメント>
※1 "範囲名A"は命名されている名前を記入
|
8) 複数のセルとセル範囲を一度に選択 |
 |
 |
'=========================================================================================
Private Sub 複数のセルを一度に選択する()
Range("E10,G10,I10").Select '※1、3
End Sub
'-----------------------------------------------------------------------------------------
Private Sub 複数のセルとセル範囲を一度に選択する()
Range("E10,G10:G12,I12").Select '※1、2、3
End Sub
'-----------------------------------------------------------------------------------------
Private Sub 複数のセル範囲を一度に選択する()
Range("E10:E16,I10:I16,G12:G14,F10:H10,F16:H16").Select '※1、2、3
End Sub
'=========================================================================================
<コメント>
※1 E10とG10、I10、I12は1つのセルを指定する場合の書き方例
※2 G10:G12と E10:E16、I10:I16、G12:G14、F10:H10、F16:H16はセル範囲を指定する場合の書き方例
※3 複数指定する場合は , で区切る
サンプルブックのダウンロードは ここをクリック (YNxv206_Range.xls 37KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
|
9) 選択範囲内の領域 |
 |
 |
'=========================================================================================
Sub 選択範囲内の領域の数を取得する()
領域の数 = Selection.Areas.Count
End Sub
'-----------------------------------------------------------------------------------------
Sub 複数領域が選択されていれば指定の領域をクリアする()
領域番号 = 1 '※1
If Selection.Areas.Count <> 1 Then
Selection.Areas(領域番号).Clear '※1
End If
End Sub
'=========================================================================================
<コメント>
※1 Areasプロパティの引数「領域番号」には、領域のインデックス番号を指定する。
インデックス番号は、領域が選択された順序に対応している
|
10) 選択範囲をオフセットする(ずらす) |
 |
 |
'=========================================================================================
Sub 選択範囲をオフセットする()
Worksheets("SSS").Activate 'ワークシートをアクティブにする ※1
Range("A1:D1,A3:D3,A5:D5,A7:D7").Select '複数のセル範囲を一度に選択する ※2
Selection.Offset(1, 0).Select '1行下へ移動する ※3
Selection.Offset(0, 1).Select '1列右へ移動する ※3
Selection.Offset(-1, 0).Select '1行上へ移動する ※3
Selection.Offset(0, -1).Select '1列左へ移動する ※3
End Sub
'=========================================================================================
<コメント>
※1 SSSにはシート名を記入
※2 A1:D1,A3:D3,A5:D5,A7:D7には任意の選択範囲を記入
※3 ( )の中の 0はオフセットしない、1には必要な行または列数を記入、マイナスなら逆方向になる
サンプルブックのダウンロードは ここをクリック (YNxv206_Offset.xls 32KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
|
11) アクティブウィンドウのセル範囲等 |
 |
 |
'=========================================================================================
Sub アクティブウィンドウのセル範囲を取得する()
セル範囲 = ActiveWindow.VisibleRange.Address
End Sub
'-----------------------------------------------------------------------------------------
Sub アクティブウィンドウの左上端セルの行列番号を取得する()
行番号 = ActiveWindow.ScrollRow
列番号 = ActiveWindow.ScrollColumn
End Sub
'=========================================================================================
|
12) Gotoメソッド実行直前のセルアドレス |
 |
 |
'=========================================================================================
Sub Gotoメソッド実行直前に選択されていたセルアドレスを取得する()
現在シート = ActiveSheet.Name
選択シート = "Sheet2"
移動先セル = "A6:a7"
Application.Goto Worksheets(選択シート).Range(移動先セル)
MsgBox 現在シート & "!" & Application.PreviousSelections(1).Address
End Sub
'=========================================================================================
|