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

Подскажите, как написать макрос который будет добавлять и заполнять строки при определенном условии, т. е. есть таблица (табл. 1) в которой необходимо при отсутствии порядкового календарного дня добавлять строки и вставлять порядковые даты (продолжая календарные дни) и заполнять предыдущие значение в столбце sum. И так по всему листу. Конечный результат должен быть как в табл. 2

Скрытый текст
 
Так?

Код
Sub Даты()
Dim Arr2 As Variant, d As Integer, m As Integer, n As Integer
lr = Cells(Rows.Count, 1).End(xlUp).Row
Arr1 = Range("A2:B" & lr)
ReDim Arr2(1 To DateDiff("d", CDate(Arr1(LBound(Arr1), 1)), CDate(Arr1(UBound(Arr1), 1))) + 1, 1 To 2)
m = 1
For n = LBound(Arr1) To UBound(Arr1) - 1
    For d = 0 To DateDiff("d", CDate(Arr1(n, 1)), CDate(Arr1(n + 1, 1))) - 1
        Arr2(m, 1) = DateAdd("d", d, CDate(Arr1(n, 1)))
        Arr2(m, 2) = Arr1(n, 2)
        m = m + 1
    Next d
Next n
Arr2(UBound(Arr2), 1) = CDate(Arr1(UBound(Arr1), 1))
Arr2(UBound(Arr2), 2) = Arr1(UBound(Arr1), 2)
Range("C2:D" & UBound(Arr2) + 1) = Arr2
End Sub
Изменено: Msi2102 - 03.12.2021 13:01:35
 
да, Спасибо большое!!!
 
Можно ещё PQ
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    тип = Table.TransformColumnTypes(Источник,{{"DATE_CREATED", type date}, {"SUM(R.CURRENT_BALANCE)", type number}}),
    start = тип{0}[DATE_CREATED], 
    finish = тип{Table.RowCount(тип)-1}[DATE_CREATED],
    спис = List.Dates(start, Number.From(finish) - Number.From(start)+1, #duration(1,0,0,0)),
    табл = Table.FromList(спис, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    объед = Table.NestedJoin(табл,{"Column1"},тип,{"DATE_CREATED"},"тип",JoinKind.LeftOuter),
    разв = Table.ExpandTableColumn(объед, "тип", {"SUM(R.CURRENT_BALANCE)"}, {"SUM(R.CURRENT_BALANCE)"}),
    сорт = Table.Sort(разв,{{"Column1", Order.Ascending}}),
    заполнить = Table.FillDown(сорт,{"SUM(R.CURRENT_BALANCE)"}),
    имя = Table.RenameColumns(заполнить,{{"Column1", "DATE_CREATED"}}),
    тип2 = Table.TransformColumnTypes(имя,{{"DATE_CREATED", type date}})
in
    тип2
Изменено: Msi2102 - 03.12.2021 14:31:31
 
Спасибо.
А если это будет октябрь, в котором последняя запись 30.10.21, то как добавить 31.10.2021 с значением в поле sum за 30.10.21?
 
Цитата
alex Kucherov написал:
при отсутствии порядкового календарного дня
Поэтому, для того чтобы после 30.10.21 появилась запись 31.10.21 со значением 30.10.21, следующая дата должна быть 01.11.21, то есть, она должна быть пропущена. Всё как в вашем примере.
Изменено: Msi2102 - 03.12.2021 21:01:45
Страницы: 1
Наверх