- ベストアンサー
エクセルVBAを使って範囲の中でワースト5に色を付けたい
B2:AF2に値があり、その中で値の「ワースト5」を色で示したいと 思いますが、どのようなコードになるでしょうか? 色は5色違っていれば何色でも構わないです。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
何をもって「ワースト5」とするのか不明ですが、一例としてとりあえず対象が数値で、小さい方から5つ選んでセルに着色するならこんな感じでしょうか。 Sub test01() Dim Rng As Range, c As Range Dim i As Integer Dim x Set Rng = Range("B2:AF2") Rng.Interior.ColorIndex = xlNone For i = 1 To 5 x = Application.WorksheetFunction.Small(Rng, i) Set c = Rng.Find(What:=x, LookIn:=xlValues, LookAt:=xlWhole) c.Interior.ColorIndex = i + 3 Set c = Nothing Next i Set Rng = Nothing End Sub
その他の回答 (2)
- zap35
- ベストアンサー率44% (1383/3079)
>どのようなコードになるでしょうか? 何がわからないのでしょう? 「ワースト5」の求め方? 色の変え方? 具体的ではないので回答もしにくいですね。それとも丸投げ質問でしょうか とりあえずサンプルマクロです。シート名右クリック→コードの表示で開く画面に貼り付けてください。シートの値が変われば色が変わるはずです。「ワースト」が数値の大きい方か、小さい方かも明示されていないので小さい方をワーストにしました。違うならご自身で修正してください Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range If Not Intersect(Target, Range("A2:AF2")) Is Nothing Then Range("A2:AF2").Interior.ColorIndex = xlNone For Each r In Range("A2:AF2") If Len(r.Value) > 0 And IsNumeric(r.Value) Then Select Case Application.Rank(r.Value, Range("A2:AF2"), 1) Case Is = 1 r.Interior.ColorIndex = 3 Case Is = 2 r.Interior.ColorIndex = 7 Case Is = 3 r.Interior.ColorIndex = 6 Case Is = 4 r.Interior.ColorIndex = 4 Case Is = 5 r.Interior.ColorIndex = 5 End Select End If Next r End If End Sub
お礼
ありがとうございました。
- hallo-2007
- ベストアンサー率41% (888/2115)
ワースト5とは、数値が小さいほうから5ということで宜しいでしょうか。 ワークシート関数のRANK関数をVBAで利用した例です。 Sub Macro1() Range("B2:AF21").Select For Each r In Selection Select Case Application.WorksheetFunction.Rank(r, Selection, 1) Case 1 r.Interior.ColorIndex = 3 Case 2 r.Interior.ColorIndex = 4 Case 3 r.Interior.ColorIndex = 5 Case 4 r.Interior.ColorIndex = 6 Case 5 r.Interior.ColorIndex = 7 End Select Next r End Sub
お礼
ありがとうございました。
お礼
ありがとうございました。