プロが教えるわが家の防犯対策術!

ご教示お願いします。。。

シートAのセルA1に”1111”と入力します。

シート追加マクロを作成し、1111というシートを追加することまではできましたが、
今度はシート削除マクロを作成し、同じく、”1111”のシートを削除しようと思います。

セルA1は都度変わるので、変数を指定し、その変数を使用して削除マクロを作成。

<既に1111シートはあるものと仮定します。>
X = Range("A1") '---(1)XにA1セルに入力された数値をセット(1111がセットされる)
Application.DisplayAlerts = False '---(2)(削除)確認メッセージをOFF
Worksheets(X).Select        '---(3)ワークシートX(X=1111)を選択
ActiveSheet.Delete        '---(4)選択したワークシートを削除
Application.DisplayAlerts = True '---(5)(削除)確認メッセージをONに戻す。
Worksheets("Sheet1").Select    '---(6)ワークシートSheet1を選択して終わり。

上記のマクロを作成し実行すると、(3)で【実行時エラー’9’:インデックスが有効範囲にありません。】
のエラーメッセージがでます。
変数を使用せずに、直接[Worksheets("1111").Select]を明記すると問題なく通ります。
意味が分からず・・・。
変数の指定方法に間違いがあるのでしょうか?

お詳しい方がいらっしゃいましたら、ご教示の程よろしくお願いします。。。

A 回答 (3件)

変数Xは文字列で宣言していますか?


Dim X As String としていなければデータが「1111」ですと変数には数値として格納されます。
ですのでエラーになります。
    • good
    • 0
この回答へのお礼

すばやい回答、ありがとうございました。
基本中の基本のようで、恥ずかしく思いました。

この設定であっさりと解決しましたので。。。

ご教示頂けるみなさまの知識を吸収しながら今後も努めていきます!

お礼日時:2011/02/09 23:19

変数宣言していないのであれば、



X = Range("A1") 

で「X」「1111」という数値が代入されます。

Worksheets(X).Select

とした時、Worksheetsはインデックス番号でも指定できるので、
1111番目のシートを選択しようとします。なので、エラーです。


Dim X As String
と最初に、変数宣言するべきです。



例:

Worksheets(1).Select

とすると、1番目のシートが選択されます。

Worksheets("1").Select

とした場合、「1」という名前のシートを選択されます。
    • good
    • 0
この回答へのお礼

とても分かりやすい説明で感謝します。

サクッと通りました!
本当にありがとうございました。

お礼日時:2011/02/09 23:16

エクセルjはシートのセルに数字(半角全角ともすべて数字)を入れると、数値化してしまう強力な力が働く仕組みがあります。


だから数字を入れた時点でそのセルの値は数値になります《注意)
Sheets(1)のように()内に数字を入れると、シートのインデクッス番号を(見た目で、シートタブの左から何番目かの数(もちろん約10を越えるとシートタブが見えませんが、その辺は観念的に想像してください)を指定したものと看做され、1111番目のシートなど現在使ってませんでしょうから、該当なしエラーになる。
シートの特定には
(1)名前
(2)インデクす番号
(3)ActiveSheet
(4)Previous,など
の特定方法があります。
この点まだ学習してないのにいろんなことをやろうとしているのが原因です。
(注意)で書いたことも、VBAとは離れて、エクセルの基本的知識で、エクセルのことも十分判ってないと、VBAはスムーズに組めません。
またシート名を数字のみにすることは、余りすすめられないことと思います。
ーーー
Sub test01()
'Sheets("1").Delete
x = Worksheets("2").Range("A1")
x = Trim(Str(x))
MsgBox x
Sheets(x).Delete
End Sub
のようなのが、可能なようだ(テスト済み)。
またSelectとActive式は早く脱却のこと。
    • good
    • 0
この回答へのお礼

詳細な回答をありがとうございました!
とても勉強になり助かりました。

確かに知識も無いまま色々と作成しようと思ってた自分が甘いことは重々承知しておりますが、
本やサイトよりも、質問することでピンポイントの回答が返ってくることが1番知識を高めて
いく上で大切なことと自分では思っています。

甘い考えですが、分からないことなどは今後も皆様の知識を吸収しつつ努めていこうと
思っていますので、もしよろしければ今後もよろしくお願いします。

お礼日時:2011/02/09 23:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!