サイトアイコン 独学エクセル塾

【マクロVBA】「指定された値は境界を超えています。」の実行時エラーの原因と対策について

エクセルのマクロVBAのプログラムを作ったことがある方は誰もが経験があるエラーですが、

皆さんも悩んでいるのではないでしょうか。
プログラムを作った人は発生したエラーについて理解・把握できますが作ってない方はエラーが発生したらすぐに原因を理解するのは難しいです。

その中でも今回は「実行時エラー1004」の中の「指定された値は境界を超えています」
発生する原因とエラーの対策について説明したいと思います。

同様のエラーが発生した場合には是非参考にしてみてください。
それでは見ていきましょう。




⬛︎「指定された値は境界を超えています」のエラーの原因について

まず、「指定された値は境界を超えています」のエラーが発生する原因から見ていきましょう。

現在確認できる原因としては下記の通りです。

①色を変える際のSchemeColorの指定に不備がある
②保護したシートへの写真・図の貼り付け

※確認できている原因を挙げています。
上記以外で発生の原因がある場合はコメントしていただけたら幸いです。

では各原因についてみていきましょう。

⬛︎原因①:色を変える際のSchemeColorの指定に不備がある

・原因の内容

SchemeColorとはオブジェクトの配色の色を変更する際に使用します。
SchemeColorは「1から80」で指定します。

では見本を見てみましょう。

Sub 図に色をつける()
ActiveSheet.Shapes("見本図").Fill.ForeColor.SchemeColor = 5
End Sub

見本のプログラムは「見本図」と言う名前をつけた図の
色をSchemeColorで変更するプログラムです。

今回は「SchemeColor=5」で指示しています。
では実行してみます。結果はこのようになりました。

図が黄色に変化してますね。

では「SchemeColor=81で再度実行したいと思います。
プログラムはこちらです。

Sub 図に色をつける()
ActiveSheet.Shapes("見本図").Fill.ForeColor.SchemeColor = 81
End Sub

では実行してみましょう。

「指定された値は境界を超えています」というエラーが発生しました。

「SchemeColor」の前提条件として「1から80」となってます。
しかし今回は「81」と、条件以外の数値であることから
「指定された値は境界を超えています」というエラーが発生した仕組みになっています。

・対策方法

こちらの対策は単純です。
「SchemeColor」を使用する場合は「1から80」までの数値にしてください。

⬛︎原因②:保護したシートへの写真・図貼り付け

・原因の内容

つぎに保護したシートへの写真・図の貼り付け時に発生するパターンを見ていきましょう。

見本のプログラムを用意しました。
プログラムは下記の通りです。

Sub 写真の貼り付け()

Set OBJSHAPE = ActiveSheet.Shapes.AddPicture( _
          Filename:="C:\検証ファイル\見本写真.jpg", _
          LinkToFile:=False, _
          SaveWithDocument:=True, _
          Left:=ActiveSheet.Range("E7").Left, _
          Top:=ActiveSheet.Range("E7").Top, _
          Width:=ActiveSheet.Range("E7").Width, _
          Height:=ActiveSheet.Range("E7").Height) '貼り付け
End Sub

プログラムの内容として「Cドライブの検証ファイル」というフォルダに保存してある「見本写真.jpg」という写真を「E7」に貼り付けるプログラムになっています。

では通常通り実行してみます。
結果はこのようになりました。

「E7」に写真を貼り付けれていますね。

では本題です。

貼り付け先のアクティブシートに保護をかけた状態でプログラムを実行してみます。
結果はこのようになりました。

「指定された値は境界を超えています」というエラーが発生しました。

・対策方法

こちらは貼り付け先のシートに保護が掛かっている可能性があるので
保護を解除して、実行する必要があります。

通常通り「校閲」タブから「シートの保護」状態であるか確認する方法もありますが、
シートの保護をプログラムで実行している場合はActiveSheet.Unprotect
マクロから保護の解除をする方法もあります。

シートの保護・解除をマクロで行う方法についてはこちらから☟

【マクロVBA㊲】シートの保護・解除全集!アクティブ・対象・全シートやパスワードを含めた保護・解除 ► 独学エクセル塾 (dokugakuexcel.com)

場面に合わせて使い分けてください。

⬛︎公式の説明

わかりやすいように説明したため公式と使用する語句が異なりますが
マイクロソフト公式の説明については下記のリンクを参照してください。☟

マクロで図形の塗りつぶしを行うと 「指定された値は境界を越えています」 のエラーになります – Microsoft コミュニティ

⬛︎まとめ

いかがだったでしょうか。
「指定された値は境界を超えています」というエラー名だけでは
なにが原因か理解しにくいですが
本記事を参考にして解決いただけたら嬉しいです。

 

是非参考にしてみてください。
それでは次回の記事でお会いしましょう。

モバイルバージョンを終了