ExcelのVBAで、セルのアクティブ化や選択をしようとすると、セルが存在するにも関わらず「実行時エラー '1004': Range クラスの Select メソッドが失敗しました」「Range クラスのActivate メソッドが失敗しました」というエラーが発生する時があります。
しかも、元々動作していたが、コードの他の部分を修正した後に発生ということもあります。
エラーが発生する原因と対応
セルが存在しているにも関わらずエラーとなる場合、次の状態になってる可能性があります。
Activate メソッドの場合
「セルは現在の選択範囲内にある必要がある」が満たされていない。learn.microsoft.com
Select メソッドの場合
「ブックをアクティブ化し、シートをアクティブ化または選択してから、Select メソッドを使用して範囲を選択する必要がある」が満たされていない。
具体的な事例
例えば、次のようなコードの場合、ThisWorkbookがアクティブ化され、Sheets("シート")もアクティブ化されていないとエラーが発生します。
ThisWorkbook.Sheets("シート").Range("A1").Activate
つまり、他のブックがアクティブになっていたり、他のシートがアクティブになっていると、エラーが発生するということ。
反対にアクティブな状態であればエラーは発生しない。
上記のコードでエラーが発生した場合、
ThisWorkbook.Activate
Sheets("抽出シート").Select ’もしくはActivate
Range("A1").Select
とすれば、エラーは発生しない筈。
3行あるから、1行にしようと修正しているうちにアクティブな状態が変わると、このようなエラーが発生することになります。
なので、何がアクティブになっているのか注意が必要です。
以上、ExcelのVBAで、セルが存在するにも関わらず、セルのアクティブ化や選択でエラーが発生する原因と対応例でした。