sgkorolew
Дата: Четверг, 15.12.2016, 20:54 |
Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация:
0
±
Замечаний:
0% ±
Excel 2010
Здравствуйте. Задача следующая. Имеются операции по счету: поступления и выплаты. В выплату включаются ранее поступившие средства. Необходимо для каждой операции поступления определить дату фактической выплаты. Интересно, каким способом можно решить эту и подобные задачи. Буду признателен за совет.
Здравствуйте. Задача следующая. Имеются операции по счету: поступления и выплаты. В выплату включаются ранее поступившие средства. Необходимо для каждой операции поступления определить дату фактической выплаты. Интересно, каким способом можно решить эту и подобные задачи. Буду признателен за совет. sgkorolew
Ответить
Сообщение Здравствуйте. Задача следующая. Имеются операции по счету: поступления и выплаты. В выплату включаются ранее поступившие средства. Необходимо для каждой операции поступления определить дату фактической выплаты. Интересно, каким способом можно решить эту и подобные задачи. Буду признателен за совет. Автор - sgkorolew Дата добавления - 15.12.2016 в 20:54
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]
еще вариант, 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
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