【VBA】”Range” & ”Cells” の組み合わせはシートを指定必須
VBAコードに慣れてくると
[Range]と[Cells]を組み合わせ使用する機会は増えたのではないでしょうか?
[Range]と[Cells]を組み合わせ使用する場合は
シートを指定しないとエラーが出る、もしくは処理が正常に施されない
事があります。私もこれにはだいぶ苦しみました。
同じことでお悩みの方がこれを見て、お悩み解決に向かえば幸いです。
[Range]&[Cells] は要【sheet指定】
![VBA_Range&Cells_ワークシートの指定_1](https://haginote.com/wp-content/uploads/2021/12/ee721b8d1788e7d1202fe2eb278104b6-1024x555.jpg)
例えば、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](https://haginote.com/wp-content/uploads/2021/12/c571e4fdf8cdcad5b339f068ac73788c.jpg)
エラーが出る理由は、
「どの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](https://haginote.com/wp-content/uploads/2021/12/8a4bff4b2e3147dbd9cf6b3ebf71b36c.jpg)
「Worksheets(“Sheet2”).Activate」を入れて、
処理を実行するワークシートをアクティブにする必要があります。
![VBA_Range&Cells_ワークシートの指定_3](https://haginote.com/wp-content/uploads/2021/12/7935f9a95a100a702844bebf31bfa2da.jpg)
以上になります。
ご参考になれば、また、問題解決につながれば幸いです。