【VBA】”Range” & ”Cells” の組み合わせはシートを指定必須
VBAコードに慣れてくると
[Range]と[Cells]を組み合わせ使用する機会は増えたのではないでしょうか?
[Range]と[Cells]を組み合わせ使用する場合は
シートを指定しないとエラーが出る、もしくは処理が正常に施されない
事があります。私もこれにはだいぶ苦しみました。
同じことでお悩みの方がこれを見て、お悩み解決に向かえば幸いです。
[Range]&[Cells] は要【sheet指定】
例えば、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′
アプリケーション定義またはオブジェクト定義のエラーです。
といったエラーが出ます。
エラーが出る理由は、
「どの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]を組み合わせ使用する際は、必ずそのコードの前に
「Worksheets(“Sheet2”).Activate」を入れて、
処理を実行するワークシートをアクティブにする必要があります。
以上になります。
ご参考になれば、また、問題解決につながれば幸いです。