В приложенном файле необходимо скорректировать ссылку на колонки.
[vba]
Код
Sub Подбор_КФ1305() ' ' Подбор_КФ1305 ' ' Сочетание клавиш: '
Dim lr As Long, i As Long
' Поиск последней строки в столбце N. ' End не ищет в скрытых строках. lr = Cells(Rows.Count, "AO").End(xlUp).Row On Error Resume Next
' Подбор значений.
For i = 2 To lr ' от 10000 руб - суммы до N - суммы If Cells(i, "AY") > 10000 Then Cells(i, "BA").GoalSeek Goal:=0.21, ChangingCell:=Cells(i, "AO") ' от 7000 рублей - суммы до 10000 рублей ElseIf Cells(i, "AY") > 7000 Then Cells(i, "BA").GoalSeek Goal:=0.23, ChangingCell:=Cells(i, "AO") ' от 3000 рублей - суммы до 7000 рублей ElseIf Cells(i, "AY") > 3000 Then Cells(i, "BA").GoalSeek Goal:=0.25, ChangingCell:=Cells(i, "AO") ' от 1500 рублей - суммы до 3000 рублей ElseIf Cells(i, "AY") > 1500 Then Cells(i, "BA").GoalSeek Goal:=0.26, ChangingCell:=Cells(i, "AO") ' от 550 рублей - суммы до 1500 рублей ElseIf Cells(i, "AY") > 550 Then Cells(i, "BA").GoalSeek Goal:=0.27, ChangingCell:=Cells(i, "AO") ' от 150 рублей - суммы до 550 рублей ElseIf Cells(i, "AY") > 150 Then Cells(i, "BA").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AO") Else ' !! ВСЕ ЧТО НЕ ВОШЛО В ЭТИ Диапазон Cells(i, "BA").GoalSeek Goal:=0.5, ChangingCell:=Cells(i, "AO") End If Next i
End Sub
[/vba]
Здесь AO нужно поменять на Текущая цена (со скидкой), руб.. Потому что бывает , что выгружаешь и меняет местами колонки и я думаю привязаться к названию колонки.
А здесь:
[vba]
Код
Sub Рентабельность1305() ' ' Рентабельность1305 ' ' Сочетание клавиш: '
Dim lr As Long, i As Long
' Поиск последней строки в столбце N. ' End не ищет в скрытых строках. lr = Cells(Rows.Count, "AM").End(xlUp).Row On Error Resume Next
' Подбор значений.
For i = 2 To lr ' от 10000 руб - суммы до N - суммы If Cells(i, "AW") > 10000 Then Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM") ' от 7000 рублей - суммы до 10000 рублей ElseIf Cells(i, "AW") > 7000 Then Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM") ' от 3000 рублей - суммы до 7000 рублей ElseIf Cells(i, "AW") > 3000 Then Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM") ' от 1500 рублей - суммы до 3000 рублей ElseIf Cells(i, "AW") > 1500 Then Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM") ' от 550 рублей - суммы до 1500 рублей ElseIf Cells(i, "AW") > 550 Then Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM") ' от 150 рублей - суммы до 550 рублей ElseIf Cells(i, "AW") > 150 Then Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM") Else ' !! ВСЕ ЧТО НЕ ВОШЛО В ЭТИ Диапазон Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM") End If Next i
End Sub
[/vba]
AM поменять на Последняя миля, FBS
Всем доброго времени суток!
В приложенном файле необходимо скорректировать ссылку на колонки.
[vba]
Код
Sub Подбор_КФ1305() ' ' Подбор_КФ1305 ' ' Сочетание клавиш: '
Dim lr As Long, i As Long
' Поиск последней строки в столбце N. ' End не ищет в скрытых строках. lr = Cells(Rows.Count, "AO").End(xlUp).Row On Error Resume Next
' Подбор значений.
For i = 2 To lr ' от 10000 руб - суммы до N - суммы If Cells(i, "AY") > 10000 Then Cells(i, "BA").GoalSeek Goal:=0.21, ChangingCell:=Cells(i, "AO") ' от 7000 рублей - суммы до 10000 рублей ElseIf Cells(i, "AY") > 7000 Then Cells(i, "BA").GoalSeek Goal:=0.23, ChangingCell:=Cells(i, "AO") ' от 3000 рублей - суммы до 7000 рублей ElseIf Cells(i, "AY") > 3000 Then Cells(i, "BA").GoalSeek Goal:=0.25, ChangingCell:=Cells(i, "AO") ' от 1500 рублей - суммы до 3000 рублей ElseIf Cells(i, "AY") > 1500 Then Cells(i, "BA").GoalSeek Goal:=0.26, ChangingCell:=Cells(i, "AO") ' от 550 рублей - суммы до 1500 рублей ElseIf Cells(i, "AY") > 550 Then Cells(i, "BA").GoalSeek Goal:=0.27, ChangingCell:=Cells(i, "AO") ' от 150 рублей - суммы до 550 рублей ElseIf Cells(i, "AY") > 150 Then Cells(i, "BA").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AO") Else ' !! ВСЕ ЧТО НЕ ВОШЛО В ЭТИ Диапазон Cells(i, "BA").GoalSeek Goal:=0.5, ChangingCell:=Cells(i, "AO") End If Next i
End Sub
[/vba]
Здесь AO нужно поменять на Текущая цена (со скидкой), руб.. Потому что бывает , что выгружаешь и меняет местами колонки и я думаю привязаться к названию колонки.
А здесь:
[vba]
Код
Sub Рентабельность1305() ' ' Рентабельность1305 ' ' Сочетание клавиш: '
Dim lr As Long, i As Long
' Поиск последней строки в столбце N. ' End не ищет в скрытых строках. lr = Cells(Rows.Count, "AM").End(xlUp).Row On Error Resume Next
' Подбор значений.
For i = 2 To lr ' от 10000 руб - суммы до N - суммы If Cells(i, "AW") > 10000 Then Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM") ' от 7000 рублей - суммы до 10000 рублей ElseIf Cells(i, "AW") > 7000 Then Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM") ' от 3000 рублей - суммы до 7000 рублей ElseIf Cells(i, "AW") > 3000 Then Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM") ' от 1500 рублей - суммы до 3000 рублей ElseIf Cells(i, "AW") > 1500 Then Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM") ' от 550 рублей - суммы до 1500 рублей ElseIf Cells(i, "AW") > 550 Then Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM") ' от 150 рублей - суммы до 550 рублей ElseIf Cells(i, "AW") > 150 Then Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM") Else ' !! ВСЕ ЧТО НЕ ВОШЛО В ЭТИ Диапазон Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM") End If Next i
Порядок действий по улучшайзингу предлагается следующий. Создаем функцию с максимально коротким (для удобства) идентификатором, пусть "cn". Будет означать что-то типа "сolumn number" или "сolumn name". Функция будет вычислять номер колонки ("number") по ее названию в третьей строке листа "Товары и цены". В качестве параметра функции можно задавать как полное, так и неполное (но с достаточным для однозначной идентификации количеством начальных символов слева) название колонки. Функцию следует поместить в общий модуль (не в модуль листа). Вот ее незамысловатый текст: [vba]
Код
Function cn(ByVal colName As String) As Integer Dim rng As Range Set rng = Worksheets("Товары и цены").Range("3:3") cn = WorksheetFunction.Match(colName & "*", rng, 0) End Function
[/vba] При сокращенном названии главное следить за тем, чтобы "попадать" на нужную колонку. Три вызова Cells выше адресуются к одной и той же ячейке, что есть хорошо.
Порядок действий по улучшайзингу предлагается следующий. Создаем функцию с максимально коротким (для удобства) идентификатором, пусть "cn". Будет означать что-то типа "сolumn number" или "сolumn name". Функция будет вычислять номер колонки ("number") по ее названию в третьей строке листа "Товары и цены". В качестве параметра функции можно задавать как полное, так и неполное (но с достаточным для однозначной идентификации количеством начальных символов слева) название колонки. Функцию следует поместить в общий модуль (не в модуль листа). Вот ее незамысловатый текст: [vba]
Код
Function cn(ByVal colName As String) As Integer Dim rng As Range Set rng = Worksheets("Товары и цены").Range("3:3") cn = WorksheetFunction.Match(colName & "*", rng, 0) End Function
[/vba] При сокращенном названии главное следить за тем, чтобы "попадать" на нужную колонку. Три вызова Cells выше адресуются к одной и той же ячейке, что есть хорошо.Gustav
Ой йо! Да ну откуда же такое неверие в собственные силы?! Сделал, с некоторой оптимизацией в плане заведения отдельных переменных для номеров колонок, с вычислением их значений в начале процедуры. А то дёргать функцию cn на каждый встретившийся Cells - дорогое удовольствие!
Ой йо! Да ну откуда же такое неверие в собственные силы?! Сделал, с некоторой оптимизацией в плане заведения отдельных переменных для номеров колонок, с вычислением их значений в начале процедуры. А то дёргать функцию cn на каждый встретившийся Cells - дорогое удовольствие!Gustav