範囲を選択する

これらの例では、データを含まない書式設定されたセルを含む使用範囲を選択する方法と、実際のデータを含むセルを含むデータ範囲を選択する方法を示します。

サンプル コードの提供元: Tom Urtis、 Atlas Programming Management

使用される範囲の選択

この例では、Worksheet オブジェクトの UsedRange プロパティと Range オブジェクトの Select メソッドを使用して、データを含まない書式設定されたセルを含む、現在のシートで使用されている範囲を選択する方法を示します。 次に、範囲のアドレスをユーザーに表示します。

Sub SelectUsedRange()
    ActiveSheet.UsedRange.Select
    MsgBox "The used range address is " & ActiveSheet.UsedRange.Address(0, 0) & ".", 64, "Used range address:"
End Sub

セル A1 から始まるデータ範囲の選択

この例では、現在のシートのセル A1 から始まるデータ範囲を選択し、ユーザーに範囲のアドレスを表示する方法を示します。 データ範囲には、データを含まない書式設定されたセルは含まれません。 この例では、Range オブジェクトのFind メソッドを使用して、データ範囲を取得するために、実際のデータを含む最後の行と最後の列を検索します。

Sub SelectDataRange()
    Dim LastRow As Long, LastColumn As Long
    LastRow = Cells.Find(What:="*", After:=Range("A1"), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    LastColumn = Cells.Find(What:="*", After:=Range("A1"), SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    Range("A1").Resize(LastRow, LastColumn).Select
    MsgBox "The data range address is " & Selection.Address(0, 0) & ".", 64, "Data-containing range address:"
End Sub

開始場所が不明なデータ範囲の選択

この例では、開始位置がわからないときに現在のシートのデータ範囲を選択し、範囲のアドレスをユーザーに表示する方法を示します。 データ範囲には、データを含まない書式設定されたセルは含まれません。 データ範囲を取得するために、この例では Range オブジェクトの Find メソッドを使用して、実際のデータを含む最初と最後の行と列を検索します。

Sub UnknownRange()
    If WorksheetFunction.CountA(Cells) = 0 Then
        MsgBox "There is no range to be selected.", , "No cells contain any values."
        Exit Sub
    Else
        Dim FirstRow&, FirstCol&, LastRow&, LastCol&
        Dim myUsedRange As Range
        FirstRow = Cells.Find(What:="*", SearchDirection:=xlNext, SearchOrder:=xlByRows).Row
        
        On Error Resume Next
        FirstCol = Cells.Find(What:="*", SearchDirection:=xlNext, SearchOrder:=xlByColumns).Column
        If Err.Number <> 0 Then
            Err.Clear
            MsgBox _
            "There are horizontally merged cells on the sheet" & vbCrLf & _
            "that should be removed in order to locate the range.", 64, "Please unmerge all cells."
            Exit Sub
        End If
        
        LastRow = Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
        LastCol = Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column
        Set myUsedRange = Range(Cells(FirstRow, FirstCol), Cells(LastRow, LastCol))
        myUsedRange.Select
        MsgBox "The data range on this worksheet is " & myUsedRange.Address(0, 0) & ".", 64, "Range address:"
    End If
End Sub

投稿者について

MVP Tom Urtis は、シリコン バレーにある Atlas Programming Management の創業者です。Atlas Programming Management は、Microsoft Office および Excel に関するあらゆるビジネス ソリューションを提供する企業です。 Tom は 25 年以上のビジネス管理および Microsoft Office アプリケーション開発の経験があり、『Holy Macro! It's 2,500 Excel VBA Examples』の 共著者でもあります。

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。