Страницы: 1
RSS
Как из структуры (один столбец с нумерацией) создать таблицу
 
Здравствуйте! Возникла необходимость преобразовать структуру в табличную форму имеется всего 1 столбец и его необходимо разбить на 4 исходя из структуры, возможно ли это как-то сделать с минимальной затратой времени? Пример в описании.
 
Если делать макросом - можно словарь с коллекцией в словаре юзать.
Но сейчас все уже на PQ переметнулись, может там попроще код будет (если будет), я пас с PQ.
 
Цитата
Hugo: все уже на PQ переметнулись
кто это "все", интересно?))
Только ситхи возводят всё в абсолют  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
А вот и посмотрим :)
 
Вариант в Power Query :о)
 
Вариант на PQ и сводных таблицах. В принципе можно и чисто на PQ, но лениво. Извините.
З.Ы. А хотя там не так уж и сложно: вариант полностью на PQ без сводных:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="ИменованныйДиапазон"]}[Content],
    #"Added Custom" = Table.AddColumn(Source, "УровеньИерархии", each Text.Length( Text.Select([Column1],".") ), Int64.Type ),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Товар", each if [УровеньИерархии] = 1 then [Column1] else null),
    #"Added Custom2" = Table.AddColumn(#"Added Custom1", "Вид товара", each if [УровеньИерархии] = 2 then [Column1] else null),
    #"Added Custom3" = Table.AddColumn(#"Added Custom2", "Тип товара", each if [УровеньИерархии] = 3 then [Column1] else null),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom3",{"Column1", "УровеньИерархии"}),
    #"Filled Down" = Table.FillDown(#"Removed Columns",{"Товар", "Вид товара"}),
    #"Filtered Rows" = Table.SelectRows(#"Filled Down", each ([Тип товара] <> null)),
    #"Grouped Rows" = Table.Group(#"Filtered Rows", {"Товар", "Вид товара"}, {{"tab", each [Тип товара]}}),
    #"Added Custom4" = Table.AddColumn(#"Grouped Rows", "tab1", each Table.FromColumns({{[Товар]},{[Вид товара]},[tab]},Table.ColumnNames(#"Filtered Rows"))),
    tab1 = Table.Combine(#"Added Custom4"[tab1]),
    #"Added Custom5" = Table.AddColumn(tab1, "Описание товара", each null)
in
    #"Added Custom5"
Изменено: PooHkrd - 14.04.2021 14:22:38
Вот горшок пустой, он предмет простой...
 
Код
Sub ApplePear()
    Dim r As Range
    On Error Resume Next
        Set r = Intersect(Selection, ActiveSheet.UsedRange)
    On Error GoTo 0
    
    If Not r Is Nothing Then
        Dim c As Range
        Dim s As String
        Dim a As Variant
        Dim b As Variant
        ReDim b(1 To r.Cells.Count, 1 To 3)
        Dim y As Long
        Dim x As Integer
        y = 1
        For Each c In r
            s = c.Value
            a = Split(s, ".")
            x = UBound(a)
                
            If x >= 1 And x <= UBound(b, 2) Then b(y, x) = s
            If x = 3 Then y = y + 1
            
        Next
        Range("F2").Resize(UBound(b, 1), UBound(b, 2)) = b
    End If
End Sub
 
Юрий Я,Добрый день.
На основе Вашего файла, сделал чуть более ленивый вариант=D
Страницы: 1
Наверх