根据列C中的值更改然后在列B中将行着色到值的末尾

时间:2016-09-28 20:23:51

标签: excel-vba vba excel

我不太了解VBA。 Ivesleo回答了一个名为“根据价值变化整理整个专栏”的帖子。 Link to Shade Row Post

我使用了他的代码并且它有效但我不知道如何更改代码以根据我的需要修改代码。

  1. 当我们在某些城市安排项目时(C栏),我有几周的专栏(B栏)。现在,代码突出显示了列B或(第2列/周列)中每个更改的行。我需要代码来记录那个城市中每周的变化,所以当我们去另一个城市时,比如Piley,它不会突出显示W1N4 for Piley b / c它首先注意到我们在一个新的城市。有点像2级的自定义排序,城市第一,然后是一周。我不希望它根据城市的变化突出显示,只需注意城市有变化,然后根据周列值的变化在该城市内突出显示。
  2. 你如何将行遮挡到该行数据的末尾?我试过End(xlRight).Select,End(xlLeft).Select,和End(xlUp).Row.Select但是它们不起作用。
  3. 颜色是他组成的吗?我不明白它的作用以及Excel如何知道如何处理它?再说一次,我是初学者。谢谢您的帮助。
  4.   

    周/城市

    W1N1    Silverton
    W1N1    Silverton
    W2N3    Silverton
    W1N4    Silverton
    W1N4    Piley
    
        Sub color()
        'Replace the 2 values of G = and C= by the number of the column containing _
        'the values being referenced.
        Dim g As Long
        Dim c As Integer
        Dim colorIt As Boolean
    
        g = 2
        c = 2
        colorIt = True
    
        Do While Cells(g, c) <> ""
            test_value = Cells(g, c)
            Do While Cells(g, c) = test_value
                If colorIt Then
                    Cells(g, c).EntireRow.Select
                    Selection.Interior.ColorIndex = 15
                Else
                    Cells(g, c).EntireRow.Select
                    Selection.Interior.ColorIndex = x1None
                End If
                g = g + 1
            Loop
            colorIt = Not (colorIt)
        Loop
    End Sub
    

1 个答案:

答案 0 :(得分:1)

以下代码专为您的情况量身定制:

Sub color()
    Dim r As Long
    Dim colourIt As Boolean
    Dim colour As XlColorIndex

    colourIt = False

    With ActiveSheet
        r = 2  ' First row of data

        Do While .Cells(r, "B").Value <> ""
            'See if value has changed
            If .Cells(r, "B").Value <> .Cells(r - 1, "B").Value Or _
               .Cells(r, "C").Value <> .Cells(r - 1, "C").Value Then
                colourIt = Not colourIt
            End If

            'Determine which colour to use on this row
            If colourIt Then
                colour = 15
            Else
                colour = xlColorIndexNone
            End If
            'Apply the colouring
            .Range(.Cells(r, "B"), .Cells(r, .Cells(r, .Columns.Count).End(xlToLeft).Column)).Interior.ColorIndex = colour

            'Point to the next row of data
            r = r + 1
        Loop
    End With
End Sub

注意:变量colourIt(是colorIt,但我是澳大利亚人,所以我将使用英文拼写!!)只是一个布尔变量,因此可以采用值TrueFalse。每次测试标准发生变化时,代码都会在两个可能的值之间切换(使用代码colourIt = Not colourIt)。

海报编辑:非常感谢你。我只想在这里添加如何更改它以进一步适应我的情况。我改变它如下:我使用RGB调色板将颜色更改为浅橙色(我猜这就是所谓的)并且我将.Range(.Cells(r,“B”)等更改为.Range(。单元格(r,“A”)等b / c突出显示从B列开始的行与从A列开始的行。

我将在评论中再发帖谢谢。

 'Determine which colour to use on this row
        If colourIt Then
            colour = RGB(252, 228, 214)
        Else
            colour = xlColorIndexNone
        End If
        'Apply the colouring
        .Range(.Cells(r, "A"), .Cells(r, .Cells(r, .Columns.Count).End(xlToLeft).Column)).Interior.color = colour