VBA UsedRange – 行または列の数を数える
UsedRange – 最後に使用されたセル、列、行を検索する
次のコードは、ワークシートで使用されている行の合計数を示すメッセージボックスを返します。空の行があっても、その行の後ろにデータがある場合には使用されたとみなされます。
MsgBox ActiveSheet.UsedRange.Rows.Count
シートを下に向かってループを実行する必要があるが、どこで停止すればよいのか分からないことはありませんか?ActiveSheet.UsedRange.Rows.Countが役に立つかもしれません。 これをモジュールに入れてみましょう。
Sub LastRow()
Dim LastRow As Integer
LastRow = ActiveSheet.UsedRange.Rows.Count
MsgBox LastRow
End Sub
Sub LastCol()
Dim LastCol As Integer
LastCol = ActiveSheet.UsedRange.Col.Count
MsgBox LastCol
End Sub
最初の空白セルを探す
VBAを使用すると、最初の空のセル、または列で使用される最後の行の後に書き込む必要がある場合があります。この場合、ループする必要はなく、以下のコードで検索できます。 この例では、列 “d” の最初の空のセルに “FirstEmpty” を書き込みます。
Public Sub AfterLast()
ActiveSheet.Range("d" & ActiveSheet.Rows.Count).End(xlUp).Offset(1, 0).Value = "FirstEmpty"
End Sub
ワークシートで使用中の列数をカウントする
次のコードは、ワークシートで使用されている列の合計数をメッセージボックスに返します。空の列は、空の列の後にデータがある場合には使用されたとみなされます。
MsgBox ActiveSheet.UsedRange.Columns.Count
UsedRangeの注意点
For-Nextループで列全体を処理する場合、通常はActiveSheet.UsedRange.Rows.Countを使って停止する場所を探します。私はいつもこの方法でうまくいっています。
ただ、Excelが最後の行がどこかに存在すると思っていても、実際にはその行は空であることがあります。データをインポートした後、何度かこの現象に遭遇したことがあります。BeyondTechnologyでは以下のように説明されています。
スプレッドシートの使用範囲(または「ダーティエリア」)は、実際にレコードが入力されている領域よりも大きい場合があります。そのため、ワークシートオブジェクトのUsedRangeは常に機能するわけではありません。