Сделал несколько быстрых, которые должны работать. Я не знаю, что вы хотите сделать на листе «Final», поэтому не сосредотачиваюсь на этой строке.
Logi c - это одна большая l oop (For i...
) это go через весь столбец C. Когда значение найдено в столбце C (If .Cells(i, "C") <> "" Then
), мы выполняем «small l oop» (For j = i To lastrow + 1
), чтобы проверить следующую пустую ячейку, чтобы определить диапазон «малой группы». Когда этот диапазон определен, мы выполняем формулы To
, From
, MAX
, MIN
и AVG
, которые должны быть динамическими c.
Option Explicit
Sub trial()
Dim lastrow As Long
Dim destSht As Worksheet
Dim i As Long, j As Long
Set destSht = Worksheets("Final")
With Worksheets("Source")
lastrow = .Range("B" & .Rows.Count).End(xlUp).Row
For i = 2 To lastrow + 1 'loop whole range (column C)
If .Cells(i, "C") <> "" Then 'If column C is not empty then
For j = i To lastrow + 1 'Loop "group" range to find next empty cell. Start from current loop i to last row and add one row to get to next empty cell.
If .Cells(j, "C") = "" Then 'When next empty cell is found (i.e. end of small group range) then apply formulas
.Cells(i, "E").Value = .Cells(i, "B").Value 'From
.Cells(i, "F").Value = .Cells(j - 1, "B").Value 'To
.Cells(i, "G").Formula = "=MAX(C" & i & ":C" & j - 1 & ")" 'MAX
.Cells(i, "H").Formula = "=MIN(C" & i & ":C" & j - 1 & ")" 'MIN
.Cells(i, "I").Formula = "=AVERAGE(C" & i & ":C" & j - 1 & ")" 'AVG
Exit For
End If
Next j
End If
Next i
End With
End Sub
Результат:
введите описание изображения здесь