- ベストアンサー
「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に格納したいです。 解決策をよろしくお願いします。
- みんなの回答 (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 を加えたものを、インスタンスと言います。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
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
お礼
ありがとうございます。参考になりました。
- okormazd
- ベストアンサー率50% (1224/2412)
>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がなくても動作します。
お礼
普通の変数とは違うのですね。 setの使う意味がわかりました。 どうもありがとうございました。
- kmetu
- ベストアンサー率41% (562/1346)
Set R = ActiveCell にしてください。
お礼
解決しました。どうもありがとうございました。
お礼
どうもありがとうございました。 以後小文字で変数名を付けるようにします。