- ベストアンサー
VBAでシート名の重複を削除する方法
- VBAを使用してExcelのシート名の重複を確認し、重複した場合に削除する方法を教えてください。
- ExcelのVBAを使って、シート名が重複している場合に重複したシートを削除する方法を教えてください。
- VBAを使って新しいシートを作成する際に、既に同じ名前のシートが存在する場合は削除する機能を追加したいです。どのように実装すればよいでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
なんだ、宿題を代わりにやって欲しいご相談ですか。それならお友達に、目の前でやってもらいながら教わった方がいいですよ。あなたも何を情報提供したらいいのかも判らずに、ぐだぐだになるのも大変でしょう。 >「実行時エラー 91 >オブジェクト変数またはwith ブロック変数が設定されていません。」 >となってしまいました。 回答した通りに出来ていない、間違ったことをやっている、または他の関係ない所でエラーが出ているのが原因です。回答したマクロには、そういうエラーが出る要因はありません。 そもそも、「いまはどんなマクロを動かしていて」、具体的にどこの行でエラーが出ているのですか? それとも、何をしなさいと言われているのかも理解できていないのでしょうか。 1.ここからここまでのマクロを消す 2.消したところに回答のマクロをコピー貼り付ける 3.実行する それから、 4.エラーが出たら「デバッグ」をクリックする 5.マクロの画面が開くので黄色くなった行を確認する 6.確認した黄色くなったマクロを含むマクロの範囲をコピーして、改めて新しいご相談として投稿してみる その際は、この行でこういうエラーが出ています、と目に見える様子をキチンと情報提供する。
その他の回答 (2)
- keithin
- ベストアンサー率66% (5278/7941)
既に指摘されているように無意味なマクロになっているので、 ----------ここから For Each ws In Worksheets If ws.Name = "データ" Then wsChkflg = True End If Next If wsChkflg = True Then ThisWorkbook.Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "データ" Else ThisWorkbook.Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "データ" End If ----------ここまで 丸ごと消します。 代わりにその部分に、 application.displayalerts = false on error resume next worksheets("データ").delete on error goto 0 application.displayalerts = true thisworkbook.worksheets.add(after:=worksheets(worksheets.count)).name = "データ" と書いておきます。
補足
ありがとうございます。 試してみたのですが、 「実行時エラー 91 オブジェクト変数またはwith ブロック変数が設定されていません。」 となってしまいました。 ----------ここから For Each ws In Worksheets If ws.Name = "データ" Then wsChkflg = True End If Next If wsChkflg = True Then ThisWorkbook.Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "データ" Else ThisWorkbook.Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "データ" End If ----------ここまで 上記部分以外にも前後にマクロが入力してあるのですが、 それが影響しているのでしょうか。。 課題で出題されているので、どこまで記載してよいかわからず抜粋してしまったのが 原因でしょうか。 上手く質問内容の情報を提供できずに申し訳ありません。。
- bin-chan
- ベストアンサー率33% (1403/4213)
If wsChkflg = True Then ThisWorkbook.Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "データ" Else ThisWorkbook.Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "データ" End If の部分でwsChkflgの値によらず同じ処理をしているようですが、意図は? また For Each ws In Worksheets の前に wsChkflg = False にしてますか?
お礼
迅速に対応いただきありがとうございました。
補足
本当に無知ですみません。 >If wsChkflg = True Then >ThisWorkbook.Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "データ" >Else >ThisWorkbook.Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "データ" >End If >の部分でwsChkflgの値によらず同じ処理をしているようですが、意図は? 上記のマクロは元々今回のワークシート追加されてあった機能で、 意図がわかりませんでした。 >For Each ws In Worksheets >の前に >wsChkflg = False してないです。。
お礼
ご回答いただきありがとうございます。 宿題というわけではないのですが、おっしゃる通りですね。 ここで質問するような内容ではありませんでした。。 申し訳ありません。 質問する側としての、情報や質問事項の理解度も曖昧なまま だったので、頂いたアドバイスを基にもう少し勉強しようと思います。 ありがとうございました。