Sample Macro  範囲選択・クリア [応用型] Previous Next

1) 範囲選択してソート このページのトップへ もくじへ 使用可能なExcelのバージョン
'=================================================================================
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) セル範囲のアドレスを取得 このページのトップへ もくじへ 使用可能なExcelのバージョン
'=================================================================================
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) セル範囲のセル数を取得する このページのトップへ もくじへ 使用可能なExcelのバージョン
'=================================================================================
Sub 選択されたセル範囲のセル数を取得する()
    セル数 = Selection.Cells.Count
End Sub
'---------------------------------------------------------------------------------
Sub 指定セル範囲のセル数を取得する()
    セル範囲 = "A1:A10"                         '※1
    セル数 = Range(セル範囲).Cells.Count
End Sub
'=================================================================================
<コメント>
※1 ""内にはセル範囲を指定


4) 最後のセルのアドレスを取得する このページのトップへ もくじへ 使用可能なExcelのバージョン
'=================================================================================
Sub 最後のセルのアドレスを取得する()
    ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate '最後のセルをアクティブに
        最右列 = ActiveCell.Column              'アクティブセルの列番号
        最下行 = ActiveCell.Row                 'アクティブセルの行番号
        アドレス = ActiveCell.Address           'アクティブセルのアドレス
End Sub
'=================================================================================


5) オートフィルターしたデータの最上行と値を取得 このページのトップへ もくじへ 使用可能なExcelのバージョン
'=================================================================================
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) オートフィルターしたデータの最下行を取得 このページのトップへ もくじへ 使用可能なExcelのバージョン
'=================================================================================
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) 選択済セル範囲にシート名と同じ名前を付ける このページのトップへ もくじへ 使用可能なExcelのバージョン
'=================================================================================
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) 指定ワークシートのセル選択を禁止する このページのトップへ もくじへ 使用可能なExcelのバージョン
'=================================================================================
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: 画面上からの変更を禁止(マクロからの変更は可能)


9) 指定した範囲を指定した方法でクリア このページのトップへ もくじへ 使用可能なExcelのバージョン
'=================================================================================
Option Explicit
Dim 左 As Integer                               '左上セルの列番号 ※1
Dim 上 As Integer                               '左上セルの行番号 ※1
Dim 右 As Integer                               '右下セルの列番号 ※1
Dim 下 As Integer                               '右下セルの行番号 ※1
Dim 方法 As String                              'クリアする方法 ※2
'---------------------------------------------------------------------------------
Sub 指定範囲内の内容を指定の方法でクリアする()
    Sheets("SSS").Select                        'シートを選択する ※3
        左 = 1                                  '左上セルの列番号(A1のAの数字表記) ※1
        上 = 1                                  '左上セルの行番号(A1の1) ※1
        右 = 3                                  '右下セルの列番号(C5のCの数字表記) ※1
        下 = 5                                  '右下セルの行番号(C5の5) ※1
        方法 = "CF"                             'クリアする方法 ※2
    クリアする                                   'Subプロシージャを実行する
End Sub
'---------------------------------------------------------------------------------
Sub クリアする()
    If 方法 = "AA" Then                         'すべてのセルの内容をすべてクリア
        Cells.Clear
    ElseIf 方法 = "SA" Then                     '指定範囲内の内容をすべてクリア
        Range(Cells(上, 左), Cells(下, 右)).Clear
    ElseIf 方法 = "CF" Then                     '指定範囲内の書式をクリア
        Range(Cells(上, 左), Cells(下, 右)).ClearFormats
    ElseIf 方法 = "CC" Then                     '指定範囲内の数式と値をクリア
        Range(Cells(上, 左), Cells(下, 右)).ClearContents
    ElseIf 方法 = "SC" Then                     '指定範囲内の値だけをクリア
        Range(Cells(上, 左), Cells(下, 右)).SpecialCells(xlConstants, 23).ClearContents
    ElseIf 方法 = "SF" Then                     '指定範囲内の数式だけをクリア
        Range(Cells(上, 左), Cells(下, 右)).SpecialCells(xlFormulas, 23).ClearContents
    End If
End Sub
'=================================================================================
<コメント>
※1 行列番号は任意に記入
※2 Caseを参考にして AA,SA,CF,CC,SC,SFのいずれかを記入
※3 SSSにはシート名を記入

Excel VBA Macro




VBAの本 こちら





マクロ本 こちら





Excel本 こちら