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)を使います。
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)を使用します。
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)を使います。
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)を使用します。
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