如何根据第1列中的值更改行颜色?

时间:2017-01-20 21:59:39

标签: excel vba

我想知道如何根据第1列中的值更改多行的行颜色。假设在A1到A5中我的值为“100”而A6到A10我的值为“150”,我希望能够将第1行到第5行的颜色更改为蓝色,因为A1到A5的值为“100”,依此类推,A6到A10为另一种颜色,因为值为“150”。如果值相同,我需要将颜色更改为相同。我的代码可以工作,但每次值改变时,它只会变为所有蓝色而不是不同的颜色。

编辑答案:

Dim i As Long
Dim holder As String
Set UsedRng = ActiveSheet.UsedRange

FirstRow = UsedRng(1).Row
LastRow = UsedRng(UsedRng.Cells.Count).Row
r = WorksheetFunction.RandBetween(0, 255)
g = WorksheetFunction.RandBetween(0, 255)
b = WorksheetFunction.RandBetween(0, 255)
holder = Cells(FirstRow, 1).Value
For i = FirstRow To LastRow    '<--| loop through rows index
    myColor = RGB(r, g, b)
    If Cells(i, 1).Value = holder Then
        Cells(i, 1).EntireRow.Interior.Color = myColor
    Else
        holder = Cells(i, 1).Value
        r = WorksheetFunction.RandBetween(0, 255)
        g = WorksheetFunction.RandBetween(0, 255)
        b = WorksheetFunction.RandBetween(0, 255)
        Cells(i, 1).EntireRow.Interior.Color = RGB(r, g, b)
 End If
Next i

4 个答案:

答案 0 :(得分:1)

你可以从这段代码开始

Sub main()
    Dim myCol As Long, i As Long

    For i = 1 To 10 '<--| loop through rows index
        With Cells(i, 1) '<--| reference cell at row i and column 1
            Select Case .value
                Case 100
                    myCol = vbBlue
                Case 150
                    myCol = vbRed
                Case Else
                    myCol = vbWhite
            End Select
            .EntireRow.Interior.Color = myCol
        End With
    Next i
End Sub

答案 1 :(得分:0)

这是如何检查单元格A1到A10的值为100,如果所有单元格都包含100,则用蓝色绘制从1到10的所有行。

$content_array = explode("\n", $file_content);

您可以为下一个设置行使用相同的逻辑。

我没有提供整个代码的原因是你可以自己练习。

答案 2 :(得分:0)

根据您对我的评论的回复,我假设您既不知道第一列中的确切值,也不知道有多少不同的值。

为了使我的答案不太复杂,我进一步假设第一列只包含非负数。如果不是这种情况,您只需将列中的数据类型映射到该数字范围。

根据上面的ssumption,您可以使用以下代码。

Public Sub SetRowColorBasedOnValue()
    Dim firstColumn As Range
    Set firstColumn = ActiveSheet.UsedRange.Columns(1)

    Dim minValue As Double
    Dim maxValue As Double

    minValue = Application.Min(firstColumn)
    maxValue = Application.Max(firstColumn)

    Dim cell As Range
    Dim shade As Double
    For Each cell In firstColumn.Cells
        If Not IsEmpty(cell) Then
            shade = (CDbl(cell.Value2) - minValue) / (maxValue - minValue)
            SetRowColorToShade cell, shade
        End If
    Next
End Sub

Private Sub SetRowColorToShade(ByVal cell As Range, ByVal shade As Double)
    With cell.EntireRow.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent2
        .TintAndShade = shade
        .PatternTintAndShade = 0
    End With
End Sub

不可否认,颜色可以非常相似。如果您使用的是Excel 2013或更高版本,则可以使用cell.EntireRow.Interior.Color = HSL(hue,saturation,chroma)而不是设置色调和阴影来根据值更改色调。这提供了更多不同的颜色。

答案 3 :(得分:0)

我建议在值更改循环时执行随机颜色:

var mapped = {};

结果如下:

enter image description here