Как перебрать ячейки в столбце и найти самую последнюю дату в списке в 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