VBAで自動化 VBA一覧 最終行・最終列 配列・データ操作

【VBA】行数を取得する方法:Rows.Countプロパティ

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をリセットすることで解決できます。

【VBA】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):

ワークシート全体の最終行を取得

シート全体でデータが存在する最終行を取得する場合は、以下の方法を使用します。

Sub GetLastRowInSheet()

Dim lastRow As Long
lastRow = ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
MsgBox "シート全体の最終行は " & lastRow & " 行目です。"

End Sub

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

注意点

  1. 空白行の影響:
    • 空白行が途中にある場合、正確な行数を取得するために適切な列や範囲を基準にする必要があります。
    • データを削除した後にUsedRangeをリセットするには、シート全体を保存するか、以下のコードを使用します。UsedRangeのリセット:

      ActiveSheet.UsedRange

  2. シート構造の変化:
    • データの最終行や範囲が頻繁に変更される場合、コードを動的に記述することをお勧めします。

まとめ

Excel VBAで行数を取得する方法は、取得したい行の種類(全体の行数、データ範囲の行数、最終行など)によって異なります。目的に応じて適切なコードを選んで使用してください。

    -VBAで自動化, VBA一覧, 最終行・最終列, 配列・データ操作