「RangeオブジェクトはどうしてIs演算子で比較することができないのでしょうか?」といった趣旨のご質問をいただきました。Worksheetオブジェクトの場合は、Is演算子で比較・判定ができます。以下のマクロを、一番左のワークシートがアクティブな状態で実行するとメッセージボックスにはTrueと表示され、一番左のワークシートがアクティブでなければFalseが表示されます。Subこのことを利用して、例えば、一番左のシート以外のシートに処理するといった条件分岐を行うこともできます。ところがRangeオブジェクトの場合、以下のようなマクロを、A1セルがアクティブなときに実行しても、メッセージボックスにはFalseが表示されます。Subこれは何故なのかというのが、ご質問の趣旨です。結論から言うと、Rangeオブジェクトは以下のような動きをするためです。▼RangeオブジェクトがIs演算子で比較できない理由Rangeオブジェクトは取得されるごとに違うメモリアドレスに格納されるため実際に簡単なマクロを作って確認しましょう。Worksheetオブジェクトのアドレスを確認するサンプルマクロまずは、一番左のワークシートがアクティブな状態で、以下のマクロを実行してみてください。Subメッセージボックスには同じ数字が4つ並ぶはずです。ObjPtr関数は、オブジェクトのメモリアドレスを返す関数です。ActiveSheetそれぞれのオブジェクト変数が参照しているメモリアドレスを、ObjPtr関数で取得してメッセージボックスに表示しています。_ObjPtr(s4)Worksheetオブジェクトは、どのオブジェクト式、どのプロパティでも、何回取得しても、同じアドレスに格納されるということを表しています。Rangeオブジェクトのアドレスを確認するサンプルマクロ次に、A1セルがアクティブな状態で、以下のマクロを実行してみてください。Sub異なる4つの数字がメッセージボックスに表示されます。ActiveCellどれも同じA1セルを返すはずのオブジェクト式です。Range("A1")の部分です。r1・r2とも、RangeプロパティでRangeオブジェクトを取得しているにも関わらず、ObjPtr関数は異なる値を返してきます。Rangeオブジェクトは、同じプロシージャの実行中であっても、取得されるごとに別のメモリ領域に格納されるということです。Is演算子は、メモリアドレスが同じかどうかによって比較を行う演算子なのでしょう。Range("A1")であってもFalseを返し、RangeオブジェクトをIs演算子で比較することができないのでしょう。Rangeオブジェクトの判定を行うにはこのようにRangeオブジェクトの場合はIs演算子で比較・判定を行うことができませんから、例えば、以下のマクロのような判定をする必要があります。Officeの使い方などを紹介し続け(2012年頃からはVBA関連記事が多め)、毎日5万人の方にご覧いただいています。