Home » ExcelVBA Rangeオブジェクト » Endプロパティ » End(xlUp).Row・End(xlDown).Rowの型は?

End(xlUp).Row・End(xlDown).Rowの型は?

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「end(xlup).row 変数の型」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。

Excelでデータの入力されている最終行の行番号を取得する「Cells(Rows.Count, "A").End(xlUp).Row」といった、定番のオブジェクト式があります。

このオブジェクト式「Cells(Rows.Count, "A").End(xlUp).Row」の戻りを変数に代入する場合に、型を何にすればいいのかを調べていたのが、
「end(xlup).row 変数の型」
という検索キーワードです。

End(xlUp).Row・End(xlDown).Rowの型はLong

結論からいうと、RangeオブジェクトのRowプロパティの戻り値はLongですから、

End(xlUp).Row・End(xlDown).Rowの型は?

End(xlUp).Rowの戻り値を代入する変数の型もLongです。

End(xlDown).Rowの場合も同じくLongです。

[スポンサードリンク]

「end(xlup).row 変数の型」
という検索をなさった方の混乱の要因は、二つの可能性があると想像しています。

一つは、変数の型がIntegerになっているコードとLongになっているコードをご覧になったこと。

もう一つは、オブジェクト式が何を返すのかが明確になっていないことです。

Integerではないのか

「end(xlup).row 変数の型」
という検索をなさった方は、「Cells(Rows.Count, "A").End(xlUp).Row」の戻り値を代入する変数の型が、Integerになっているサンプルをどこかでご覧になったのかもしれません。

「Cells(Rows.Count, "A").End(xlUp).Row」の戻り値を代入する変数はIntegerで宣言しても、割と動きます。

ですが、不具合の出る可能性もかなりあります。
Integerは、「-32,768」から「32,767」の間の整数です。
ですから「Cells(Rows.Count, "A").End(xlUp).Row」の戻りが、「32,767」を超えた値の場合にはエラーが発生します。

これに対してLongは、「-2,147,483,648」から「2,147,483,647」の間の値ですからそのようなエラーは起こりません。

「Cells(Rows.Count, "A").End(xlUp).Row」の戻りを代入する変数をIntegerにしている方は、「32,767」より大きい行は、まず使われないという判断をしてらっしゃるのでしょう。実際に使用する環境で、「32,767」より大きくなる可能性がほとんどあり得ないのなら、まあIntegerでも悪くないのかもしれません。

オブジェクト式の違い

「end(xlup).row 変数の型」
という検索をなさった方は、
  Cells(Rows.Count, "A").End(xlUp).Row
  Cells(Rows.Count, "A").End(xlUp)
という2種類のオブジェクト式を混同している可能性も考えられます。

違いは、
「.End(xlUp).Row」で終わっているか
「.End(xlUp)」で終わっているか
です。

RangeオブジェクトのEndプロパティは、Rangeオブジェクトを返すプロパティですから、

End(xlUp).Row・End(xlDown).Rowの型は?

「Cells(Rows.Count, "A").End(xlUp)」というオブジェクト式の戻り値を代入する変数の型はLongではダメです。「.End(xlUp)」で終わっている場合は、Range型か、オブジェクトならなんでもOKなObject型か、どんなデータでもOKなVariant型でなければなりません。

また、単なる代入文ではダメで、Setキーワードを使う必要があります。

最終更新日時:2019-10-18 14:13

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » Endプロパティ » End(xlUp).Row・End(xlDown).Rowの型は?

Copyright © インストラクターのネタ帳 All Rights Reserved.

.