Помогите написать макрос или формулу, чтобы заполнить пустые ячейки в столбце. Часть ячеек заполнена, часть пустые. Нужно заполнить эти дырки такими же значениями как у ячейки выше. Пытался реализовать по такой логике: пробегаюсь по столбцу сверху вниз и ищу пустую ячейку. Если текущая ячейка пустая, то копировать значение из i-1 ячейки этого столбца с добавлением символа. Но как-то с наскока не смог.
Для полного удовлетворения нужно чтобы при нахождении больше одной пустой ячейки подряд новые имена ячейки содержали порядковые номера вида "Значение предыдущей ячейки_п1", "Значение предыдущей ячейки_п2".
Во вложении пример, что пытаюсь автоматизировать. Реальный файл как обычно 100к+ строк и всё такое.
Sub FillSelection()
Dim ru As Range
Set ru = Intersect(Selection, ActiveSheet.UsedRange)
Dim Application_Calculation As XlCalculation
Application_Calculation = Application.Calculation
Application.Calculation = xlCalculationManual
Dim ya As Long
Dim arr As Variant
Dim iIndex As Long
Dim sKey As String
Dim rArea As Range
For Each rArea In ru.Areas
If rArea.Rows.Count > 0 Then
arr = rArea.Value
sKey = arr(1, 1)
iIndex = 1
For ya = 2 To UBound(arr, 1)
If IsEmpty(arr(ya, 1)) Then
arr(ya, 1) = sKey & "_п" & iIndex
iIndex = iIndex + 1
Else
sKey = arr(ya, 1)
iIndex = 1
End If
Next
rArea.Value = arr
End If
Next
Application.Calculation = Application_Calculation
End Sub
'v2
Sub FillSelection()
Dim ru As Range
Set ru = Intersect(Selection, ActiveSheet.UsedRange)
Dim Application_Calculation As XlCalculation
Application_Calculation = Application.Calculation
Application.Calculation = xlCalculationManual
Dim xa As Long
Dim ya As Long
Dim arr As Variant
Dim iIndex As Long
Dim sKey As String
Dim rArea As Range
For Each rArea In ru.Areas
If rArea.Rows.Count > 0 Then
arr = rArea.Value
For xa = 1 To UBound(arr, 2)
sKey = arr(1, xa)
iIndex = 1
For ya = 2 To UBound(arr, 1)
If IsEmpty(arr(ya, xa)) Then
arr(ya, xa) = sKey & "_п" & iIndex
iIndex = iIndex + 1
Else
sKey = arr(ya, xa)
iIndex = 1
End If
Next
Next
rArea.Value = arr
End If
Next
Application.Calculation = Application_Calculation
End Sub
Вариант в E2: =ЕСЛИ(A2="";ЗАМЕНИТЬ(E1;ПОИСК("_п";E1&"_п");9;)&"_п"&(0&ПСТР(E1;ПОИСК("_п";E1&"_п")+2;9))+1;A2) Если ссылаться только на исходный столбец =ПРОСМОТР("яъ";A$2:A2)&ЕСЛИ(A2="";"_п"&СТРОКА()-ПОИСКПОЗ(ПРОСМОТР("яъ";A$2:A2);A$2:A2;)-СТРОКА(A$1);"")