Страницы: 1
RSS
Заполнение пустых ячеек по правилу, Заполнение пустых значений в столбце на основании вышележащих ячеек этого же столбца
 
Добрый день.

Помогите написать макрос или формулу, чтобы заполнить пустые ячейки в столбце. Часть ячеек заполнена, часть пустые. Нужно заполнить эти дырки такими же значениями как у ячейки выше.
Пытался реализовать по такой логике: пробегаюсь по столбцу сверху вниз и ищу пустую ячейку. Если текущая ячейка пустая, то копировать значение из i-1 ячейки этого столбца с добавлением символа. Но как-то с наскока не смог.

Для полного удовлетворения нужно чтобы при нахождении больше одной пустой ячейки подряд новые имена ячейки содержали порядковые номера вида "Значение предыдущей ячейки_п1", "Значение предыдущей ячейки_п2".

Во вложении пример, что пытаюсь автоматизировать. Реальный файл как обычно 100к+ строк и всё такое.
Изменено: half_cat - 27.04.2024 16:56:41
 
Требуемый результат_1
Код
=ЕСЛИ(ЕПУСТО(A2);C1&ЕСЛИ(ЕОШ(НАЙТИ("_п";C1));"_п";"");A2)
В ячейку C2.
 
Извиняюсь, в поиске нашел. Со второй частью подскажите что нибудь, чтобы порядковые номера прицепить.
 
Цитата
написал:
Требуемый результат_1Код=ЕСЛИ(ЕПУСТО(A2);C1&ЕСЛИ(ЕОШ(НАЙТИ("_п";C1));"_п";"");A2)В ячейку C2.
Спасибо  большое  :)  
 
Требуемый результат_2
Код
=ЕСЛИ(ЕПУСТО(A2);ЕСЛИ(ЕОШ(НАЙТИ("_п";E1));E1&"_п1";ЛЕВСИМВ(E1;НАЙТИ("_п";E1)+1)&ЕСЛИОШИБКА(ЗНАЧЕН(ПСТР(E1;НАЙТИ("_п";E1)+2;ДЛСТР(E1)))+1;1));A2)
 
Цитата
написал:
Помогите написать макрос
Код
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);"")
 
Большое спасибо, забрал макрос 8)  
Страницы: 1
Наверх