概要
今回はたった1行で簡単に簡潔にシートの存在チェックをする方法を紹介します。
シートの存在有無チェック
では早速ですが、構文を確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Option Explicit Sub existWSCheck() Const WSName As String = "シート名" 'シートの存在チェック If IsError(Evaluate("=IFERROR('[" & ThisWorkbook.Name & "]" & WSName & "'!A1,"""")")) Then MsgBox "存在しない" Else MsgBox "存在する" End If End Sub |
マーカーで強調した8行目でシートの存在有無を確認しています。
Evaluateメソッドで関数の結果にエラーが返された(IsError関数がTrue)場合、シートが存在しないと判断します。
肝心の関数は、シートの存在有無を確認したいシート(WSName = “シート名”)のA1セルの結果を取得しエラーである場合(IFERROR関数がTrue)は空白(“”””)を返すというものです。これによりシート内の関数エラーについては全て空白で返すので、シートまたはブックの存在以外ではEvaluateメソッドでエラーが返ることはありません。
他のワークブックのシートを確認する場合はThisworkbookではなく他のワークブックの名前を入れてあげてください。
また、他のブックを見ないというのであればブック名を省略することも可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Option Explicit Sub existWSCheck() Const WSName As String = "シート名" 'シートの存在チェック If IsError(Evaluate("=IFERROR(" & WSName & "!A1,"""")")) Then MsgBox "存在しない" Else MsgBox "存在する" End If End Sub |
だいぶシンプルになりましたね。これでブックの存在でエラーが返ることはなくなりました。
さらにEvaluate関数は[]で省略することが可能です。
1 2 3 4 5 6 7 8 9 10 11 12 |
Option Explicit Sub existWSCheck3() 'シートの存在チェック If IsError([IFERROR(シート名!A1,"")]) Then MsgBox "存在しない" Else MsgBox "存在する" End If End Sub |
残念ながら[]で省略したときは[]内で変数や定数を使うことができませんが、どのシートをチェックするか事前に明確になっている場合は直接シート名を入れることも選択肢に入ります。
まとめ
他サイトでは、For文を使ったり、On Errorステートメントを使ったりしてますが、冗長した文になったり、想定外のエラーがあるとすり抜けてしまったりします。
ですが、紹介した方法をやることでたった1行で簡単に簡潔にシートの存在有無チェックを行うことができるので、是非こちらの方法を試してみてください。
今回はここまで。ノシ
---コメント---