質問: Range("D65536").End(xlUp).Row End Sub ``` です。 (テストなのでステップインで1行ずつテストをして確かめています) どこかが間違っているのでしょうか? (なお、Celssで取得している行で最初の1行以外全て間違った結果が返ってきています) **[質問2]------** 今回、Range("C65536").End(xlUp).Row というコードでうまく取得できることが 分かりました。 しかし、65536と直接入れて今は動かせていても、 今後例えばExcelのバージョンが変わった時にExcelの最終行が変わったりすることも あるかもしれませんし、または例えば業務で大量のデータを扱う時などは もしかしたら65536行以上のデータが入ることだってあるかもしれませんし・・・ なので、これでいいのかな?と思っています。 **何か良い置き換えというか、そういうコードはありますでしょうか?** 以上よろしくお願いいたします。
回答: ``` Cells(3, Columns.Count).End(xlToLeft).Column ``` このコードは、3行目の一番右の列番号を取得しようとしています。 結果として「しょうゆ」が入っている4列目になりますので「4」が返ってきています。 Columns.Countは、そのExcelのバージョンで扱える最大の列番号を取得すると考えて良いでしょう。 End(xlToLeft)で最大の列番号から左方向に見ていき、何らかのデータが入っているセルを探します。 最後のColumnメソッドで「しょうゆ」が入っている行番号を返しています。 ``` Range("C65536").End(xlUp).Row ``` このコードは、C列の一番下の行番号を取得しようとしています。 結果として「モモ」が入っている7行目になりますので「7」が返ってきています。 先のColmnsメソッドが列番号を返すのに対して、Rowメソッドは行番号を返します。 ``` Cells(Rows.Count, 1).End(xlUp).Row ``` 定型文としては、上記のコードで最終行を取得します。 A列の場合は1、B列の場合は2と書き換えると良いでしょう。