[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『最終行を取得するVBAのコード−について』(あっこ)
初歩的な質問です。
https://www.fastclassinfo.com/entry/inventory_control_system
のサイト内で、
cmax1 = ws1.Range("A65536").End(xlUp).Row
cmax2 = ws2.Range("A65536").End(xlUp).Row
と書かれています。
※以前、cmax1の変数の付け方には、このサイトで御指南いただきました。
ここの「ws1.Range("A65536").End(xlUp).Row」の「"A65536"」「xlUp」はどこを指し示すのでしょうか?
Range("A1").End(xlDown)ならばなんとなく理解できるのですが、A65536がどこから来たのか、また、なぜxlUpなのかがわかりません。
このマクロは、「新しくデータが増えたらしたのほうに追加していく」マクロのようなので、xlDownなのではないのでしょうか。
自分なりに本やネットで調べたのですが、調べ方や調べるポイントがどこなのかよくわかりませんでした。
ご教示頂けますと幸いです。何卒よろしくお願い申し上げます。
< 使用 Excel:Office365、使用 OS:Windows10 >
追加質問についてですが、個人的には一番優秀な教材はgoogle先生だと思っています。
先人が書かれたソースコードがネットにいっぱい散らばっており、そのコードを読んで意味を理解できるようになるというのが手っ取り早い勉強方法ではないかと。
前述の検索方向にしても、そのコードで取得できるものが何なのかという意味を理解できていれば、UpでもDownでもどちらでも目的が達成できそうだったり、Downの場合の注意点に気づくことができると思います。
(おさんどん) 2020/03/09(月) 06:29
ちなみに。紹介したサイトにも書いてありますが
〜 Excel2003 : 65536行目が最大行 (2の16乗) Excel2007 〜 :1048576行目が最大行 (2の20乗)
です。
(もこな2) 2020/03/09(月) 07:23
あちゃー。衝突しましたがそのままアップします。
>「"A65536"」
これは、エクセル2002までの遺産ですね。 エクセル2002までは、ワークシートの行数は 65536行でした。256の2乗ですね。 そのあとに出たバージョンからは1048576、 つまり、1024の2乗行です。
ただ、 Rows.Count で、どのバージョンであってもワークシートの最大行数 は取得できます。
ですので、特に1048576行のバージョン(どのバージョン だったかは覚えてないです)が出たときに、新旧のどの バージョンでも使えるように、ということで、行数のハード コーディングを止めて、 Rows.Count で行数を取得する方法にしておくべきだ、というやり取りが 多くみられるようになりました。 (OK) 2020/03/09(月) 07:28
なんで上から CTRL+↓にしないかというと、データの途中に空欄があるかどうかで結果が変わってくるからです。 上からだと、空欄行で止まってしまうのですね。 なので、下からにして最下行を得て、途中空欄の場合は処理しないようにコーディングするのが便利なのです。(絶対途中空欄はない、という場合には、上からでOK)
なお、この書き方を使う場合、データが1件もない場合を考慮してください。 例えば、1行目はタイトル行で、2行目からはデータ、という場合、1件も無いと、CTRL+↑の結果は1行目になります。 2行目からデータのある最終行まで処理、というコードだと、データ部だけ変えるはずが、タイトル行を上書きしてしまう結果になるので、注意。
(???) 2020/03/09(月) 10:47
Excel97、2000、2002、2003の最大行数が65536だってこと。 97時代、95(16384行)も考慮して、Rows.Count を使うこともしばしば。 65536が当時は簡単だったので、65536を使う人が多かった。 2007なら、ws1.Range("A1048576").End(xlUp).Row と書いてるところ。
今は、2007以降対応で、Rows.Countばっかり。 Rows.Count は、シートの行数が、16384、65536、1048576とエクセルのバージョンによって変わる。 (BJ) 2020/03/09(月) 13:21
「ws1.Range("A1").End(xlDown)でも同じく最大行番号は取得できると思いますが、例えば上から検索すると途中に空白セルが含まれるデータの場合では、下から検索したほうが確実ということではないでしょうか?」そうだったのですね、、まったく思いつきもしませんでした。原理もわかりました。Google先生が一番とのこと、耳が痛いです。自分では調べたつもりだったのが恥ずかしいです。優しく御指南いただき、ありがとうございます。
もこな2様
「自分で調べてはどうか」は本当に耳が痛いです。わからなくなったらとりあえず調べる、ではなく、調べまくるようにしてみます。今は調べるサイトもよくわからずで、不勉強で本当にお恥ずかしいです。また、そいう言いながらも、教えて頂きまして、ありがとうございます。紹介いただいたサイト、読ませて頂きました。ありがとうございます。
OK様
ありがとうございます。さっそくハードコーディングをググってみました。Rows.Countを教えて頂きまして、ありがとうございます。A65536が2002までの遺産だったとは、知りませんでした。恥をかきましたが、この掲示板で質問してよかったです。
???様
ありがとうございます。Rows.Countについて、原理までさかのぼり、詳しくご教示頂き、ありがとうございます。タイトルの件も承知しました。細かなところまで、御指南ありがとうございます。
BJ様
Rows.Countの歴史をわかりやすく教えていただき、ありがとうございます!コードの書き方で書き手がどのバージョンをよく使っていたかまで推測できますね。面白い発見でした。ありがとうございます。
(あっこ) 2020/03/10(火) 06:11
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.