こんにちは、わたあめです。今日はExcel VBAマクロの実行時エラー'1004'についての記事です。空白から範囲を取得するCurrentRegionですが、取得する際に以下のエラーが出ました。
このエラーについてどう対処したかをこの記事にまとめていきたいと思います。それでは、いってみましょう!
事象詳細
どんな状況でこの事象が発生したか、詳細を書きます。
今回、ExcelのシートはSheet1,Sheet2があり、Sheet2を開いている状態で別シートのSheet1の範囲を取得※しようとしたところ、以下のエラーが出ました。(冒頭のエラーです。)
その時のVBAは以下のように書いていました。
Worksheets("Sheet1").Range("A1").CurrentRegion.Select
一見、Sheet1のA1を起点とした範囲を取得できるようなコードですが、エラーが出ました。この原因・対処法をまとめていきたいと思います。
補足:CurrentRegionとは
本文「※」に出てきた範囲取得はCurrentRegionというプロパティでの範囲取得の事です。CurrentRegionは指定したセルを起点に空白で囲まれた範囲を参照するというものです。
原因・対処:処理するシートをアクティブにする
CurrentRegionをする際に、実行時エラー1004が出た事象の原因と対処です。
原因
CurrentRegionプロパティを利用する際に指定するRangeがSheet1のものだった場合、あらかじめSheet1をアクティブにしておかないとエラーが出ることが分かりました。
対処
別シートを開いている場合には、処理するシートをアクティブにしておけば良いです。
ActiveWorkbook.Worksheets("シート名").Activate
以下のように、CurrentRegionを実行する前に、利用するSheetをアクティブにしておけばOKです。
ActiveWorkbook.Worksheets("Sheet1").Activate
ActiveWorkbook.Worksheets("Sheet1").Range("A1").CurrentRegion.Select
まとめ
まとめると、以下です。
- 利用するシートがアクティブになっていない:実行時エラー1004
- 利用するシートがアクティブになっている:処理成功
1つのシートのみで処理が完結する場合はこの記述は不要ですが、2つ以上でシートを行き来する処理がある場合は「アクティブにする」という処理をを入れておくと良いと思います!
その他注意点
マイクロソフト公式ページの説明にもあるように、CurrentRegionプロパティでは保護されたワークシートでは使う事ができません。もし、保護されたシートでマクロ処理を実行した場合、以下のエラーが出ます。
この場合の対処方法はシートの保護を解除することです。解除方法の手順は以下です。
シート保護解除方法
- [校閲]タブ>[シート保護の解除]をクリック
この手順でシートの保護を解除できますが、パスワードが設定されている場合などは解除のパスワードが必要となります。
さいごに
いかがだったでしょうか。マクロ作りの参考に少しでもお役立ちできれば幸いです。それでは、また!