質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

1873閲覧

エクセルの複数あるシートのうち、インデックスページにチェックが入っているものだけ消すマクロ

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2018/12/11 01:49

エクセルの複数あるシートのうち、インデックスページにチェックが入っているものだけ消すマクロ

複数シートが存在するエクセルで、インデックスページには全シートの名前が載っています。
インデックスページの、シート名の横に〇がついているページ以外を削除するマクロを組みたいのですが、方法はあるでしょうか?
削除したいページは変動するため、必要なシートを〇で選び、不要なシートを削除する、ということが行いたいです。

発生している問題・エラーメッセージ

該当のソースコード

試したこと

Sheets("インデックス").Select
Sheets(Array(Range("L2"), Range("L3"), Range("L4"))) _
.Select

セルの値をrangeで選択したらどうかと思いましたが、ここでエラーになりました。
また、これだと〇がついているシートを選ぶときに指定が難しいと思いました。

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2018/12/11 02:01

"インデックス"シートのデータは、どのような配置になっているのですか? 「A列にシート名、B列は"○"か空白、1行目は項目になっている」というになっているのであれば、B列を2行目から調べていって"○"じゃない行のA列のセルに書かれたシートを削除するという操作をループで繰り返すだけだと思います。
退会済みユーザー

退会済みユーザー

2018/12/11 02:11

さっそく記入していただき、ありがとうございます!1行名は項目、K列にシート名、L列に〇、という配置になっています。VBA初心者です。その操作はどういうコートを書いたらいいでしょうか・・・?
guest

回答2

0

「1行名は項目、K列にシート名、L列に〇、という配置」という事なので、プログラムの構造は以下のような感じになります。

 2行目からK列にシート名がある限り、行を順に進めてゆく(ループ)    もし、L列のセルが"〇"でなかったら       K列のシート名のワークシートを削除する。

VBAで書くと、こんな感じになります。

Public Sub 不要なシートの削除() '変数の定義 indexWS:"インデックス"ワークシート、sheetName:"シート名"、row:"行" Dim indexWS as Worksheet, sheetName as String, row as Long Set indexWS = worksheets("インデックス") 'indexWSはインデックスページのシート row=2 '2行目から始める Do Loop If (indexWS.cells(row,12)<>"〇") 'L列(12列目)のセルが"〇"でなかったら Application.DisplayAlerts = False '警告(削除して良いですかというプロンプト)が出ないようにする worksheets(indexWS.Cells(row,11)).Delete 'K列(11列目)のセル内容のシートを削除する Application.DisplayAlerts = True '警告が出るように戻す row = row + 1 '次の行へ End If While (indexWS.Cells(row,11)<>"") 'K列(11列目)のセルが空白ならループ終了 End Sub

投稿2018/12/11 02:47

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

書いてみました。
単純にインデックスシートを1行ずつループで回して、○でなかったらそのシートを削除するという処理です。
エラー処理なんかは適宜追加してください。

VBA

1Dim r As Long 2Dim sh As Worksheet 3r = 2 4Set sh = Worksheets("インデックス") 5Application.DisplayAlerts = False 6Do While sh.Cells(r, 12).Value <> "" 7 If sh.Cells(r, 13).Value <> "○" Then 8 Worksheets(sh.Cells(r, 12).Value).Delete 9 End If 10 r = r + 1 11Loop 12Application.DisplayAlerts = True

投稿2018/12/11 02:41

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/12/11 02:51

できました! こんなに短時間で解決してくださってありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問