Sub DeleteSheetsByFlag()
'全てのシートについて
Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
'削除対象フラグを設定。初期値はオン。
Dim sakujoFlagOn As Boolean
sakujoFlagOn = True
'NokosuList内の全ての値について
Dim gyo As Long
For gyo = 1 To ThisWorkbook.Sheets("NokosuList").Range("A" & Rows.Count).End(xlUp).Row
'もしシート名がリストと一致したら
'大文字小文字の差を吸収するため、両辺にUcaseを通す
If UCase(ThisWorkbook.Sheets("NokosuList").Range("A" & gyo).Value) = UCase(Sh.Name) Then
'削除対象フラグをオフに切り替える。
sakujoFlagOn = False
Exit For
End If
'保存シート名ループ終了
Next
'削除対象フラグがTrueのままだったらシート削除
If sakujoFlagOn Then
Application.DisplayAlerts = False
Sh.Delete
Application.DisplayAlerts = True
End If
'全てのシートループ終了
Next
End Sub
Sub DeleteUnlistedSheets()
Dim Sh As Worksheet
Dim Gyo As Long
'全てのシートについて
For Each Sh In ThisWorkbook.Sheets
'NokosuList内の全ての値について
For Gyo = 1 To ThisWorkbook.Sheets("NokosuList").Range("A" & Rows.Count).End(xlUp).Row
'もしシート名がリストと一致したら、シートを削除する
'大文字小文字の差を吸収するため、両辺にUcaseを通す
If UCase(ThisWorkbook.Sheets("NokosuList").Range("A" & Gyo).Value) = UCase(Sh.Name) Then
Application.DisplayAlerts = False
Sh.Delete
Application.DisplayAlerts = True
Exit For
End If
'保存シート名ループ終了
Next
'全てのシートループ終了
Next
End Sub
> Sub DeleteUnlistedSheets()
> Dim Sh As Worksheet
> Dim Gyo As Long
> '全てのシートについて
> For Each Sh In ThisWorkbook.Sheets
> 'NokosuList内の全ての値について
> For Gyo = 1 To ThisWorkbook.Sheets("NokosuList").Range("A" & Rows.Count).End(xlUp).Row
> 'もしシート名がリストと一致したら、シートを削除する
> '大文字小文字の差を吸収するため、両辺にUcaseを通す
> If UCase(ThisWorkbook.Sheets("NokosuList").Range("A" & Gyo).Value) = UCase(Sh.Name) Then
> Application.DisplayAlerts = False
> Sh.Delete
> Application.DisplayAlerts = True
> Exit For
> End If
> '保存シート名ループ終了
> Next
> '全てのシートループ終了
> Next
> End Sub
>
> > Sub DeleteUnlistedSheets()
> > Dim Sh As Worksheet
> > Dim Gyo As Long
> > '全てのシートについて
> > For Each Sh In ThisWorkbook.Sheets
> > 'NokosuList内の全ての値について
> > For Gyo = 1 To ThisWorkbook.Sheets("NokosuList").Range("A" & Rows.Count).End(xlUp).Row
> > 'もしシート名がリストと一致したら、シートを削除する
> > '大文字小文字の差を吸収するため、両辺にUcaseを通す
> > If UCase(ThisWorkbook.Sheets("NokosuList").Range("A" & Gyo).Value) = UCase(Sh.Name) Then
> > Application.DisplayAlerts = False
> > Sh.Delete
> > Application.DisplayAlerts = True
> > Exit For
> > End If
> > '保存シート名ループ終了
> > Next
> > '全てのシートループ終了
> > Next
> > End Sub
> >
nohohohohoさんの投稿
(投稿ID: 4600)
先生こんにちは。シートに削除対象外のシート名を記載するバージョンを(CountIfを使った方がすっきり書けますが、)フラグを使って書いてみました。
違和感がありましたら、コメントお願いします。
小川 慶一さんのコメント
(コメントID: 6351)
悪くないです。
[1] 変数宣言は、構造文の外へ。
[2] フラグ設定の部分は、いろいろなやり方があります。以下は良い参考になるかと。今後のために示します。
https://www.exvba.com/comment_detail.php?comment_id=11669
nohohohohoさんのコメント
(コメントID: 6352)
参考リンクを拝見したところ、わざわざフラグを使う必要がないこと、フラグって、ループの処理を外に出したり、共通処理をまとめたりしてるだけなことに気づきました。私のコードは、ループから出している処理が単発の3行だけなので、今となっては「この人はなぜフラグを使おうと思ったのか?」という感じです。
改めました。質問欄を汚してすみません。またcode付け忘れました。
小川慶一さん:
> フラグを使った処理の基本的な流れは抑えられていると思います。
> 悪くないです。
>
> [1] 変数宣言は、構造文の外へ。
> [2] フラグ設定の部分は、いろいろなやり方があります。以下は良い参考になるかと。今後のために示します。
> https://www.exvba.com/comment_detail.php?comment_id=11669
>
nohohohohoさんのコメント
(コメントID: 6353)
失礼しました。
ゲストさん:
> ご指導ありがとうございます。
> 参考リンクを拝見したところ、わざわざフラグを使う必要がないこと、フラグって、ループの処理を外に出したり、共通処理をまとめたりしてるだけなことに気づきました。私のコードは、ループから出している処理が単発の3行だけなので、今となっては「この人はなぜフラグを使おうと思ったのか?」という感じです。
>
> 改めました。質問欄を汚してすみません。またcode付け忘れました。
>
>
> 小川慶一さん:
>
> > フラグを使った処理の基本的な流れは抑えられていると思います。
> > 悪くないです。
> >
> > [1] 変数宣言は、構造文の外へ。
> > [2] フラグ設定の部分は、いろいろなやり方があります。以下は良い参考になるかと。今後のために示します。
> > https://www.exvba.com/comment_detail.php?comment_id=11669
> >
小川 慶一さんのコメント
(コメントID: 6356)
ポイントとしては、以下を分離するという発想を持つことです。
・削除実施する/しないの判定
・削除の実施
今回で言えば、前者が flag の設定、後者が Delete メソッドの実施ですね。
> 間違えました。これだと、残すリストにあるのをきれいに消しちゃってますね。だから、フラグ使ってたんですね。
>
> 失礼しました。
>
> ゲストさん:
>
> > ご指導ありがとうございます。
> > 参考リンクを拝見したところ、わざわざフラグを使う必要がないこと、フラグって、ループの処理を外に出したり、共通処理をまとめたりしてるだけなことに気づきました。私のコードは、ループから出している処理が単発の3行だけなので、今となっては「この人はなぜフラグを使おうと思ったのか?」という感じです。
> >
> > 改めました。質問欄を汚してすみません。またcode付け忘れました。
> >
> >
> > 小川慶一さん:
> >
> > > フラグを使った処理の基本的な流れは抑えられていると思います。
> > > 悪くないです。
> > >
> > > [1] 変数宣言は、構造文の外へ。
> > > [2] フラグ設定の部分は、いろいろなやり方があります。以下は良い参考になるかと。今後のために示します。
> > > https://www.exvba.com/comment_detail.php?comment_id=11669
> > >