みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

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

解決済みの質問

Excel VBAの不可解(?)な動作について

Excel 2000 VBAでの質問です。
Sheet1に以下のようなコードを書きました。
---------------------------------------------------------
Public Sub test()
Application.DisplayAlerts = False

Sheets("Sheet2").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "test"

Sheets("test").Visible = xlVeryHidden
Sheets("Sheet3").Visible = xlVeryHidden

Sheets("test").Visible = True
Sheets("test").Delete

Sheets("Sheet2").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "test" '問題の行

Application.DisplayAlerts = True
End Sub
---------------------------------------------------------
このコードで期待している動作は、最終的にSheet3(xlVeryHiddenになっている)の後ろにSheet2をコピーし、その名前を「test」にするというものです。
しかし、実際にはSheet3の後ろにSheet2がコピーされるものの、名前はSheet2が「test」と変更されてしまいます。
Sheets.Countの値はSheet3をさしているはずなのですが・・・。

皆様に教えていただきたいのは、
・この意図しない動作がなぜ起こるか
・どうすればこの問題を回避できるか
です。よろしくお願いいたします。

もし初歩ミスでしたら、申し訳ありません・・・。ご指摘ください。

投稿日時 - 2007-03-12 01:36:37

QNo.2825149

すぐに回答ほしいです

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

すいません、何か勘違いしたようです。
Sheets("Sheet2").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "test" '問題の行
問題はシート名変更部分ではなく、シートコピー部分ですね。
本来Sheet3の後ろにコピーされなければならないのに、Sheet3が非表示の為、Sheet2の後ろ(Sheet3の前)にコピーされている為ですね。
失礼しました。

投稿日時 - 2007-03-12 10:22:42

お礼

No.1とあわせまして、ご回答ありがとうございました。
ご回答を元に、Sheet3を再表示させてみると、確かにSheet3の前にコピーされていることがわかりました。
シートの表示/非表示によって、こんなところにも違いが出るのですね。
扱いにくい気がしますが、仕様なので仕方ありませんね。
どうもありがとうございました。

投稿日時 - 2007-03-12 18:58:15

ANo.2

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

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

回答(2)

ANo.1

Sheets.Countには現在のシートの数が入っています。
問題の行の1行前
 Sheets("Sheet2").Copy After:=Sheets(Sheets.Count)
ではSheet2を現在のシートの数番目の後ろにコピーしますので、
Sheet3の後ろにコピーされます。
この時点で、現在のシートの数は4になりますので、
 Sheets(Sheets.Count).Name = "test" '問題の行
この行では4番目の行の名前をtestにしています。
つまり、Sheet3の後ろにあるSheet2(2)をtestにしています。

投稿日時 - 2007-03-12 09:09:28

あなたにオススメの質問