【VBA】”Range” & ”Cells” の組み合わせはシートを指定必須

2021年12月8日

VBAコードに慣れてくると
[Range]と[Cells]を組み合わせ使用する機会は増えたのではないでしょうか?
[Range]と[Cells]を組み合わせ使用する場合は

シートを指定しないとエラーが出る、もしくは処理が正常に施されない

事があります。私もこれにはだいぶ苦しみました。
同じことでお悩みの方がこれを見て、お悩み解決に向かえば幸いです。
 

広告

[Range]&[Cells] は要【sheet指定】

VBA_Range&Cells_ワークシートの指定_1
たとえば、ワークシートが2つ(以上)あり、またがって処理をする場合など

 
例えば、Excelの「Sheet1」「Sheet2」とある場合で
「Sheet1」を表示している状態で、

Worksheets("Sheet2").Range(Cells(2, 2), Cells(4, 5)) = "A"

もしくは

With Worksheets("Sheet2")
  .Range(Cells(2, 2), Cells(4, 5)) = "A"
End With

一見、正しそうなこのコードを実施すると、下のような

実行時エラー’1004′
アプリケーション定義またはオブジェクト定義のエラーです。

といったエラーが出ます。

VBA_Range&Cells_ワークシートの指定_2

エラーが出る理由は、
どのsheetの処理をしているか明瞭にされていない為」だそうです。
なので、正しいコードは以下になります。
 

Range(Worksheets("Sheet2").Cells(2, 2), Worksheets("Sheet2").Cells(4, 5)) = "A"

もしくは

With Worksheets("Sheet2")
  Range(.Cells(2, 2), .Cells(4, 5)) = "A"
End With

 
つまりは
[Cells] がどこのSheetのモノを指しているのか明確にしなければならない
という事で
エラーが出た例に戻れば、

「Sheet1」を表示して
「Sheet2」の[Range]を指定しておきながら
最終的にどのワークシートの [Cells] なのかをはっきりさせていないので
エラーが出てしまっている状況です。

ですから、エラーが出たコードを活かすのであれば、

Worksheets("Sheet2").Activate
Worksheets("Sheet2").Range(Cells(2, 2), Cells(4, 5)) = "A"

もしくは

Worksheets("Sheet2").Activate
With Worksheets("Sheet2")
  .Range(Cells(2, 2), Cells(4, 5)) = "A"
End With

 
と、[Range]と[Cells]を組み合わせ使用する際は、必ずそのコードの前に

VBA_Range&Cells_ワークシートの指定_4
どのワークシートでの範囲(Cells)なのか?をあらかじめアクティブにしておく

Worksheets(“Sheet2”).Activate」を入れて、
処理を実行するワークシートをアクティブにする必要があります。
 

VBA_Range&Cells_ワークシートの指定_3
こうするとエラーなく処理が進みます

 
以上になります。
ご参考になれば、また、問題解決につながれば幸いです。

広告