shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Excel VBA】セルのアクティブ化でエラーが発生する原因と対応

ExcelのVBAで、セルのアクティブ化や選択をしようとすると、セルが存在するにも関わらず「実行時エラー '1004': Range クラスの Select メソッドが失敗しました」「Range クラスのActivate メソッドが失敗しました」というエラーが発生する時があります。

しかも、元々動作していたが、コードの他の部分を修正した後に発生ということもあります。

エラーが発生する原因と対応

セルが存在しているにも関わらずエラーとなる場合、次の状態になってる可能性があります。

Activate メソッドの場合

セルは現在の選択範囲内にある必要がある」が満たされていない。learn.microsoft.com

 

Select メソッドの場合

「ブックをアクティブ化し、シートをアクティブ化または選択してから、Select メソッドを使用して範囲を選択する必要がある」が満たされていない。

learn.microsoft.com

具体的な事例

例えば、次のようなコードの場合、ThisWorkbookがアクティブ化され、Sheets("シート")もアクティブ化されていないとエラーが発生します。

ThisWorkbook.Sheets("シート").Range("A1").Activate

つまり、他のブックがアクティブになっていたり、他のシートがアクティブになっていると、エラーが発生するということ。

反対にアクティブな状態であればエラーは発生しない

 

上記のコードでエラーが発生した場合、

ThisWorkbook.Activate
 Sheets("抽出シート").Select ’もしくはActivate
 Range("A1").Select

とすれば、エラーは発生しない筈。

3行あるから、1行にしようと修正しているうちにアクティブな状態が変わると、このようなエラーが発生することになります。

なので、何がアクティブになっているのか注意が必要です。

 

以上、ExcelのVBAで、セルが存在するにも関わらず、セルのアクティブ化や選択でエラーが発生する原因と対応例でした。