Серия заливок Excel VBA

#excel #vba

#excel #vba

Вопрос:

Мне нужно заполнить диапазон от 10 000 до конца столбца. У меня есть переменная lRow, которая находит последнюю строку, а затем у меня есть цикл IF, который заполняет диапазон так, как мне нужно. Часть очистки содержимого заключается в удалении всех предыдущих значений и заполнении новых. Диапазон («E2»).Значение = 1 используется для начала серии.

Проблема в том, что я не могу заставить его заполнить диапазон («F2: F» amp; lRow) с шагом 10000. Макрос просто заполняется с шагом, равным 1. Есть идеи?

Я пробовал записывать макросы, но это никогда не работает правильно. Он должен быть динамичным, поскольку список будет расти со временем.

Вот как это должно выглядеть: введите описание изображения здесь

 Sub MLOS_PriorityTable_StepValues()

Dim ws As Worksheet
Dim lRow As Long
Dim featOrder As Range
Dim Style As Range
Dim dataRange As Range
Dim currentArea As Range


Set ws = ActiveSheet
Set featOrder = ws.Range("A1:ZZ1").Find("FeatureOrder")
Set Style = ws.Range("A1:ZZ1").Find("Style")


Range("E2:E1000").ClearContents
Range("F2:F1000").ClearContents


Range("E2").Value = 1
Range("F2").Value = 10000


    lRow = Cells(Rows.Count, Style.Column).End(xlUp).Row

    On Error Resume Next
    Set dataRange = Range("E2:E" amp; lRow).SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0

    If Not dataRange Is Nothing Then
        For Each currentArea In dataRange.Areas
            With currentArea
                With .Offset(-1, 0).Resize(.Rows.Count   1)
                    .Cells(1).AutoFill Destination:=.Cells, Type:=xlFillSeries
                End With
            End With
        Next currentArea
    End If


    On Error Resume Next
    Set dataRange = Range("F2:F" amp; lRow).SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0

    If Not dataRange Is Nothing Then
        For Each currentArea In dataRange.Areas
            With currentArea
                With .Offset(-1, 0).Resize(.Rows.Count   1)
                    .Cells(1).AutoFill Destination:=.Cells, Type:=xlFillSeries
                End With
            End With
        Next currentArea
    End If


End Sub
 

Ответ №1:

Является ли результат F просто E * 10000? Это не имеет большого значения, есть несколько способов решения.

  1. Найдите свой последний номер строки (который вы сделали как lRow )
  2. Итерация, for i = 2 to lRow которая будет проходить от верхней строки с данными до последней
  3. Сделайте что-нибудь здесь, например Range("F"amp;i) = Range("E"amp;i)*10000 , предположив, что это взаимосвязь или Range("F"amp;i) = Range("F"amp;i-1) 10000
  4. next i

он будет просто перебирать ячейку за ячейкой, выполнять вычисления и двигаться дальше.

Возможно, вам потребуется сделать его более надежным, если у вас есть скрипт, который перемещается по нескольким листам или книгам, чтобы диапазон, ячейка или любые ссылки, которые вы используете, были правильными.

Не знаю, насколько это будет быстро по сравнению с функцией серии заполнения, но она не выглядит по номинальной стоимости, как будто это было бы слишком медленно.

дайте мне знать, как у вас дела!

Роб С

Комментарии:

1. Ах, да, F — это просто E * 10000, но в моей голове это не приходило мне в голову. Спасибо за вашу помощь!