Страницы: 1
RSS
Трансформация выгрузки из 1С, Трансформация выгрузки из 1С
 
Добрый день!

Из 1С выгружается в виде - лист Выгрузка.
Можно ли транформировать формулами, пр.инструментами в вид, как на листе Цель?


Заранее благодарю,
 
Код
Sub Дерево()
    arrs = Array(, , , , Empty)
    cr = 30
    lr = Cells(Rows.Count, 1).End(xlUp).Row
    If lr > 29 Then Range("A30:L" & lr).ClearContents
    With Sheets("Выгрузка")
        For i = 12 To .Cells(.Rows.Count, 1).End(xlUp).Row
            k = .Cells(i, 1).IndentLevel
            arrs(k) = .Cells(i, 1)
            For j = k + 1 To 4
                arrs(j) = Empty
            Next
            Cells(cr, 1) = arrs(0)
            Cells(cr, 2) = arrs(1)
            Cells(cr, 3) = arrs(2)
            Cells(cr, 4) = arrs(3)
            Cells(cr, 5) = arrs(4)
            For j = 6 To 13
                Cells(cr, IIf(j > 7, j - 1, j)) = .Cells(i, j)
            Next
            cr = cr + 1
        Next
    End With
End Sub
 
Юлия Юлия, здравствуйте!
Единственное, что вам поможет, это макрос на основе отступов — (Range.IndentLevel). По ним вы сможете определить уровни заголовков, офильтровать, вынести в соответствующие столбцы слева и заполнить данными из ячеек сверху.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Спасибо )
 
Цитата
Jack Famous написал:
Единственное, что вам поможет, это макрос на основе отступов — ( Range.IndentLevel )
, не правда, ещё может помочь макрос на основании группировки или заливки ячеек
Юлия Юлия, Если у Вас будет сохранена группировка строк то можете сделать так:
Выделяйте Ваши данные (только данные с группировкой, см.рисунок, не нужно выделять весь столбец) и жмите на кнопку
Код
Sub Макрос1()
Dim arr As Variant, arr1 As Variant, n As Long, m As Integer
arr1 = Selection.Columns("A:A")
ReDim arr(1 To UBound(arr1), 1 To 1)
Set Dict = CreateObject("System.Collections.ArrayList")
For Each r In Selection.Rows
    n = n + 1
    If Not Dict.contains(r.OutlineLevel) Then
        Dict.Add r.OutlineLevel
        If Dict.Count > 1 Then ReDim Preserve arr(1 To UBound(arr), 1 To UBound(arr, 2) + 1)
    End If
    arr(n, Dict.LastIndexOf(r.OutlineLevel) + 1) = arr1(n, 1)
    If Dict.LastIndexOf(r.OutlineLevel) + 1 > 1 And n > 1 Then
        For m = Dict.LastIndexOf(r.OutlineLevel) To 1 Step -1
            arr(n, m) = arr(n - 1, m)
        Next
    End If
Next
Columns(1).Resize(, Dict.Count).Insert Shift:=xlToRight
Selection(1).Resize(UBound(arr), UBound(arr, 2)).NumberFormat = "@"
Selection(1).Resize(UBound(arr), UBound(arr, 2)) = arr
End Sub
Изменено: Msi2102 - 29.06.2022 11:06:50
 
Цитата
Msi2102: на основании группировки или заливки ячеек
группировка да, а вот заливка нет - минимум 2 разных уровня с одинаковой заливкой
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
2 разных уровня с одинаковой заливкой
Да согласен
 
Спасибо)
 
,
отчего не с 1 строки вставляется "переработанное"?
 
Цитата
Сергей написал:
отчего не с 1 строки вставляется "переработанное"
Вы о каком варианте?
 
,
из второго сообщения

Да и сальдо на начало периода не выводится
Изменено: Сергей - 18.05.2023 17:02:21
Страницы: 1
Наверх