Есть ограничение по сумме для последнего в первой колонке значения (=4 в этом случае), Ограничение суммы для данного значения по второй колонке условно = 30. Нужно, чтобы если это ограничение превышается, искалось первое максимальное во второй колонке значение, удовлетворяющее условию не более 30.
Если поиск первого сверху вниз по второй колонке максимального значения завершен и максимальное значение, удовлетворяющее условию найдено, далее исполняется строка кода, например, Range ("H1" ) = 33 или какой-нибудь Sub
Напротив первого найденного максимального значения из второй колонки, удовлетворяющего условию , в первой колонке ставится значение Cells (lr,1) value(так напишу).
Подскажите, пожалуйста, как решить эту искусственную задачу. Пример приложил. Во вложениях пока что неудачные попытки.
Всем доброй ночи!
Есть ограничение по сумме для последнего в первой колонке значения (=4 в этом случае), Ограничение суммы для данного значения по второй колонке условно = 30. Нужно, чтобы если это ограничение превышается, искалось первое максимальное во второй колонке значение, удовлетворяющее условию не более 30.
Если поиск первого сверху вниз по второй колонке максимального значения завершен и максимальное значение, удовлетворяющее условию найдено, далее исполняется строка кода, например, Range ("H1" ) = 33 или какой-нибудь Sub
Напротив первого найденного максимального значения из второй колонки, удовлетворяющего условию , в первой колонке ставится значение Cells (lr,1) value(так напишу).
Подскажите, пожалуйста, как решить эту искусственную задачу. Пример приложил. Во вложениях пока что неудачные попытки.ant6729
Поиск максимального значения происходит в выделенной области Он будет равен 7 После этого напротив него станет 4 Всё
Так что ли?[vba]
Код
Sub www() ps = Selection.Row vs = Selection.Rows.Count x = 0 For i = ps To ps + vs - 1 If Cells(i, "B") > x Then x = Cells(i, "B") sz = i End If Next Cells(sz, "A") = 4 End Sub
Поиск максимального значения происходит в выделенной области Он будет равен 7 После этого напротив него станет 4 Всё
Так что ли?[vba]
Код
Sub www() ps = Selection.Row vs = Selection.Rows.Count x = 0 For i = ps To ps + vs - 1 If Cells(i, "B") > x Then x = Cells(i, "B") sz = i End If Next Cells(sz, "A") = 4 End Sub
Вообщем, выделенная область имел ввиду не selection а область, по которой нужно считать. Но взял на вооружение Вашу идею, немного извращался... опять в своем стиле. И получил то, что нужно. [vba]
ps = Selection.Row vs = Selection.Rows.Count x = 0 For i = ps To ps + vs - 1 If Cells(i, "B") > x Then x = Cells(i, "B") sz = i End If Next Cells(sz, "A") = Cells(lr, 1).Value
ActiveWorkbook.Worksheets("Лист1").AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets("Лист1").AutoFilter.Sort.SortFields.Add Key:=Range( _ "A1:A300"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("Лист1").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
[/vba]
Спасибо, Wasilich!
Вообщем, выделенная область имел ввиду не selection а область, по которой нужно считать. Но взял на вооружение Вашу идею, немного извращался... опять в своем стиле. И получил то, что нужно. [vba]
ps = Selection.Row vs = Selection.Rows.Count x = 0 For i = ps To ps + vs - 1 If Cells(i, "B") > x Then x = Cells(i, "B") sz = i End If Next Cells(sz, "A") = Cells(lr, 1).Value
ActiveWorkbook.Worksheets("Лист1").AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets("Лист1").AutoFilter.Sort.SortFields.Add Key:=Range( _ "A1:A300"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("Лист1").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub