![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
セルの入力数値によってセルの塗りつぶし色が決まるコードを自作してみました。
0 =< x < 2 : 赤
2 =< x < 4 : 青
4 =< x < 6 : 黄
6 =< x < 8 : 黄緑
8 =< x < 10: ピンク
それ以外 : 塗りつぶしなし
なんとなくCaseの使い方が正確ではないような気もしますが。。。
ここで困ったことがおきました。手動で数字を入力すると、一応意図したとおりにセルの塗りつぶし色が反映されます。しかし、一旦塗りつぶされたセルの数値を消去しても、塗りつぶしなしとはならずに赤くなってしまいます。
また、対象外のセルから数字を一つコピーして対象セルに貼り付けると、意図したとおりに色が反映されます。しかし、二つ以上のセルをコピーして貼り付けようとすると、実行エラー'13'型が一致しません、というエラーが出てしまいます。
原因が分かりましたらご教示いただけると幸いです。
---
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column >= 1 And Target.Column <= 10 Then
If Target.Row >= 1 And Target.Row <= 10 Then
Select Case Target.Value
Case 0 To 2
Target.Interior.ColorIndex = 3
Case 2 To 4
Target.Interior.ColorIndex = 5
Case 4 To 6
Target.Interior.ColorIndex = 6
Case 6 To 8
Target.Interior.ColorIndex = 4
Case 8 To 10
Target.Interior.ColorIndex = 7
Case Else
Target.Interior.ColorIndex = 2
End Select
End If
End If
End Sub
---
No.1ベストアンサー
- 回答日時:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Object
For Each Cell In Target.Cells
If Cell.Value <> vbNullString Then
If Cell.Column >= 1 And Cell.Column <= 10 Then
If Cell.Row >= 1 And Cell.Row <= 10 Then
Select Case Cell.Value
Case 0 To 2
Cell.Interior.ColorIndex = 3
Case 2 To 4
Cell.Interior.ColorIndex = 5
Case 4 To 6
Cell.Interior.ColorIndex = 6
Case 6 To 8
Cell.Interior.ColorIndex = 4
Case 8 To 10
Cell.Interior.ColorIndex = 7
Case Else
Cell.Interior.ColorIndex = 2
End Select
End If
End If
Else
Target.Interior.ColorIndex = xlColorIndexNone
End If
Next
End Sub
'だとどう?
'参考資料
'http://msdn2.microsoft.com/en-us/library/aa21419 …
'http://www.mrexcel.com/archive2/72800/84449.htm
さっそくのアドバイスありがとうございました。希望する処理が実行できました。また参考資料として事例満載のサイトのご紹介ありがとうございました。英語は得意ではないのですが、頑張って勉強しようと思います。
No.3
- 回答日時:
select Case での値域の設定ですが
case 0 to 2 とすると 0以上2以下といった具合になります
セルに入力されるデータが整数であるなら
case 0 to 1 とした方がいいでしょう
また 何も入力されていないセルは 0と評価されるので
入力されていたセルのデータを削除しても『赤』になるとお思います
コレの回避は
case "" を case 0 to 1 の前に作成した方がいいでしょう
2つ以上のセルを選択して 貼り付けなどを行うと
Changeイベント引数 Targetに変更が生じたセル情報が設定されてくるので
Target.Column や Target.Rowなどがそのままでは値を返せないのでエラーになるのでしょう
この色設定のマクロを Changeイベントの外に追い出して
Changeイベント内は Targetを For Eachループでまわすといった工夫が必要でしょう
たとえば
Sub changeColor(target As Range)
If target.Column >= 1 And target.Column <= 10 Then
If target.Row >= 1 And target.Row <= 10 Then
Select Case target.Value
Case ""
target.Interior.ColorIndex = 2
Case 0 To 1.9
target.Interior.ColorIndex = 3
Case 2 To 3.9
target.Interior.ColorIndex = 5
Case 4 To 5.9
target.Interior.ColorIndex = 6
Case 6 To 7.9
target.Interior.ColorIndex = 4
Case 8 To 9.9
target.Interior.ColorIndex = 7
Case Else
target.Interior.ColorIndex = 2
End Select
End If
End If
End Sub
Private Sub Worksheet_Change(ByVal target As Range)
Dim r As Range
If target.Cells.Count = 1 Then
changeColor target
Else
For Each r In target
changeColor r
Next
End If
End Sub
といった具合です
# 字下げは全角スペースですのでエラーの場合は置換してください
さっそくのアドバイスありがとうございました。希望する処理が実行できました。オリジナルコードの分析は大変参考になります。勉強させていただきます。
No.2
- 回答日時:
#1です。
Target.Interior.ColorIndex = xlColorIndexNone
よりも
Cell.Interior.ColorIndex = xlColorIndexNone
の方が自然だなあ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) Worksheet_Change 4 2023/03/12 21:54
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) エクセル VBAについて 2 2022/05/16 16:33
- Visual Basic(VBA) vbaでセルに入力したときに,その横にあるセルを保護し入力不可にするマクロを作りたいです。 2 2022/04/24 20:59
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Excel(エクセル) エクセルの自動更新のタイミングについて 1 2022/07/20 16:12
- Excel(エクセル) Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて 2 2022/11/15 16:14
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルテキストボックスの文...
-
Windowsで動くVBAがmacOSで動か...
-
Excelのセル内にある図形を削除...
-
エクセルVBA セル選択後にカレ...
-
EXCELマクロ 保護されているシ...
-
ハイパーリンクされているファ...
-
Swing 編集不可でも選択可能なJ...
-
(VBA)アクティブセルを起点に...
-
ダブルクリックすると現在の時...
-
複数の画像をVBAでエクセルに貼...
-
アクティブセルの行のセルを複...
-
Excel VBAで質問です
-
VBAについて教えてください。 E...
-
入力数値によってセル色が決ま...
-
VBA セルに合わせて移動するが...
-
エクセル: セルの枠を超えて表示
-
エクセル:マクロ「Application...
-
エクセルでの計算式で求められ...
-
セルの数を求めたい
-
エクセルのセル内に全角数字を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データが入力されている隣のセ...
-
EXCELマクロ 保護されているシ...
-
エクセルテキストボックスの文...
-
VBAで、貼り付け禁止命令を実現...
-
ハイパーリンクされているファ...
-
VBAで丸をつけたいです。
-
メッセージを1度だけ表示したい。
-
エクセルVBA(実行時エラー438...
-
ダブルクリックすると現在の時...
-
VBA セルに合わせて移動するが...
-
(VBA)アクティブセルを起点に...
-
Jtableの特定のセルの背景色や...
-
Windowsで動くVBAがmacOSで動か...
-
エクセルVBA セル選択後にカレ...
-
Excelのセル内にある図形を削除...
-
Excel VBA ダブルクリックで入...
-
セル色を5秒間隔で変える
-
StringGridでの文字入力制限
-
【VBA】参照値を1ずつ増やして...
-
マクロでのカーソル移動
おすすめ情報