
いつもお世話になっております。
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

No.2ベストアンサー
- 回答日時:
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)、…というプロパティにより、返されます。複数形のオブジェクト名にインデックスを付けることで、単数のオブジェクトを表すことになります。
No.1
- 回答日時:
難しく考えすぎなのかな?
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を見直してみましょう
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
テキストボックス中の文字列の...
-
実行時エラー 3265「要求された...
-
ASP レコードセットしたオブジ...
-
VBAで既に開いている別アプリケ...
-
EXCEL VBA オートシェイプナン...
-
エクセルのVBAの標準モジュール...
-
[VBA]CDOメッセージ送信エラー
-
VBAで Set wb = Sheets(1).Cop...
-
Excelでフィルタをかけると警告...
-
Excel VBAでWordの複数ファイル...
-
エクセルVBAで配列内に空白デー...
-
MATLABのGUI、画像表示について
-
CreateObjectとGetObjectの違い
-
VBScriptでファイルの日時順(降...
-
ExcelのVBAで3-D等高線のXYZ回...
-
VBAからPDFファイルにパスワー...
-
ExcelVBAでのNZ関数について
-
VBAでエクセルに入力された複数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
エクセルのVBAの標準モジュール...
-
Excelでフィルタをかけると警告...
-
VBAで既に開いている別アプリケ...
-
テキストボックス中の文字列の...
-
EXCEL VBA オートシェイプナン...
-
VBAで Set wb = Sheets(1).Cop...
-
ExcelVBAでのNZ関数について
-
[VBA]CDOメッセージ送信エラー
-
VBAからPDFファイルにパスワー...
-
エクセルVBAでcode128のバー...
-
VBScriptからDLL参照設定したい
-
VBAについてです。 初心者です...
-
エクセルマクロエラー「'Cells'...
-
オブジェクトが見つかりません
-
エクセルVBAで配列内に空白デー...
-
Excel VBAでWordの複数ファイル...
-
VBScriptでファイルの日時順(降...
おすすめ情報