「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の戻り値を代入する変数の型も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」の間の値ですからそのようなエラーは起こりません。
オブジェクト式の違い
「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オブジェクトを返すプロパティですから、
「Cells(Rows.Count, "A").End(xlUp)」というオブジェクト式の戻り値を代入する変数の型はLongではダメです。「.End(xlUp)」で終わっている場合は、Range型か、オブジェクトならなんでもOKなObject型か、どんなデータでもOKなVariant型でなければなりません。
また、単なる代入文ではダメで、Setキーワードを使う必要があります。
最終更新日時:2019-10-18 14:13
Home » Excel VBA Rangeオブジェクト » Endプロパティ » End(xlUp).Row・End(xlDown).Rowの型は?