У меня есть столбец данных с блоками непустых ячеек, за которыми следуют блоки пустых ячеек. См. Рисунок ниже. Я пытаюсь разработать макрос, который вставляет формулы в каждый блок непустых ячеек и заканчивается, когда он достигает последнего непустого блока ячейки в столбце. Я не могу понять, как обобщить поиск первой и последней ячейки в каждом непустом блоке ячейки. Возможно, существует некоторый метод подсчета, такой как firstrow(i)
и lastrow(i)
Любые предложения приветствуются. Благодаря!Изменение значений блоков ячеек в столбце, разделенных пустыми ячейками
расположение данных:
Macro:
Sub test()
Dim r As Integer
Dim firstrowX, lastrowX As Long
Dim sht As Worksheet
Set sht = Sheets("Sheet1")
With sht
'first row in block
firstrowX = sht.Cells(3, 12).End(xlDown).Row
'last row in block
lastrowX = sht.Cells(firstrowX, 12).End(xlDown).Row
'last row in column
lastrowCol = sht.Cells(Rows.count, 12).End(xlUp).Row
For r = firstrowX To lastrowX
If r <> lastrowX Then
.Cells(r, 12).FormulaR1C1 = "=IF(RC[-1]=RC[-6],1, IF(R" & lastrowX & "C[]=1, -1, 0))"
Else
.Cells(r, 12).FormulaR1C1 = "=IF(RC[-1]=RC[-6],1,0)"
End If
If lastrowX = lastrowCol Then
Exit Sub
Next r
End With
End Sub
Thanks @MacroMan! Единственное, что lastrowX следует применять к последней ячейке в каждом блоке ячейки. Не до последней ячейки во всей колонке. – RTrain3k
Если вы используете 'SpecialCells()', хотя вам не нужен 'lastrowX', потому что вы только перебираете ячейки, у которых есть значение, - цикл автоматически перескакивает между каждым блоком. –
ОК спасибо! Существует еще одна проблема: последняя ячейка каждого непустого блока ячейки должна иметь следующую формулу: '.Cells (r, 12) .FormulaR1C1 =" = IF (RC [-1] = RC [-6], 1,0) "' – RTrain3k