ここから本文です

VBA初心者です。 「オブジェクトが必要です」というエラーが 出てしまいます。 ...

yokasyo25さん

2011/3/3008:33:47

VBA初心者です。
「オブジェクトが必要です」というエラーが
出てしまいます。
解決方法を教えてください。

VBA初心者です。
「オブジェクトが必要です」というエラーが
出てしまいます。
解決方法を教えてください。

A_______B________C_______D
_________6.00____6.05____6.10
6.10_______________________(赤色)

上記、表のように、A2の値が、B1からD1の値と
等しくなったときに、該当したセルの下のセルを
赤く塗りつぶし、それ以外は、白に塗りつぶす。
といった内容でVBAを組もうかと考えています。
とりあえず、いろいろご教授頂き、
下記のように、組みましたが、
表題の通り、エラーとなってしまいます。
再度、ご教授下さい。
宜しくお願い致します。

Sub test3()

Dim nt1 As Range
Set nt1 = Offset.ActiveCell.Offset(1, 0).Select

Select Case Range("A2")
Case Range("B1"), Range("C1"), Range("D1")
nt1.Interior.ColorIndex = 3 '赤
Case Else
nt1.Interior.ColorIndex = xlNone '塗りつぶしなし
End Select

End Sub

閲覧数:
53,887
回答数:
3
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

2011/3/3009:27:15

Set nt1 = Offset.ActiveCell.Offset(1, 0).Select

「Set」は変数にオブジェクトを格納する際に使用します。
オブジェクトを格納する所に、オブジェクトが無いので、
「オブジェクトが必要です」というエラーが出ます。
ここの右辺での「Select」という命令は、「セルを選択する」なので
カーソルが「ActiveCell.Offset(1, 0)」に移動するだけで、オブジェクトを
参照していません。
さらに、「Offset.ActiveCell.Offset(1, 0).Select」の先頭にある
「Offset」は使い方が間違っています。後ろにある「Offset」の使い方が
正しいです。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_cell.html#offset



Select Case Range("A2")
Case Range("B1"), Range("C1"), Range("D1")
nt1.Interior.ColorIndex = 3 '赤
Case Else
nt1.Interior.ColorIndex = xlNone '塗りつぶしなし
End Select

Select文の構文はあっていますが、
「Case Range("B1"), Range("C1"), Range("D1")」
これでは、質問者さまの意図通り(個別の処理)には向いていないと思います。


質問者さまのコードを参考に作り直すと、下記のようになりました。
Sub test3()

Dim nt1 As Range
Dim c As Range

Set nt1 = Range("B1:D1")

For Each c In nt1
Select Case c.Value
Case Range("A2")
c.Offset(1, 0).Interior.ColorIndex = 3 '赤
Case Else
nt1.Interior.ColorIndex = xlNone '塗りつぶしなし
End Select
Next c
End Sub


結局Select文を使用するメリットがなくなってしましいました。
if文でも良かったかと。

質問した人からのコメント

2011/3/30 10:11:19

ご回答ありがとうございました。
そのままコードを使用させていただきました。
意図通り、上手くいきました。

本当に有難うございました。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

2011/3/3009:47:50

3行目の
Set nt1 = Offset.ActiveCell.Offset(1, 0).Select

Set nt1 = ActiveCell.Offset(1, 0)
ではないでしょうか。

Offset.ActiveCell.Offset(1, 0).Select
(1) (2)
この文の意味は、「現在選択中のRangeオブジェクトをnt1とする。」
というものと、推察をいたします。
(1)のOffsetは、おそらくはお間違えなのだと思います。
(2)のSelect は、「選択する」 という動詞ですので、これもお間違えなのだと思います。

Set命令の右辺値と左辺値は、同じタイプのオブジェクトである必要があります。
エラーの意味は、「指定された右辺は、Rangeオブジェクトでなかった。」というものです。

xls88_1さん

2011/3/3009:24:55

Set nt1 = Offset.ActiveCell.Offset(1, 0).Select

まず、コンパイルエラーになります。
Offset
は何ですか?
変数宣言されていませんし、Offsetプロパティと同じ変数名は拙いです。

ActiveCell
Application.ActiveCell
ActiveWindow.ActiveCell
Application.ActiveWindow.ActiveCell

Set nt1 = ActiveCell.Offset(1, 0).Select
これで、コンパイルエラーは無くなり、「オブジェクトが必要です」というエラーになります。
対策は、文末のSelectを外します。

Set nt1 = ActiveCell.Offset(1, 0)
これで変数nt1にRangeオブジェクトがSetされます。

下記コードを入れれば確認できます。
Msgbox nt1.Address

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。