こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルのVBA  データの行数取得

VBAの勉強をしています。参考書に下記のようなソースが載っていたのですが意味がわかりません。

データ行数を取得
lngRows = .Offset(65536 - .Row).End(xlUp).Row - .Row + 1

-.Rowとはどういう意味でしょうか?
ヘルプ等で調べるとRow(2)というようにRowの後に数字が入っていて2行目を参照してる
ということがわかるのですが単純にRowと描かれている場合はどこを参照している
のでしょうか?教えていただけないでしょうか?

投稿日時 - 2005-04-15 21:52:18

QNo.1333277

すぐに回答ほしいです

質問者が選んだベストアンサー

こんばんは。

いきなり難しいのをやってますねぇ。(^^;;;

皆さんも仰ってるように、Withステートメントと一緒に質問した方がよかったと思います。

たぶん、こんな感じだと思いますが。

データがA列3行目から入ってるとして
----------------------------------------------

With Range("A3")
lngRows = .Offset(65536 - .Row).End(xlUp).Row - .Row + 1
End With

-------------------------------------------------
Withステートメントを省くと

lngRows = Range("A3).Offset(65536 - Range("A3").Row).End(xlUp).Row - Range("A3").Row + 1

------------------------------------------------
このように、.Offset、.Row の前に、
Range("A3") を入れたのと同じになるわけです。

で本題ですが、既に回答にあるように

Rowプロパティは、そのセルの行番号になります。
ですから上記を例にとると

例えば、データが3~10行目まで入ってたとしたら

.Row は Range("A3").Row すなわち、行番号3

.Offset(65536 - .Row).End(xlUp).Row はデータの最終行番号10

ゆえに、
lngRows = 10 - 3 + 1 = 8 となるわけです


うっ、分かりにくい説明(^^;;;
以上です。

投稿日時 - 2005-04-15 23:39:14

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

ワークシートやセル範囲の2行目を得るのは、Row(2)ではなくてRows(2)というようにRowsプロパティを使います。Rowプロパティは、単に行番号を示します。

たとえば、Range("D12:F53").Row は単に、セル範囲の最上行の行番号(この場合12)を返します。

したがって、この文の .Row は、Withステートメントで指定された何かのセル範囲の、最上行の行番号を表わします。

投稿日時 - 2005-04-15 22:36:02

ANo.1

>データ行数を取得
>lngRows = .Offset(65536 - .Row).End(xlUp).Row - .Row + 1
これだけの行でご質問するというのは、参考書とあなたのレベルがあっていないような気がします。

With ステートメントで括られていて初めて意味を持ちます。

次に、どこの行であっても、「 .Offset(65536 - .Row) 」は、最下行、65536行目であるし、そこから戻って、End(xlUp).Row は、データ行の最下行です。

つまり、With ステートメントから取られた、「 .Row」は、データ行の先頭のはずです。
例えば、r = ActiveCell.Row と入れてみれば、分かるはずです。

ですから、
.Offset(65536 - .Row).End(xlUp).Row
データの最下行
- .Row + 1
データの最上行+1

とすれば、データ行数が取れるわけです。

たぶん、With ステートメントは、
With Range("A1").End(xlDown)

のようになっているように思います。

投稿日時 - 2005-04-15 22:17:16

あなたにオススメの質問