Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Поступления и выплаты: когда и какие выплачены поступления - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Поступления и выплаты: когда и какие выплачены поступления
sgkorolew Дата: Четверг, 15.12.2016, 20:54 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте.
Задача следующая.
Имеются операции по счету: поступления и выплаты.
В выплату включаются ранее поступившие средства.
Необходимо для каждой операции поступления определить дату фактической выплаты.
Интересно, каким способом можно решить эту и подобные задачи.
Буду признателен за совет.
К сообщению приложен файл: 4857594.xlsx (9.6 Kb)
 
Ответить
СообщениеЗдравствуйте.
Задача следующая.
Имеются операции по счету: поступления и выплаты.
В выплату включаются ранее поступившие средства.
Необходимо для каждой операции поступления определить дату фактической выплаты.
Интересно, каким способом можно решить эту и подобные задачи.
Буду признателен за совет.

Автор - sgkorolew
Дата добавления - 15.12.2016 в 20:54
SLAVICK Дата: Четверг, 15.12.2016, 23:48 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
как вариант:
Код
=ЕСЛИОШИБКА(ПРОСМОТР(1;1/((СУММЕСЛИ($K$2:K2;$K$2:K2;$J$2:J2)+J3<=СУММЕСЛИ($N$2:$N$4;$K$2:K2;$O$2:$O$4)));$K$2:K2);МИН(ЕСЛИ($N$2:$N$4>МАКС($K$2:K2);$N$2:$N$4;9^9)))

Но будут неточности.
В идеале - прогонять эти суммы через алгоритм подбора например как здесь.
К сообщению приложен файл: 1883034.xlsx (11.4 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщениекак вариант:
Код
=ЕСЛИОШИБКА(ПРОСМОТР(1;1/((СУММЕСЛИ($K$2:K2;$K$2:K2;$J$2:J2)+J3<=СУММЕСЛИ($N$2:$N$4;$K$2:K2;$O$2:$O$4)));$K$2:K2);МИН(ЕСЛИ($N$2:$N$4>МАКС($K$2:K2);$N$2:$N$4;9^9)))

Но будут неточности.
В идеале - прогонять эти суммы через алгоритм подбора например как здесь.

Автор - SLAVICK
Дата добавления - 15.12.2016 в 23:48
krosav4ig Дата: Пятница, 16.12.2016, 03:31 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 997 ±
Замечаний: 0% ±

Excel 2007,2010,2013
еще вариант, VBA+Поиск решения
для работы нужно установить/загрузить надстройку Поиск решения и подключить ее в VBE (Tools>References>Solver)
[vba]
Код
Sub dd()
    Dim ar As Range, cell As Range, s%
    With Application: .ScreenUpdating = 0: .EnableEvents = 0:  End With
    With Cells(Rows.Count, 2).End(xlUp)
        With .Offset(4 - .Row).Resize(.Row - 4)
            If MsgBox("Очистить заполненные ячейки?", 36) = 6 Then _
                .Offset(, 3).ClearContents
            On Error Resume Next
            .Replace "Выплата", "=ZZ1"
            For Each ar In [ZZ1].Dependents.Areas
                For Each cell In ar.Cells
                    With cell
                        .Offset(, 3).Value = "-"
                        [F2].Formula = Join(Array("=SUMPRODUCT(D4:D", ",F4:F", _
                            "*ISBLANK(E4:E", ")*ISTEXT(B4:B", ")*(COUNTIFS($D$4:$D$", _
                            ",$D$4:$D$", ",$E$4:$E$", ","""",$C$4:$C$", ",""<""&C4:C", ")=0))-" & _
                            .Offset(0, 2).Value), .Row - 1)
                        [G2].Formula = "=$F$2=0"
                        [G3].Formula = "=COUNT($F$4:$F$" & .Row - 1 & ")"
                        [G4].FormulaArray = "=$F$4:$F$" & .Row - 1 & "=INT($F$4:$F$" & .Row - 1 & ")"
                        [G5].FormulaArray = "=$F$4:$F$" & .Row - 1 & "<=1"
                        [G6].FormulaArray = "=$F$4:$F$" & .Row - 1 & ">=0"
                        Solver.SolverLoad [G2:G6], False
                        SolverOk "$F$2", 3, 0, "$F$4:$F$" & .Row - 1, 2, "Simplex LP"
                        Select Case Solver.SolverSolve(True)
                            Case 0, 14
                    [F:F].Replace 1, "=ZZ2", xlWhole
                    [F2,G2:G6].ClearContents
                    Intersect([E:E], [ZZ2].Dependents.EntireRow).Value = .Offset(, 1)
                        End Select
                        .Value = "Выплата"
                    End With
            Next cell, ar
            .Offset(, 3).SpecialCells(4).Value = "Не выплачено"
            .Offset(-2, 4).Resize(.Count + 2, 2).ClearContents
        End With
    End With
    With Application: .ScreenUpdating = 1: .EnableEvents = 1: End With
End Sub
[/vba]
К сообщению приложен файл: 4857594.xlsm (25.7 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Пятница, 16.12.2016, 05:37
 
Ответить
Сообщениееще вариант, VBA+Поиск решения
для работы нужно установить/загрузить надстройку Поиск решения и подключить ее в VBE (Tools>References>Solver)
[vba]
Код
Sub dd()
    Dim ar As Range, cell As Range, s%
    With Application: .ScreenUpdating = 0: .EnableEvents = 0:  End With
    With Cells(Rows.Count, 2).End(xlUp)
        With .Offset(4 - .Row).Resize(.Row - 4)
            If MsgBox("Очистить заполненные ячейки?", 36) = 6 Then _
                .Offset(, 3).ClearContents
            On Error Resume Next
            .Replace "Выплата", "=ZZ1"
            For Each ar In [ZZ1].Dependents.Areas
                For Each cell In ar.Cells
                    With cell
                        .Offset(, 3).Value = "-"
                        [F2].Formula = Join(Array("=SUMPRODUCT(D4:D", ",F4:F", _
                            "*ISBLANK(E4:E", ")*ISTEXT(B4:B", ")*(COUNTIFS($D$4:$D$", _
                            ",$D$4:$D$", ",$E$4:$E$", ","""",$C$4:$C$", ",""<""&C4:C", ")=0))-" & _
                            .Offset(0, 2).Value), .Row - 1)
                        [G2].Formula = "=$F$2=0"
                        [G3].Formula = "=COUNT($F$4:$F$" & .Row - 1 & ")"
                        [G4].FormulaArray = "=$F$4:$F$" & .Row - 1 & "=INT($F$4:$F$" & .Row - 1 & ")"
                        [G5].FormulaArray = "=$F$4:$F$" & .Row - 1 & "<=1"
                        [G6].FormulaArray = "=$F$4:$F$" & .Row - 1 & ">=0"
                        Solver.SolverLoad [G2:G6], False
                        SolverOk "$F$2", 3, 0, "$F$4:$F$" & .Row - 1, 2, "Simplex LP"
                        Select Case Solver.SolverSolve(True)
                            Case 0, 14
                    [F:F].Replace 1, "=ZZ2", xlWhole
                    [F2,G2:G6].ClearContents
                    Intersect([E:E], [ZZ2].Dependents.EntireRow).Value = .Offset(, 1)
                        End Select
                        .Value = "Выплата"
                    End With
            Next cell, ar
            .Offset(, 3).SpecialCells(4).Value = "Не выплачено"
            .Offset(-2, 4).Resize(.Count + 2, 2).ClearContents
        End With
    End With
    With Application: .ScreenUpdating = 1: .EnableEvents = 1: End With
End Sub
[/vba]

Автор - krosav4ig
Дата добавления - 16.12.2016 в 03:31
sgkorolew Дата: Пятница, 16.12.2016, 07:27 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо! Буду разбираться.
 
Ответить
СообщениеСпасибо! Буду разбираться.

Автор - sgkorolew
Дата добавления - 16.12.2016 в 07:27
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!