【Excel VBA】Range型変数でよく見る実行時エラー91の原因と対処法

Excel
スポンサーリンク

今回はRange型変数を使用している時にでよく見る「実行時エラー’91’:オブジェクト変数またはWithブロック変数が設定されていません。」の原因と対処法を紹介します。

スポンサーリンク

どういうエラーか

Range型の変数を使用している時に「実行時エラー’91’:オブジェクト変数またはWithブロック変数が設定されていません。」というエラーが出ることがあります。

どういうエラーか_1

VBAを使っている方であれば1回は見たことがあるエラーかもしれませんね。

とりあえず例としてコードを用意しました。実行すると上記エラーが発生します。

Sub testCheckNothing()

    Dim Rng                     As Range
    
    With ThisWorkbook.ActiveSheet
        Rng.Offset(1, 0) = "エラーになります"
    End With
End Sub
スポンサーリンク

エラーが発生する原因

具体的にどういうエラーなんだろう?

と思う方も多いと思います。実際私もよくそうなってました。

エラーが発生する原因はRange型変数の中身がNothingになっていることが多いです。実際に変数に何もセットせずに中身を確認してみるとNothingになっているはずです

エラーが発生する原因_1

メソッドを確認してみるとエラーメッセージが表示されるのが確認できます。

エラーが発生する原因_2
スポンサーリンク

対処法

対処法ですが、IF文を使ってRange型変数の中身をチェックするのがおすすめです。

具体的にどうするの?

ってなると思うので、先程の例を使って紹介します。

Sub testCheckNothing()

    Dim Rng                     As Range
    
    With ThisWorkbook.ActiveSheet
        
        If Rng Is Nothing Then
            Set Rng = .Range("A1")
        End If
        
        Rng.Offset(1, 0) = "エラーになります"
    
    End With
End Sub

先程のコードに以下の部分を追加しました。

If Rng Is Nothing Then
    Set Rng = .Range("A1")
End If

何となく読めばわかる方もいると思いますが、

要は「Rngの中身がNothing(何も格納されていない)か」をIF文で判定し、TrueであればRngにA1セルをセットする。といった処理になります。

こうして事前にチェックしておくことでRangeに何も格納されていないことによるエラーを防ぐことができるわけです。

まとめ

今回はRange型変数でよく見るエラーの原因と対処法を紹介しました。

実行時エラー’91’:オブジェクト変数またはWithブロック変数が設定されていません。」が出る時は、変数の中身がNothingになっていないか(何も格納されていない状態)確認するようにしましょう。

また、当ブログではVBAに関する記事を不定期で投稿していますので、良ければ是非ご覧ください!

コメント

タイトルとURLをコピーしました