【VBA】Intersectメソッドは失敗しましたのエラー原因
今回はIntersectメソッドでエラーが起こる原因と対策を紹介します。
Intersectメソッドでエラーとなる原因はほとんどがシート指定のミスによるものです。
どういったケースでエラーが起こるのか見ていきましょう。
Intersectメソッドは失敗しましたのエラー原因
Sub IntersectError()
'''Intersectメソッドでのエラー例
Dim sht As Worksheet
Set sht = Sheets("Sheet1")
Dim rng1 As Range
Set rng1 = sht.Range("A1:E5") '原因1:Sheet1上のセルを指定している
Dim rng2 As Range
Set rng2 = Range("B2:C4") '原因2:アクティブシート上のセルを指定している
Dim rngIntersect As Range
Set rngIntersect = Intersect(rng1, rng2)
End Sub
Intersectメソッドでエラーが起こりやすいケースを、サンプルコードとして記載しました。
Intersectメソッドは引数に異なるシート上のセルを指定すると、エラーが発生します。
サンプルコードを見ると、rng1はSheet1上のセルを指定していますが、rng2はアクティブシート上のセルを指定しています(Rangeでシート指定しないと自動的にアクティブシートとなります)
Sheet1をアクティブにした状態で実行するとエラーが起きません。
しかし、Sheet1以外をアクティブにした状態で実行するとエラーが発生します。
rng1とrng2の指定しているシートが異なるのが原因です。
Intersectメソッドのエラー対策
Sub IntersectNotError()
'''Intersectメソッドでのエラー対策後
Dim sht As Worksheet
Set sht = Sheets("Sheet1")
Dim rng1 As Range
Set rng1 = sht.Range("A1:E5")
Dim rng2 As Range
Set rng2 = sht.Range("B2:C4") 'rng2もSheet1上のセルを指定する
Dim rngIntersect As Range
Set rngIntersect = Intersect(rng1, rng2)
End Sub
解決策はシンプルです。
rng1, rng2が別シートとならないようにすれば良いのです。
上のコードのようにrng2もSheet1のセルを指定するように変えれば解決します。
Intersectメソッドでエラーが出たときは別々のシートのセルを指定していないか確認してみましょう。