Страницы: 1
RSS
Как определить последнюю строку с данными, чтобы обработать диапазон в цикле?
 
Суть такова, есть макрос, но моих мозгов хватило только для проверки определенного диапазона, но нужно, чтоб макрос проверял весь столбец до последнего значения, как настроить этот цикл? Код в приложении
 
Цитата
cell.Value = "1"
В ячейке число будет записано текстом?
 
Вообще без разницы, самое главное чтоб записывались данные значения  
 
Анатолий Смирнов, по сути Ваш вопрос не по циклу, а как найти последнюю заполненную ячейку в столбце.
 
Название темы поменял.

Код
Sub Result()
    Dim lRw As Long, lNewVal As Long
    Dim i As Long
    
    With ActiveSheet
        lRw = .UsedRange.Rows.Count + .UsedRange.Row - 1

        For i = 1 To lRw
            lNewVal = 0

            Select Case .Cells(i, 1).Value
            Case Is >= 3000: lNewVal = 1
            Case Is >= 2000: lNewVal = 2
            Case Is >= 1000: lNewVal = 3
            Case Is >= 700: lNewVal = 4
            Case Is >= 500: lNewVal = 5
            Case Is >= 300: lNewVal = 7
            Case Is >= 100: lNewVal = 8
            Case Is >= 50: lNewVal = 10
            Case Is >= 20: lNewVal = 12
            Case Is >= 15: lNewVal = 15
            ' Case Else: lNewVal =  .Cells(i, 1).Value
            End Select
            
            .Cells(i, 1).Value = lNewVal
        Next i
    End With
End Sub

А еще правильнее: значения диапазона записать в массив, обработать и выгрузить обратно на лист.
 
Цитата
Анатолий Смирнов написал:
как настроить этот цикл?
Например так
Код
For Each cell In Range("A1").CurrentRegion.Resize(, 1)
 
Цитата
Юрий М написал:
а как найти последнюю заполненную ячейку в столбце.
У меня есть цикл на проверку определенного столбца, но он в макросе на удаление и адоптировать под этот я не могу ( по не хватке знаний), там он проверяет каждую заполненную ячейку введеного столбца и до конца. Каждый раз количество ячеек будет разное. По этмоу нужно, чтоб он проверял до последней заполненной ячейки.  
 
Я данные не смотрел, но вообще lNewVal нужно бы в цикле обнулить/сбросить
 
vikttur, спасибо вам большое, а то уже голову сломал, нужно что-то полегче выбрать для изучения языка)
 
Цитата
Hugo написал: lNewVal нужно бы в цикле обнулить/сбросить
Да, надо,  т.к. нет проверки на <15. Добавил обнуление (можно без него, раскомментировать Case Else)
А данные и я не видел. нет их в текстовом файле :)

Анатолий Смирнов, а помогал только я?
 
Цитата
vikttur написал:
а помогал только я?
Прошу прощения за мое хамство, ВСЕМ спасибо) Особенно за такой быстрый отклик)
 
Цитата
Hugo написал:
Я данные не смотрел, но вообще lNewVal нужно бы в цикле обнулить/сбросить
а оно там нужно?
По вопросам из тем форума, личку не читаю.
 
Это кусочек перфекционизма. В кажой строке .Cells(i, 1).Value = Х... Не нравится мне так )
 
Цитата
vikttur написал:
Не нравится мне так )
а
Код
            With .Cells(i, 1)
                Select Case .Value
                Case Is >= 3000: .Value = 1


или совсем так
Код
            With .Cells(i, 1)
                .value=worksheetfunction.Lookup(.value, _
                array(0,15,20,50,100,300,500,700,1000,2000,3000), _
                    Array(.value,15,12,10,8,7,5,4,3,2,1))
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал: With .Cells(i, 1)
Вот это другое дело. Не подумал )
Страницы: 1
Наверх