|
Sample Macro 範囲選択 [応用型] |
 |
|
|
|
1) 範囲選択してソート |
 |
 |
'=========================================================================================
Sub 作業開始ボタン_Click() '作業開始ボタン押下時に実行されるマクロ
Range("A2").Select
説明文 = "OKボタンを押してから、" & Chr(13) & _
"マウスでソートする範囲 (タイトル行を除く) を選択し、" _
& Chr(13) & "ソートボタンを押してください"
MsgBox 説明文, vbInformation, "操 作 説 明" 'メッセージボックスを映す
End Sub
'-----------------------------------------------------------------------------------------
Sub ソートボタン_Click() 'ソートボタン押下時に実行されるマクロ
左 = Selection.Column '選択された範囲の左端
上 = Selection.Row ' 〃 上端
右 = 左 + Selection.Columns.Count - 1 ' 〃 右端
下 = 上 + Selection.Rows.Count - 1 ' 〃 下端
キーセル = "B" & 上 'ソートキーとなるセル ※1
Range(Cells(上, 左), Cells(下, 右)).Select 'ソート範囲を選択しなおす
Selection.Sort Key1:=Range(キーセル), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlSyllabary 'ソートする
End Sub
'=========================================================================================
<コメント>
※1 Bにはソートキーとなる列名をABC…で記入
※2 シートのレイアウトなどは 範囲を選択してからソートするには を見てください。
|
2) セル範囲のアドレスを取得 |
 |
 |
'=========================================================================================
Sub 選択されたセル範囲のアドレスを取得する_A1形式()
選択範囲 = Selection.Address(ColumnAbsolute:=False, RowAbsolute:=False) '※1
MsgBox "選択されたセル範囲は " & 選択範囲
End Sub
'-----------------------------------------------------------------------------------------
Sub 選択されたセル範囲のアドレスを取得する_A1形式_絶対参照()
選択範囲 = Selection.Address
MsgBox "選択されたセル範囲は " & 選択範囲
End Sub
'-----------------------------------------------------------------------------------------
Sub 選択されたセル範囲のアドレスを取得する_R1C1形式()
選択範囲 = Selection.Address(ReferenceStyle:=xlR1C1) '※2
MsgBox "選択されたセル範囲は " & 選択範囲, vbInformation, "すぐマク"
End Sub
'=========================================================================================
<コメント>
※1 Addressプロパティの引数 ColumnAbsolute または RowAbsoluteに Trueを設定すると
絶対参照となる
※2 Addressプロパティの引数 ReferenceStyleに xlR1C1を指定すると、R1C1形式の参照が
返される、省略するとA1形式で返される
|
3) セル範囲のセル数を取得する |
 |
 |
'=========================================================================================
Sub 選択されたセル範囲のセル数を取得する()
セル数 = Selection.Cells.Count
End Sub
'-----------------------------------------------------------------------------------------
Sub 指定セル範囲のセル数を取得する()
セル範囲 = "A1:A10" '※1
セル数 = Range(セル範囲).Cells.Count
End Sub
'=========================================================================================
<コメント>
※1 ""内にはセル範囲を指定
|
4) 最後のセルのアドレスを取得する |
 |
 |
'=========================================================================================
Sub 最後のセルのアドレスを取得する()
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate '最後のセルをアクティブに
最右列 = ActiveCell.Column 'アクティブセルの列番号
最下行 = ActiveCell.Row 'アクティブセルの行番号
アドレス = ActiveCell.Address 'アクティブセルのアドレス
End Sub
'=========================================================================================
|
5) オートフィルターしたデータの最上行と値を取得 |
 |
 |
'=========================================================================================
Sub オートフィルターしたデータの最上行と値を取得する() '※1
Worksheets("SSS").Activate 'シートをアクティブにする ※2
With ActiveSheet.UsedRange '使われたセル範囲
On Error Resume Next
MsgBox .Resize(.Rows.Count - 1).Offset(1) _
.SpecialCells(xlCellTypeVisible).Row '行番号
MsgBox .Resize(.Rows.Count - 1).Offset(1) _
.SpecialCells(xlCellTypeVisible).Cells(2).Value '2列目の値 ※3
End With
End Sub
'=========================================================================================
<コメント>
※1 ワークシートの1行目は見出し部で2行目からデータ部の前提
※2 SSSにはシート名を記入
※3 Cells(2)の2には列番号を記入
|
6) オートフィルターしたデータの最下行を取得 |
 |
 |
'=========================================================================================
Sub オートフィルターしたデータの最下行を取得する() '※1
Worksheets("SSS").Activate 'シートをアクティブにする ※2
Range("A1").Activate
第1キー = "5/9" '1回目にオートフィルターするデータ ※3
第1キー列 = 2 ' 〃 列番号 ※4
第2キー = "伊藤" '2回目にオートフィルターするデータ ※3
第2キー列 = 1 ' 〃 列番号 ※4
Selection.AutoFilter 'オートフィルターをリセットする
Selection.AutoFilter Field:=第1キー列, Criteria1:=第1キー '1回目オートフィルターする
Selection.AutoFilter Field:=第2キー列, Criteria1:=第2キー '2 〃
Selection.SpecialCells(xlCellTypeLastCell).Select '最後のセルを選択する
行 = ActiveCell.Row 'アクティブセルの行番号を取得する
MsgBox "そのデータは " & 行 & "行目にあります"
End Sub
'=========================================================================================
<コメント>
※1左図の ワークシートの場合
※2 SSSにはシート名を記入
※3 "5/9"、"伊藤"には抽出データを記入
※4 2、1には列番号を記入
|
7) 選択済セル範囲にシート名と同じ名前を付ける |
 |
 |
'=========================================================================================
Sub セル範囲に名前を付ける_R1C1方式()
アドレスR = ActiveCell.Address(ReferenceStyle:=xlR1C1) 'アクティブセルのアドレス(R1C1)
アドレスA = ActiveCell.Address() ' 〃 (A1)
行数 = Range(アドレスA).CurrentRegion.Rows.Count 'アクティブセル領域の行数
列数 = Range(アドレスA).CurrentRegion.Columns.Count ' 〃 列数
シート名 = ActiveSheet.Name
セル範囲 = "=" & シート名 & "!" & アドレスR & ":R" & 行数 & "C" & 列数
ActiveWorkbook.Names.Add Name:=シート名, RefersToR1C1:=セル範囲
End Sub
'=========================================================================================
<コメント>
※1 事前にセル範囲を選択しておいてから実行する
※2 ワークシートの名前に - (ハイフン)、 (スペース)等のVisual Basicの名前付け規則で
決められている使用禁止文字を含む場合は、実行時エラーになる場合がある
|
8) 指定ワークシートのセル選択を禁止する |
 |
 |
'=========================================================================================
Sub 指定ワークシートのセル選択を禁止する()
シート名 = "SSS" '※1
With Worksheets(シート名)
.EnableSelection = xlNoSelection '※2 シートの選択可能範囲を設定
.Protect UserInterfaceOnly:=True '※3 シートを保護し変更できないようにする
End With
End Sub
'=========================================================================================
<コメント>
※1 SSSにはシート名を記入
※2 EnableSelectionプロパティはワークシートを保護しているときにだけ使用可能
xlNoSelection: すべてのセルを選択禁止
xlUnlockedCells: Lockedプロパティが Falseのセルに限り選択可能
xlNoRestrictions: どのセルの選択も可能
※3 引数UserInterfaceOnly … True: 画面上からの変更を禁止(マクロからの変更は可能)
|