Вставить инкрементные значения в VBA - PullRequest
0 голосов
/ 28 ноября 2018

Как я могу запустить цикл в VBA, чтобы последовательность выглядела зеленым или розовым цветом?

Потому что, когда я использую этот код, на самом деле просто вставьте все число 1. не увеличивайте.

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

enter image description here

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

Подход через массив

Вы можете заполнить массив и записать его обратно в целевой диапазон:

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
0 голосов
/ 05 декабря 2018

Я должен решить ее.

Я использую эту формулу

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

Спасибо всем вам. Спасибо за вашу помощь.<3 </p>

0 голосов
/ 28 ноября 2018

Это, возможно, не самый чистый способ, но он сделает свое дело.

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

Он обнаруживает Seq "1" (Col E), находя первое вхождение "Нет" (ColС);Последовательности «2, 3» являются просто инкрементными (поэтому он будет работать также с более чем 3 случаями).То же самое с цветом.Для каждого "Seq 1" он увеличивает число;проверив, является ли это число нечетным или даже назначает один или другой цвет.

Обратите внимание, что для работы я использую кодовое имя листа (если вы не знакомы с ним, пожалуйста, запустите его в Google), что я настоятельно рекомендуютак как он будет работать, даже если вы решите изменить имя вашего рабочего листа в Excel.Когда VBA запрашивает работу с именем или индексом листа, вы можете обмануть его, используя codename.Name или codename.Index.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...