• ベストアンサー

エクセルVBAを使って範囲の中でワースト5に色を付けたい

B2:AF2に値があり、その中で値の「ワースト5」を色で示したいと 思いますが、どのようなコードになるでしょうか? 色は5色違っていれば何色でも構わないです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

何をもって「ワースト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

4k3s4r3
質問者

お礼

ありがとうございました。

その他の回答 (2)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

>どのようなコードになるでしょうか? 何がわからないのでしょう? 「ワースト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

4k3s4r3
質問者

お礼

ありがとうございました。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

ワースト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

4k3s4r3
質問者

お礼

ありがとうございました。

関連するQ&A

専門家に質問してみよう