Excel VBAで行数を取得する方法は、データの種類や範囲によって異なります。行数の取得は、データの加工や分析、動的な範囲指定などで使用されます。
行数を取得するさまざまな方法とその活用例について解説します。
目次
Excel VBAで行数を取得する方法
ワークシート全体の行数を取得
ワークシート全体の行数を取得する場合、Rows.Countプロパティを使用します。
Sub GetTotalRows()
Dim totalRows As Long
totalRows = Rows.Count
MsgBox "このシートには " & totalRows & " 行あります。"
End Sub
結果:
通常のExcelシートでは、行数は1048576(Excel 2007以降)と表示されます。
データ範囲の行数を取得
データが入力されている範囲の行数を取得する場合は、UsedRange.Rows.Countを使用します。
Sub GetUsedRangeRows()
Dim usedRows As Long
usedRows = ActiveSheet.UsedRange.Rows.Count
MsgBox "このシートで使用されている行数は " & usedRows & " 行です。"
End Sub
注意:
UsedRangeには、データが削除されたセルも含まれることがあります。その場合、UsedRangeをリセットすることで解決できます。
特定の列の最終行を取得
特定の列でデータが入力されている最終行を取得するには、以下の方法を使用します。
Sub GetLastRowInColumn()
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' 列A(1列目)を基準
MsgBox "列Aの最終行は " & lastRow & " 行目です。"
End Sub
Cells(Rows.Count, 1).End(xlUp):
- 列Aの最終行から上方向に検索し、データがある行を取得します。【VBA】Endメソッド:最終行と最終列数
ワークシート全体の最終行を取得
シート全体でデータが存在する最終行を取得する場合は、以下の方法を使用します。
Sub GetLastRowInSheet()
Dim lastRow As Long
lastRow = ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
MsgBox "シート全体の最終行は " & lastRow & " 行目です。"
End Sub
Find("*"):
- ワークシート全体を検索して最終行を取得します。【VBA】Findメソッド:基本構文と使用例
空白を無視して行数を取得
空白セルを無視して行数を取得する場合、以下のコードを使用します。
Sub GetNonEmptyRows()
Dim rng As Range
Dim rowCount As Long
Set rng = ActiveSheet.UsedRange
rowCount = Application.WorksheetFunction.CountA(rng.Rows)
MsgBox "空白を除いた行数は " & rowCount & " 行です。"
End Sub
空白を無視して行数を取得
空白セルを無視して行数を取得する場合、以下のコードを使用します。
Sub GetNonEmptyRows()
Dim rng As Range
Dim rowCount As Long
Set rng = ActiveSheet.UsedRange
rowCount = Application.WorksheetFunction.CountA(rng.Rows)
MsgBox "空白を除いた行数は " & rowCount & " 行です。"
End Sub
特定条件に基づく行数を取得
特定の値を含む行数を取得する例です。
Sub CountRowsWithSpecificValue()
Dim rng As Range
Dim cell As Range
Dim count As Long
Set rng = Range("A1:A10") ' 列Aの1~10行目を対象
count = 0
For Each cell In rng
If cell.Value = "対象" Then
count = count + 1
End If
Next cell
MsgBox "値が「対象」の行数は " & count & " 行です。"
End Sub
動的範囲のコピー
最終行を取得して、その範囲をコピーします。
Sub CopyDynamicRange()
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' 列Aの最終行を取得
Range("A1:A" & lastRow).Copy Destination:=Range("B1")
MsgBox "データをコピーしました。"
End Sub
最終行の次にデータを追加
最終行の次の行に新しいデータを追加します。
Sub AddDataToNextRow()
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' 列Aの最終行を取得
Cells(lastRow + 1, 1).Value = "新しいデータ"
MsgBox "データを追加しました。"
End Sub
注意点
- 空白行の影響:
- 空白行が途中にある場合、正確な行数を取得するために適切な列や範囲を基準にする必要があります。
- データを削除した後に
UsedRangeをリセットするには、シート全体を保存するか、以下のコードを使用します。UsedRangeのリセット:ActiveSheet.UsedRange
- データを削除した後に
- シート構造の変化:
- データの最終行や範囲が頻繁に変更される場合、コードを動的に記述することをお勧めします。
まとめ
Excel VBAで行数を取得する方法は、取得したい行の種類(全体の行数、データ範囲の行数、最終行など)によって異なります。目的に応じて適切なコードを選んで使用してください。