• ベストアンサー

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

VBAの勉強をしています。参考書に下記のようなソースが載っていたのですが意味がわかりません。 データ行数を取得 lngRows = .Offset(65536 - .Row).End(xlUp).Row - .Row + 1 -.Rowとはどういう意味でしょうか? ヘルプ等で調べるとRow(2)というようにRowの後に数字が入っていて2行目を参照してる ということがわかるのですが単純にRowと描かれている場合はどこを参照している のでしょうか?教えていただけないでしょうか?

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

  • ベストアンサー
  • taocat
  • ベストアンサー率61% (191/310)
回答No.3

こんばんは。 いきなり難しいのをやってますねぇ。(^^;;; 皆さんも仰ってるように、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 となるわけです うっ、分かりにくい説明(^^;;; 以上です。

その他の回答 (2)

  • shkwta
  • ベストアンサー率52% (966/1825)
回答No.2

ワークシートやセル範囲の2行目を得るのは、Row(2)ではなくてRows(2)というようにRowsプロパティを使います。Rowプロパティは、単に行番号を示します。 たとえば、Range("D12:F53").Row は単に、セル範囲の最上行の行番号(この場合12)を返します。 したがって、この文の .Row は、Withステートメントで指定された何かのセル範囲の、最上行の行番号を表わします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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) のようになっているように思います。

関連するQ&A