在VBA中粘贴增量值

时间:2018-11-28 08:43:52

标签: excel vba

如何在VBA中运行循环,以使序列看起来像绿色,粉红色?

因为当我使用此代码时,实际上只是粘贴所有数字1.而不增加。

ThisWorkbook.Sheets("Main").Range("E2:E" & iLast).FillDown

enter image description here

3 个答案:

答案 0 :(得分:0)

这可能不是最干净的方法,但可以解决问题。

Sub InsertSequenceAndColours()
    Dim ws As Worksheet
    Dim rng As Range
    Dim iLast As Integer
    Dim i As Integer
    Dim iSeq As Integer
    Dim iColRGB(2, 3) As Integer
    Dim iIncremColour As Integer 'used to determine the colour to use
    Dim iColour As Integer

    'set RGB Colours; change as needed
    'colour 0 (green)
    iColRGB(0, 1) = 146
    iColRGB(0, 2) = 208
    iColRGB(0, 3) = 80
    'colour 1 (pink)
    iColRGB(1, 1) = 255
    iColRGB(1, 2) = 225
    iColRGB(1, 3) = 236

    'change to 0 if you want to start with colour 1 (pink)
    iIncremColour = 1


    'declare worksheet to work on
    Set ws = ThisWorkbook.Worksheets(Sheet1.Name)

    With ws
        'find last row
        iLast = .Cells(.Rows.Count, "C").End(xlUp).Row

        'loop through column C
        For i = 2 To iLast
            iSeq = iSeq + 1
            If .Cells(i, 3).Value <> .Cells(i - 1, 3).Value Then
                iSeq = 1
                iIncremColour = iIncremColour + 1
            End If

            'assign Seq. No. to cell (column E)
            .Cells(i, 5).Value = iSeq

            'find if iIncremColor is odd or even. output: 0 or 1
            iColour = iIncremColour Mod 2

            'assign colour to col C D E
            .Range(Cells(i, 3), Cells(i, 5)).Interior.Color = _
                    RGB(iColRGB(iColour, 1), iColRGB(iColour, 2), iColRGB(iColour, 3))
        Next i
    End With
End Sub

通过找到第一次出现的“否”(Col C)来找出Seq“ 1”(Col E);序列“ 2、3”只是增量的(因此它也可以在3个以上的事件中起作用)。 颜色相同。对于每个“ Seq 1”,它增加一个数字。通过检查这个数字是奇数还是偶数来分配一种颜色。

请注意,我使用工作表代号来工作(如果您不熟悉它,请用google搜索),我强烈建议您这样做,因为即使您决定在excel中更改工作表的名称也可以使用。 当VBA请求使用工作表名称或索引时,可以使用codename.Namecodename.Index来欺骗它。

答案 1 :(得分:0)

通过数组进行访问

您可以填充一个数组并将其写回到您的目标范围:

Sub FlexibleRange()
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Main")    ' << change to your     sheet name
Dim start As Long, last As Long, i As Long                       ' declare variables
start = 2: last = 100                                            ' <~~ change to your individual rows
Dim v: ReDim v(start To last, 1 To 1)                            ' variant datafield array, counter

For i = start To last
    v(i, 1) = (i - start) Mod 3 + 1                              ' assign values
Next i 

ws.Range("E" & start & ":E" & last) = v                          ' write numbers to column E
End Sub

答案 2 :(得分:0)

我必须解决它。

我使用此公式

=MOD(ROW()-2,3)+1.

谢谢大家。感谢您的帮助。 <3