重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

初心者です。
データの中から、セルC5からC88の中で数値が300以上はセルを赤に塗りつぶし、250以上300未満は青、200以上250未満は黄色、などとやりたいのですが、if...then...elseステートメントを組んでやってみると「型が一致しません。」となってしまいます。
Sub 選択範囲処理()
Range("c5:c88").Select
If Range("c5:C88") >= 300 Then
Interior.ColorIndex = 3
ElseIf Range("c5:c88") <= 300 And Range("c5:C88") >= 250 Then
Interior.ColorIndex = 5
ElseIf Range("c5:c88") <= 250 And Range("c5:c88") >= 200 Then
Interior.ColorIndex = 6
ElseIf Range("c5:c88") <= 200 And Range("c5:c88") >= 150 Then
Interior.ColorIndex = 20
Else
Interior.ColorIndex = 10
End If
End Sub
ご教示頂けると大変助かります。
よろしくお願い致します。

A 回答 (4件)

基本的には


Range→Cells
for Nextを使うです。

Sub 選択範囲処理()
Dim i As Long

For i = 5 To 88

If Cells(i, 3) >= 300 Then
Cells(i, 3).Interior.ColorIndex = 3
ElseIf Cells(i, 3) <= 300 And Cells(i, 3) >= 250 Then
Cells(i, 3).Interior.ColorIndex = 5
ElseIf Cells(i, 3) <= 250 And Cells(i, 3) >= 200 Then
Cells(i, 3).Interior.ColorIndex = 6
ElseIf Cells(i, 3) <= 200 And Cells(i, 3) >= 150 Then
Cells(i, 3).Interior.ColorIndex = 20
Else
Cells(i, 3).Interior.ColorIndex = 10
End If

Next i

End Sub
    • good
    • 0

Sub 選択範囲処理()


Dim x As Range

For Each x In Range("C5:C88")
With x
Select Case x.Value
Case Is >= 300
.Interior.ColorIndex = 3
Case 250 To 299
.Interior.ColorIndex = 5
Case 200 To 249
.Interior.ColorIndex = 6
Case 150 To 199
.Interior.ColorIndex = 20
Case Else
.Interior.ColorIndex = 10
End Select
End With
Next
End Sub
    • good
    • 0
この回答へのお礼

丁寧に教えてくださって、ありがとうございます。
すごく助かりました。

お礼日時:2006/01/27 11:43

マクロの記録モードで


「条件付き書式」を質問の条件で実行し、記録をとったコードを勉強してください。
いくら>初心者です。といえども、こんなことをしていては、進歩がありません。エクセルの常道を本やWEBで勉強し、その後にさらに自分で工夫しましょう。
その他にRange(”A1:A3”)<3の記法は個々のセルの値を聞くには、ダメです。
Sub test02()
Range("A1:A3") = 7
End Sub
は可能です。
なぜこれができないのという、根本的な点を突いていると思いますが、#1のご回答で説明されていますのでよく読んでください。
エクセルVBAは、エクセルの機能を最大限生かすコードであるべきです。エクセルで便利な機能ががあれば、対応したメソッドやプロパティがどう対応しているか、探しましょう。思いつくままに、IFと代入に還元して、我流でロジックを組み立てて、コードを作っては進歩がありません。
    • good
    • 0

基本的なところから誤解されているようなので、その誤解を解くのは難しいのですが。



Rangeというのは一種の配列みたいなもので、それ単体で扱うことも可能なのですが、その要素を一つ一つ手にとって確認するときはきちんと指定する必要があります。
分かり易く例えると
「1年3組」というグループはそれだけで扱うことは出来ます。1年3組を集合させるとか、1年3組の平均点だとか。1年3組の生徒数とか、担任の先生とかいう情報もありますね。
但し個々の生徒の得点は個々の生徒が持つ情報です。1年3組のある生徒の得点が何点だったかというのを調べる時、1年3組という指定からだけでは分かりません。1年3組の、例えば出席番号だったり名前だったりで個人を指定しないことには得点は調べられません。

つまり
Range("c5:C88") >= 300
という部分は何をしようとしているのかは分かりますが、コード的には1年3組の300以上を抜き出せという意味不明な命令になっているのです。

で個々の生徒を一々指定して判別させるのもこれはまた大変です。クラスの人数が増えれば増えるだけコードも増えることになります。そのためにループ文というのが活用されるのです。これは同じ処理をひたすら繰り返す際に使いますが、VBAの場合のループ構文は「For~Next」となります。
今回のケースでは例えば下記のようにすると個々のセルの値が順番に確認できます。あとはこれを判別させて、ColorIndexを設定しましょう。またその際はIF判別よりもSelectでの判別の方がこのケースではお薦めです。

Dim C As Range
For Each C In Range("C5:C88")
MsgBox (C)
Next C
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!