| 
    
     |  | ▼タケル さん: 
 ループ構文の改善は、後回しにして
 
 >
 >   Sheets(2).Range(Cells(j, "A"), Cells(j + 5, "A")).MergeCells = True 'アプリケーション定義またはオブジェクト定義のエラー(上手く行く時もある)
 >
 >
 >   Sheets(1).Range(Cells(i + 1, "E"), Cells(i + Y, "E")).Select 'アプリケーション定義またはオブジェクト定義のエラーが発生
 >   Sheets(1).Range(Cells(i + 1, "H"), Cells(i + Y, "H")).Select
 
 うっかりと、このような記述をしてしまい、悩む人が多いようですね。
 
 Sheets(2).Range(
 
 こは、Sheets(2)の領域の宣言をします。その詳細は (・・) のなかに記述していますと
 こういうことを意味しています。
 で、その (・・・・) の中ですが、このセルからこのセルまで こういう記述ですよね。
 でも、『このセル』って、どこのシートのセルでしょうか?
 Cells(i + 1, "H") も Cells(i + Y, "H")) も、どこのシートということが明示的に
 示されていませんね。
 こういう場合、VBAは、標準モジュールであればアクティブシート、
 シートモジュールであれば、そのモジュールが属しているシートと見なします。
 
 そうしますと、標準モジュールの場合、Sheets(2)がアクティブシートなら結果オーライですが
 それ以外がアクティブになっていると、
 Sheets(2)のセル領域の規定で、その詳細は、Sheets(2)以外のここからここまで。
 このような矛盾のある規定になりますのでアプリケーション定義エラーとなります。
 (・・・・) の中のセルにも SHeets(2). とシート修飾することが必要です。
 
 |  |