#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? Это не имеет большого значения, есть несколько способов решения.
- Найдите свой последний номер строки (который вы сделали как
lRow
) - Итерация,
for i = 2 to lRow
которая будет проходить от верхней строки с данными до последней - Сделайте что-нибудь здесь, например
Range("F"amp;i) = Range("E"amp;i)*10000
, предположив, что это взаимосвязь илиRange("F"amp;i) = Range("F"amp;i-1) 10000
next i
он будет просто перебирать ячейку за ячейкой, выполнять вычисления и двигаться дальше.
Возможно, вам потребуется сделать его более надежным, если у вас есть скрипт, который перемещается по нескольким листам или книгам, чтобы диапазон, ячейка или любые ссылки, которые вы используете, были правильными.
Не знаю, насколько это будет быстро по сравнению с функцией серии заполнения, но она не выглядит по номинальной стоимости, как будто это было бы слишком медленно.
дайте мне знать, как у вас дела!
Роб С
Комментарии:
1. Ах, да, F — это просто E * 10000, но в моей голове это не приходило мне в голову. Спасибо за вашу помощь!