VBAある名前のブックを現在開いているかを確認する関数を紹介します。「インデックスが有効範囲にありません」エラーを回避するために使いますね。やり方はとても単純です。ブックを1つずつ見ていき、目的のブック名と一致しているブックがあるか調べます。("処理に必要なマスタが開かれていません。開いているすべてのブックを走査し、ブック名が判定ブック名と一致したらTrueを返してExitします。Exitせずにループが終わったら、一致したブックがなかったということで、Booleanの初期値であるFalseが返るしくみです。Functionと書くと理解しやすいです。Exitせずに突破出来たら、FalseにしてEndです。エラーを利用した別の判定方法お忙しい方は、↑の関数をコピペして早速使ってください。お時間に余裕がある方は、↓のテクニックも読んでみてください。実はループ処理を使わずに書くこともできます。目的の「Workbooks(判定ブック名)」をいきなり指定してしまって、それがエラーになるかどうかを調べる方法です。Functionブックが存在しない場合は、変数へのSetが「インデックスが有効範囲にありません」エラーになります。Nextでスキップしているわけですね。次のIf文でそこを判定しています。その関数の中だけで有効です。「この関数を呼んだ後は、呼び出し元のエラーも無視されるようになる」ことはありません。スキップしながら目的の処理をやってみて、エラーが出るかどうかで状態を判定するのは、結構便利です。いろいろな場面で活躍するので、テクニックとして覚えておきましょう。Nextを使うのですから、もっと短い行数で終わらせてみましょう。Nothingこう書くこともできます。条件を満たすかどうか」と書けますからね。中身が1本しかないIf文は、慣れたらこっちで書きましょう。単純な処理はなるべく短い行数で書いて、その分複雑な処理を丁寧に書くと、コードが読みやすくなります。あとは、一時変数tmpも消すと、最終的にはこのコードになります。Function短い!どっちの書き方がいいの?どちらも一長一短で、ケースバイケースです。1万回呼び出す関数なら、行数が短い方が、処理が速くていいかもしれません。今回の「ブック名」の判定は、マクロのスタート時にIf文で1回使う程度のことが多いので、速度は考えない方が良いですね。丁寧にループ処理を書いておいた方が便利です。Thenこのように書き換えるだけで作成できます。エラー技の方は、こういった活用はできません。今回は冒頭の丁寧なループ処理関数がおすすめです。スキップしながらやりたい処理をやってみて、エラーが出るかどうかを関数で試すのは結構便利です。いろいろな場面で活躍するので、テクニックとして覚えておきましょう。「日本語の変数でプログラミングすれば、みんなが幸せになれる」という思想の元、主にExcelVBAのマクロやコードを解説しているブログです。この思想については↓の記事をご覧ください。変数を日本語にすればプログラミングが上達する記事の更新通知や質問の回答はTwitterでも行っております。お気軽にフォローください。12はてなブログをはじめよう!LimeCodeさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。