Как перебрать ячейки в столбце и найти самую последнюю дату в списке в Excel VBA

Фактическая работа по циклу в столбце A, который имеет то же значение с определенным диапазоном, с этим диапазоном, чтобы проверить последнюю дату с комментарием в столбце B и напечатать комментарий с датой в столбце C, пожалуйста, помогите мне найти решение для этого проблема.. Или руководство, чтобы найти решение этой проблемы... Пожалуйста, проверьте скриншот для четкой информации.. Спасибо заранее эксперты

2 ответа

Циклы, вероятно, самые мощные вещи во всех темах компьютерного программирования. Пожалуйста, посмотрите примеры ниже для некоторых идей о том, как достичь ваших целей.

Для каждой ячейки в диапазоне данных для каждого примера

При программировании VBA в Excel одна из наиболее распространенных вещей, которую вы будете делать, - это циклическое выполнение набора ячеек в указанном диапазоне, как в приведенном ниже примере, в котором адрес и значение 4 ячеек на листе "Данные" выводятся в непосредственное окно.: $B$2:a, $C$2:b, $B$3:1, $C$3:2.

Dim rng As Range: Set rng = Application.Range("Data!B2:C3")
Dim cel As Range
For Each cel In rng.Cells
    With cel
        Debug.Print .Address & ":" & .Value
    End With
Next cel

Перебирайте данные в ячейках строки для каждого примера

В приведенном ниже коде показано, как перебрать ячейки в строке с помощью RowIndex:=2. Применительно к данным на листе справа это вернет 1, 2. Отсюда мы видим, что строки отсчитываются от начальной точки rng, поэтому строка равна 3 на листе, 2 внутри rng. Кроме того, принимаются только ячейки внутри заданного диапазона rng.

Dim rng As Range: Set rng = Application.Range("Data!B2:C3")
Dim i As Integer
For i = 1 To rng.Rows.Count
    Debug.Print rng.Cells(RowIndex:=2, ColumnIndex:=i).Value
Next

Цикл по клеткам в столбце

В приведенном ниже коде показано, как перебрать ячейки в столбце с помощью ColumnIndex:=B. Применительно к данным на листе справа это вернет a, 1, 2. Отсюда мы видим, что столбцы отсчитываются от начальной точки rng, поэтому столбец C на рабочем листе, B внутри rng. Кроме того, принимаются только ячейки внутри заданного диапазона rng.

Dim rng As Range: Set rng = 
Dim i As Integer
For i = 1 To rng.Rows.Count
    Debug.Print rng.Cells(RowIndex:=i, ColumnIndex:="B").Value
Next

Перебрать столбцы в диапазоне

Приведенный ниже код показывает, как проходить по столбцам в диапазоне B2:C4. Применительно к данным на листе справа это вернет 2, 3. Отсюда мы видим, что столбцы отсчитываются от начальной точки рабочего листа.

Dim rng As Range: Set rng = Application.Range("B2:C4")
Dim col As Range
For Each col In rng.Columns
    Debug.Print col.Column
Next col

Цикл по рядам в диапазоне

В приведенном ниже коде показано, как выполнить цикл по строкам в диапазоне B2:C4. Применительно к данным на листе справа это вернет 2, 3, 4. Отсюда мы видим, что строки отсчитываются от начальной точки рабочего листа.

Dim rng As Range: Set rng = Application.Range("B2:C4")
Dim col As Range
For Each col In rng.Rows
    Debug.Print col.Row
Next col

Выполните цикл по областям в данных диапазона для каждого примера 2 областей

Часто мы предполагаем, что диапазон имеет прямоугольную форму, но это не обязательно так. Пример листа справа показывает выделение, содержащее две области: Selection.Address возвращает $B$2:$C$3,$F$2:$F$3. Такая ситуация может также возникнуть в результате метода пересечения или других причин. Для обработки двух диапазонов по отдельности можно выбрать то из коллекции Areas:

Dim rng As Range: Set rng = Application.Selection
Dim rngArea As Range
For Each rngArea In rng.Areas
    Debug.Print rngArea.Address
Next rngArea

Я бы порекомендовал объявить некоторые измерения довольно простым способом (предполагается, что вы отсортировали столбец A):

Dim i As Long, j As Long, k As Long, LR As Long
LR = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To LR
    If Cells(i, 1).Value = Cells(i - 1).Value Then
        If j = 0 Then
           j = Cells(i - 1, 1).Row
        End If
    Else
        If j > 0 Then
            k = Cells(i - 1, 1).Row
            Cells(j, 3).Value = Application.Max(Range(Cells(j, 1), Cells(k, 1)))
            j = Cells(i, 1).Row
            k = 0
        End If
    End If
Next i
Другие вопросы по тегам