ここから本文です

マクロ超初心者です。只今参考書で勉強中なのですが cells(Rows.Count,2).End...

mae********さん

2010/10/1700:31:36

マクロ超初心者です。只今参考書で勉強中なのですが

cells(Rows.Count,2).End(xlup)
という記述がでてきたのですが解説で「B列の最終行のセルから上方向に向かってデータを入力されているセルを探す」とあるのですが理解できません…
なぜそうなるのでしょうか?勉強不足ですいません

この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。

閲覧数:
10,335
回答数:
2
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

アバター

ID非公開さん

2010/10/1701:14:45

では、内側から順番に見ていきましょうか。
その前に
cells(Rows.Count,2).End(xlup)
という書き方は、実はいろいろなものを省略した書き方です。本来は
Applicaiton.Cells.Item(Rows.Count,2).End(xlup)
と書くものなのですが、こう書くのは大変なので、省略した書き方が許されているんです。

ではさっそく見ていきましょう。

まず、Rowsです。ApplicationオブジェクトのRows プロパティは、アクティブ シートのすべての行を表す Range オブジェクトを返します。
次に Count プロパティがありますが、これはコレクションに含まれる要素の数を返します。
つまり、Rows.Count とは、「『アクティブ シートのすべての行の集まり』の要素の数」すなわち、アクティブシートの行数を表します。
たとえば、Excel 2003 だけ考えたら、Rows.Count なんて書かなくても、65536 行あるに決まっているので直接 65536 と書いてもいいのですが、Excel 2007 や、Excel 2010 では 1048576 行ありますから、もしかしたら、それより下にデータの入っているセルがあるかもしれません。かといって、Excel 2003 で 1048576 と書くと、そんな行がありませんから、エラーになってしまいます。
どのバージョンの Excel でも「最終行」を示すためには、Rows.Count と表すと確実なのです。

さて、次に Cellsプロパティですが、Application.Cells は、アクティブ シートがワークシートのとき、そのワークシートにあるすべてのセル (Range オブジェクト) を返します。

Cells プロパティの Item プロパティは、Item(RowIndex,ColumnIndex)という形で、引数を指定し、対象となるセル範囲内でのオフセット値を指定します。
cells(Rows.Count,2) は、「すべてのセルのうち、左から2列目で、上から、『すべての行の行数』行目のセル」ということですから、すなわち、「B列の最終行のセル」を表すわけです。

最後に End プロパティですね。このプロパティは、対象となるセルが含まれる領域の終端のセルを示す Range オブジェクトを返します。
引数に xlup を指定した場合、上端のセルを返します。ワークシート上で、CTRL+↑を押したときに移動するセルに相当します。
cells(Rows.Count,2).End(xlup)
は、「B列の最終行のセル」を含む領域の、(同じB列の)上端のセルを返します。(上のセルが空白の場合、次にある空白でないセルを返します。)
おそらく最終行のセルは空白でしょうから、結局、B列の(使われているうちで)最後のセルを返すことになります。

質問した人からのコメント

2010/10/17 01:31:05

降参 分かりやすすぎる回答をありがとうございます!!
感激です!助かりました。これで次に進めます!!
もう一人の方も本当にありがとうございます

ベストアンサー以外の回答

1〜1件/1件中

rut********さん

2010/10/1701:13:26

まず、Cells(x,y)でx行、y列のセルを指定できます。

次に、Rows.Countは行の数を返します。この場合のRowsはその親オブジェクトが省略されているため、シート全体の行数を返します。よって、Cells(Rows.Count,y)は、y列の最終行のセルを指定したことになります。

次に、Endは空白以外のセルの始点、または終点を求めます。End(xlUp)で、上方に空白以外のセルを探して最初のセルを指定します(Ctrl+↑の操作と一緒の動きです)。よって、Cells(Rows.Count,y).End(xlUp)は、y列の最終行から上方へデータが入力されているセルを指定したことになります。

つまり、y列のデータの終端セルを指定することになります。
これは、データ列の途中に空白行があっても終端セルを求められるもっとも手軽な方法です。


蛇足でしょうが、以下の条件の何れかを満たす場合には、思い通りの結果が得られなくなるので注意が必要です。
・対象の列にデータが1行目にしか入力されてない状態
・最終行までデータが存在する場合

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる