こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ExcelのVBAでシート選択・最終行取得がうまくいかない。

シートA・Bがあり、シートAの変数markが★だったら、シートBへいき、最終行を取得、ということをしたくて以下のようなコードをかきました。

Worksheets("A").Select
Last3 = Cells(6).CurrentRegion.Rows.Count

Worksheets("B").Select
Last1 = Cells(6).CurrentRegion.Rows.Count

For w = 1 To Last1
Worksheets("B").Select
Mark = Cells(w, 26)

If Mark = "★" Then
Sheets("A").Select
Last3 = Cells(6).CurrentRegion.Rows.Count
MsgBox Last3
End If

Next

ですが、シートAの最終行が表示されます。

どこがちがうのでしょうか?

投稿日時 - 2003-08-20 09:33:02

QNo.632457

困ってます

質問者が選んだベストアンサー

質問が間違えているのですね。

一応、実行してみましたが、実行されましたよ。
エラーが出ているのでしょうか?
それとも思った結果にならないのでしょうか?

CurrentRegionは最終行を求めるのとはちょっと違い
空白行までを範囲選択するので、
途中で、空白行があるとそこで終わってしまいます。
試しに

sub test()
Worksheets("B").Select
Cells(6).CurrentRegion.Select
end sub

を実行してみてください。
自分が考えている範囲を選択できましたか?

空白がある場合などは、
Last1 = Range("A36635").End(xlUp).Row

にした方がいいと思います。

(この場合はA列で入力されている最後の行番号をLast1にいれています。)

そういう事でない場合は、もう少し具体的な
例えばエラー内容とか
を記述してください。

投稿日時 - 2003-08-20 13:18:19

お礼

回答ありがとうございます。

結果としてはエラーではなく、思うような結果が得られませんでした。

>CurrentRegionは最終行を求めるのとはちょっと違い
空白行までを範囲選択するので、

はい、空白までということなので、空白が絶対にない列(6)を指定してあるので、大丈夫なはずなんです。

どうしてもできなかったので、

Last3 = Sheets("A").Cells(6).CurrentRegion.Rows.Count

として、入力も
Sheets("A").Cells(Last3 + 1, 1) = No

みたいにやってみたらきちんと動作したので、
Last3 = Cells(6).CurrentRegion.Rows.Count

と戻したらきちんとできるようになりました。
なんでなのか自分でもわかりません。

ありがとうございました。

投稿日時 - 2003-08-20 14:52:14

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

マクロをシートに書いていませんか?
もしそうなら、標準モジュールを追加してそこに記述してください。

cells(6)は正しいですか?
#2で指摘されているように確認してみてください。

投稿日時 - 2003-08-20 13:28:29

お礼

回答ありがとうございます。

確認しましたが、Moduleにちゃんとかいてありました。
なぜできるようになったのか不明なんですが…。。

ありがとうございました。

投稿日時 - 2003-08-20 14:49:06

ANo.1

おはようございます。

質問とプログラムが逆になってるように思うのですが・・・

プログラムは、
シートBの変数markが★だったら、シートAへいき、最終行を取得

で最終的にシートAの最終行を表示しています。

投稿日時 - 2003-08-20 10:01:03

お礼

はい、失礼しました。
質問が逆でした…(^^;

これが実行できないのですが、どこがいけないのかわかりません。。

投稿日時 - 2003-08-20 10:06:44

あなたにオススメの質問