- ベストアンサー
EXCELの変数を使用したシート削除マクロについて
- EXCELの変数を使用して、指定したシートを削除するマクロを作成する方法について教えてください。
- 変数を使用することで、セルA1の値に基づいてシートを削除することができますが、実行時にエラーが発生しています。
- 直接シート名を指定する場合には問題なく動作しますが、変数を使用する方法について、正しい指定方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
変数宣言していないのであれば、 X = Range("A1") で「X」「1111」という数値が代入されます。 Worksheets(X).Select とした時、Worksheetsはインデックス番号でも指定できるので、 1111番目のシートを選択しようとします。なので、エラーです。 Dim X As String と最初に、変数宣言するべきです。 例: Worksheets(1).Select とすると、1番目のシートが選択されます。 Worksheets("1").Select とした場合、「1」という名前のシートを選択されます。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
エクセル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式は早く脱却のこと。
お礼
詳細な回答をありがとうございました! とても勉強になり助かりました。 確かに知識も無いまま色々と作成しようと思ってた自分が甘いことは重々承知しておりますが、 本やサイトよりも、質問することでピンポイントの回答が返ってくることが1番知識を高めて いく上で大切なことと自分では思っています。 甘い考えですが、分からないことなどは今後も皆様の知識を吸収しつつ努めていこうと 思っていますので、もしよろしければ今後もよろしくお願いします。
- Hirorin_20
- ベストアンサー率20% (136/648)
変数Xは文字列で宣言していますか? Dim X As String としていなければデータが「1111」ですと変数には数値として格納されます。 ですのでエラーになります。
お礼
すばやい回答、ありがとうございました。 基本中の基本のようで、恥ずかしく思いました。 この設定であっさりと解決しましたので。。。 ご教示頂けるみなさまの知識を吸収しながら今後も努めていきます!
お礼
とても分かりやすい説明で感謝します。 サクッと通りました! 本当にありがとうございました。