Страницы: 1
RSS
Автоматическое заполнение вниз по структуре иерархии
 
Добрый день.

Не могу решить проблему с автоматическим заполнением вниз до необходимого уровня иерархии.
Если пользоваться стандартными средствами, то заполнение вниз идет на те ячейки, которые не нужно охватывать.
Пример прикрепляю.

Подскажите, пожалуйста, каким методом можно решить проблему (power query, надстройки).

Имеем базу на 25000 строк, протягивать в ручную очень утомительно.

Благодарю.
 
Тут решал похожую задачу
Там функция есть. Ее, наверное, можно доработать под Вашу задачу, попробуйте
Согласие есть продукт при полном непротивлении сторон
 
Хех...потренировался через формулу, получился какой то монстр. Для решения не рекомендую, но мало ли вдруг ничего кроме этого не будет :)
А так да - делать подобное надо в PQ.
 
Sanja, спасибо, в VBA не силен

txxt, неплохо, попробую применить на 25000 строк)


Может кто-нибудь подскажет, как решить данную проблему через Power Query? (можно даже платно рассмотреть, если задача непростая)
Изменено: EvgeniyLFC - 02.11.2024 07:56:11
 
Цитата
EvgeniyLFC написал:
как решить данную проблему через Power Query?
Скрытый текст
Пришелец-прораб.
 
Если навык VBA недостаточен для написания кода, но достаточен для применения готового решения, то выделите диапазон B3:I22, запустите код.
Код
Option Explicit

Sub Дозаполнить()
    If TypeName(Selection) <> "Range" Then Exit Sub
    
    Dim rr As Range
    On Error Resume Next
    Set rr = Intersect(Selection, ActiveSheet.UsedRange).Areas(1)
    On Error GoTo 0
    If rr Is Nothing Then Exit Sub
    If rr.Cells.CountLarge = 1 Then Exit Sub
    
    Dim arr As Variant
    arr = rr.FormulaR1C1
    arr = GetArr(arr)
    
    rr.FormulaR1C1 = arr
End Sub

Private Function GetArr(arr As Variant) As Variant
    Dim brr As Variant
    ReDim brr(1 To UBound(arr, 1), 1 To UBound(arr, 2))
    
    Dim crr As Variant
    ReDim crr(1 To UBound(arr, 2))
    
    
    Dim ya As Long
    Dim xa As Long
    For ya = 1 To UBound(arr, 1)
        For xa = 1 To UBound(arr, 2)
            If arr(ya, xa) <> "" Then
                crr(xa) = arr(ya, xa)
                brr(ya, xa) = crr(xa)
                Exit For
            End If
            brr(ya, xa) = crr(xa)
        Next
    Next
    GetArr = brr
End Function
 
AlienSx, спасибо большое, буду изучать!

МатросНаЗебре, также огромное спасибо!
Страницы: 1
Наверх