プロが教えるわが家の防犯対策術!

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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/01/14 20:16

>どのようなコードになるでしょうか?


何がわからないのでしょう? 「ワースト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
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/01/14 20:16

ワースト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
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/01/14 20:15

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