• ベストアンサー

「R = ActiveCell」がエラーになる。

エクセルvbaです。 下記のコードのどこがおかしいのか教えてください。 Sub Macro1() Dim R As Range R = ActiveCell If R Like "*1*" Then MsgBox "1があります" End If End Sub アクティブセルに「1」があれば、 MsgBoxを表示したいのですが うまくいきません。 オブジェクト変数または With ブロック変数が設定されていません。(Error 91) というエラーになります。 If ActiveCell Like "*1*" Then ではなく、一度、変数Rに格納したいです。 解決策をよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 ×Dim R As Range '(小文字のほうが良いです。基本的には、大文字は定数です。) すでに回答が出ていますが、Like 演算子を使って、文字の比較なら、比較の対象は、String 型のはずですね。 たとえば、 Dim v As String それと、他の回答者さんの回答に反論を立てて申し訳ありませんが、Range クラスのDefault メンバは、Value とか、Item ではありません。 Default メンバは、   a = Range("A1").[_Default]   a = Range("A1").[_Default](1, 1).Value _Default は、オブジェクトブラウザで、非表示メンバを表示させて始めて出てきます。 ------------------------------------------- Property _Default([RowIndex], [ColumnIndex])   Excel.Range の既定メンバ オブジェクトプラウザより ------------------------------------------- .Value プロパティは付けたほうがよいです。オートメーションなど特殊な場合はエラーが返ります。また、インスタンスとは、クラスを雛形にして、実体化させたものを言います。Set r = ActiveCell は、単にオブジェクトを変数に代入しただけです。たとえば、ワークシートの追加や、UserForm を加えたものを、インスタンスと言います。

ijuhyg
質問者

お礼

どうもありがとうございました。 以後小文字で変数名を付けるようにします。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

Sub Macro1() Dim R As String R = ActiveCell MsgBox R If R Like "*1*" Then MsgBox "1があります" End If End Sub Stringかどうか判からない(両方ある)時は Dim R as Variant など間ゲルトよい。 ーー Dim R As Range だとRはオブジェクトなので Set R=activeCell のようにする。 値はR.Value

ijuhyg
質問者

お礼

ありがとうございます。参考になりました。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

>Dim R As Range で、RはRangeオブジェクトとして宣言してます。単なる変数とは違います。オブジェクトにはプロパティがあります。そのプロパティを操作するコードですね。 オブジェクト変数を割り当てる(インスタンスをつくる)にはSetステートメントを使います。 Set R = ActiveCell です。 これで、Rのプロパティを使えるようになります。 R.value などです。 Sub Macro1() Dim R As Range Set R = ActiveCell If R.Value Like "*1*" Then MsgBox "1があります" End If End Sub としましょう。 なお、 R.Value はRはデフォルトでValueプロパティなので、Valueがなくても動作します。

ijuhyg
質問者

お礼

普通の変数とは違うのですね。 setの使う意味がわかりました。 どうもありがとうございました。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

Set R = ActiveCell にしてください。

ijuhyg
質問者

お礼

解決しました。どうもありがとうございました。

関連するQ&A