【Excel VBA】最大行数・最大列数を取得する方法

Excel VBA 最大行数・最大列数を取得する方法

Excel VBAで、最大行数や最大列数を取得する方法を紹介します。

ポイントの説明

最大行数、最大列数を取得する際のポイントは以下3つとなります。

  • Rangeオブジェクト.Endプロパティ
  • Rows.Count
  • Columns.Count

Rangeオブジェクト.Endプロパティ

指定したRangeオブジェクトから上下左右の終端のセルを取得します(Rangeオブジェクトを取得)。上下左右を設定するプロパティとしてxlUp、xlDown、xlToRight、xlToLeftの4種類があります。

言葉だけだとピンとこないと思いますので、最大行数/最大列数を取得する方法でイメージと一緒に見てください。

Rows.Count

Excelの最大行数を取得します。Excel2007以降は1,048,576行、Excel2003以前は65,536行となっています。

Columns.Count

Excelの最大列数を取得します。Excel2007以降は16,384列、Excel2003以前は256列となっています。

最大行数を取得する方法

方法は2種類あり、Excelの上から最大行数を取得する方法と、Excelの下から最大行数を取得する方法があります。

前者はブランクセルが存在すると最大を取得する仕組みになっています。そのため、指定したセルから値が連続して設定されていることが前提になります。

Excelの上から最大行数を取得

指定したセルから連続して行に値が設定されているときには、Rangeオブジェクト.End(xlDown)を使います。

  

End(xlDown)サンプル

copy

Public Sub GetMaxRowxlDown()

    Dim rng As Range
    Dim maxRow As Long
    
    ' B2のセルを設定(Rangeでも設定可)
    Set rng = Cells(2, 2)
'    Set rng = Range("B2")
    
    ' B2から下に向かって「連続して値が設定されている」最後の行を探す
    maxRow = rng.End(xlDown).Row
    
    MsgBox maxRow

End Sub

Excelの下から最大行数を取得

指定したセルから行を見ると途中でブランクが入っている可能性があるような場合に、Rangeオブジェクト.End(xlUp)を使用します。

End(xlUp)サンプル

copy

Public Sub GetMaxRowxlUp()

    Dim rng As Range
    Dim maxRow As Long
    
    ' B列の一番下のセルを設定(Rangeでも設定可)
    Set rng = Cells(Rows.Count, 2)
'    Set rng = Range("B" & Rows.Count)
    
    ' 一番下から上に向かって値が入っている行を探す
    maxRow = rng.End(xlUp).Row
    
    MsgBox maxRow

End Sub

最大列数を取得する方法

行と同様に方法は2種類あり、Excelの左から最大列数を取得する方法と、Excelの右から最大列数を取得する方法があります。

こちらも行と同様に前者はブランクセルが存在すると最大を取得する仕組みになっています。そのため指定したセルから値が連続して設定されていることが前提になります。

Excelの左から最大列数を取得

指定したセルから連続して行に値が設定されているときには、Rangeオブジェクト.End(xlToRight)を使います。

End(xlToRight)サンプル

copy

Public Sub GetMaxColumnxlToRight()

    Dim rng As Range
    Dim maxColumn As Long
    
    ' B2のセルを設定(Rangeでも設定可)
    Set rng = Cells(2, 2)
'    Set rng = Range("B2")
    
    ' B2から右に向かって「連続して値が設定されている」最後の列を探す
    maxColumn = rng.End(xlToRight).Column
    
    MsgBox maxColumn

End Sub

Excelの右から最大列数を取得

指定したセルから列を見ると途中でブランクが入っている可能性があるような場合に、Rangeオブジェクト.End(xlToLeft)を使用します。

End(xlToLeft)サンプル

copy

Public Sub GetMaxColumnxlToLeft()

    Dim rng As Range
    Dim maxColumn As Long
    
    ' B列の一番下のセルを設定
    Set rng = Cells(2, Columns.Count)
    
    ' 一番右から左に向かって値が入っている行を探す
    maxColumn = rng.End(xlToLeft).Column
    
    MsgBox maxColumn

End Sub

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です