初心者です。
データの中から、セル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
ご教示頂けると大変助かります。
よろしくお願い致します。
No.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
No.3
- 回答日時:
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
No.2
- 回答日時:
マクロの記録モードで
「条件付き書式」を質問の条件で実行し、記録をとったコードを勉強してください。
いくら>初心者です。といえども、こんなことをしていては、進歩がありません。エクセルの常道を本やWEBで勉強し、その後にさらに自分で工夫しましょう。
その他にRange(”A1:A3”)<3の記法は個々のセルの値を聞くには、ダメです。
Sub test02()
Range("A1:A3") = 7
End Sub
は可能です。
なぜこれができないのという、根本的な点を突いていると思いますが、#1のご回答で説明されていますのでよく読んでください。
エクセルVBAは、エクセルの機能を最大限生かすコードであるべきです。エクセルで便利な機能ががあれば、対応したメソッドやプロパティがどう対応しているか、探しましょう。思いつくままに、IFと代入に還元して、我流でロジックを組み立てて、コードを作っては進歩がありません。
No.1
- 回答日時:
基本的なところから誤解されているようなので、その誤解を解くのは難しいのですが。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBA No.を自動連番で設定をしながらデータ入力をしたい 2 2022/08/03 18:19
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) VBAで列を削除 3 2023/02/01 11:00
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) シフト表のコマで「ブロック」されている前の時間の「出」を同一列の「休」と入れ替えたいがふぇきません。 2 2023/08/02 18:49
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel UserForm の表示位置
-
複数指定セルの可視セルのみを...
-
特定の色のついたセルを削除
-
DataGridViewでグリッド内に線...
-
VBAマクロ実行時エラーの修正に...
-
【VBA】【ユーザーフォーム_Lis...
-
EXCEL VBA 文中の書式ごと複写...
-
Excelで空白セル直前のセルデー...
-
下記のマクロの説明(意味)を...
-
DataGridViewのフォーカス遷移...
-
【ExcelVBA】値を変更しながら...
-
エクセル VBA ボタンをクリック...
-
Excel VBA でFunctionプロシジ...
-
openpyxlでExcelセルをクリック...
-
エクセルVBA 配列からセルに「...
-
データグリッドビューの結合セ...
-
CellEnterイベント仕様について
-
Excel 範囲指定スクショについ...
-
VBA:日付を配列に入れ別セルに...
-
EXCEL VBA 1つのセル内の文字に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
Excel UserForm の表示位置
-
特定の色のついたセルを削除
-
Excelで空白セル直前のセルデー...
-
エクセルVBA 配列からセルに「...
-
【VBA】【ユーザーフォーム_Lis...
-
VBA:日付を配列に入れ別セルに...
-
複数指定セルの可視セルのみを...
-
C# DataGridViewで複数選択した...
-
【Excel VBA】マクロで書き込ん...
-
データグリッドビューの結合セ...
-
DataGridViewのフォーカス遷移...
-
Excel 範囲指定スクショについ...
-
【Excel VBA】一番右端セルまで...
-
EXCEL VBA 文中の書式ごと複写...
-
【VBA】写真の貼り付けコードが...
-
QRコード作成マクロについて
-
入力規則のリスト選択
-
CellEnterイベント仕様について
-
エクセル、マクロで番号を読込...
おすすめ情報
