プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっております。

VBA初心者ですが、RowとRowsの違いについて今一つ分かりません。
添付ファイルのように、A2:A25まで数字を入れた表を作って、今ある知識で行数をカウントするコードをいくつか書いてみました。

test1:A2から始まる表を構成するトータル行数を返す。
test2:??
test3:A2から始まる表の最終行番号を返す。
test4:test1と同じ
test5:???

(1)test2、5は同じ内容のコードになると思いますが・・結果の『2』は何を意味しているのか分かりません。
(2)RowとRowsの違いは簡単に言うとどういう事でしょうか?

まとまりの無い文章で申し訳ありませんが、よろしくお願いいたします。

Sub test1()
Cells(2, 2).Value = Cells(2, 1).CurrentRegion.Rows.Count
End Sub

Sub test2()
Cells(2, 3).Value = Cells(2, 1).CurrentRegion.Row
End Sub

Sub test3()
Cells(2, 4).Value = Cells(2, 1).End(xlDown).Row
End Sub

Sub test4()
Cells(2, 5).Value = Range(Cells(2, 1), Cells(2, 1).End(xlDown)).Rows.Count
End Sub

Sub test5()
Cells(2, 6).Value = Range(Cells(2, 1), Cells(2, 1).End(xlDown)).Row
End Sub

「VBA (Row とRowsの違いについ」の質問画像

A 回答 (2件)

難しく考えすぎなのかな?



ROWは単純に行番号なので、

ROW(セル)
括弧内で指定したセルの行番号が返ります。
※ エクセルの左に並んでいる1,2,3・・・の数字

よくある感違いで
ROW(範囲)
この時は、範囲の一番小さい値の行番号が返ります
例 ROW(A23:C55)
23が返ります

ここまではよいかな?

ROWSは範囲が返ります
ROWS(セル)
範囲が指定されていないので、セル1個分で1が返ります

ROWS(範囲)
ここでよくある勘違いは複数列を指定しても、行数は変わらないってことかな

ROWS(B2:B5)とROWS(B2:D5)は同じ値の2~5で4が返ります
これの行は2,3,4,5の4行なので、戻りは4

ここまで理解できれば、Test1~5を見直してみましょう
    • good
    • 1
この回答へのお礼

早速の回答ありがとうございます。
助かりました。

お礼日時:2014/03/17 17:41

Range.Row プロパティをヘルプで調べると、「対象セル範囲の最初の領域の先頭行の番号を返します」と書いてあります。

「最初の領域」というのは、例えば union(range("b2:d4"),range("f3:h5")) のような複数の領域を合わせた領域のうち、合わせる前の最初の領域ということです。つまりこの領域の Row プロパティである union(range("b2:d4"),range("f3:h5")).Row は、「b2」の「2」を返すこととなります。

上のプロパティが返すのは行番号という Long 型の数値であって、行というオブジェクトではありません。しかし一方では、行というオブジェクトを Row オブジェクトと呼ぶので、初級者の方には紛らわしいと感じられるかもしれません。VBA が上手になってくれば、当たり前のことなのですがね。

オブジェクトの集まりをコレクションと言います。コレクションも 1 つのオブジェクトです。

あるコレクションが全て同じ種類のオブジェクトだけでできているという場合は、原則としては、要素となっているオブジェクト名の複数形をそのコレクションの名前にします(ただし名前が単数・複数の関係になっていない親子のオブジェクトも存在します)。つまり Row オブジェクトだけでできているコレクションは、Rows オブジェクトあるいは Rows コレクションと呼びます。

他に、Workbook オブジェクトと Workbooks コレクション、Shape オブジェクトと Shapes コレクション等々も、同様な関係です。

Range.Rows プロパティは、その Range に含まれる全ての行の集まり、即ち、その Range での Rows オブジェクトを返すプロパティです。

Range.Row は 2 などの「値」を返しますが、Range.Rows は行という「オブジェクト(への参照)」を返すのですね。

Rows オブジェクトの要素である各 Row オブジェクトは、インデックス(番号)によって特定されます。つまり、ある Range に含まれる 1 番目、2 番目、3 番目、…の Row オブジェクトは、コレクションに番号を付けて、Range.Rows(1)、Range.Rows(2)、Range.Rows(3)、…というプロパティにより、返されます。複数形のオブジェクト名にインデックスを付けることで、単数のオブジェクトを表すことになります。
    • good
    • 1
この回答へのお礼

ありがとうございます。

お礼日時:2014/03/25 00:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!