Имеем 2 ячейки 1-1 и 2-1. Задача стоит в увеличении ячейки 1-1 с шагом 1 до тех пор, пока ячейка 2-1 не станет больше значения 10. Сейчас это делаю вручную, заполняя ячейку 1-1. Ячейка 2-1 связана с ячейкой 1-1 через ряд вычислений, которые намеренно опустил, чтобы показать наглядность. Для решения этой задачи хочу использовать Function в VBA, подставляя пользовательскую формулу в ячейку 2-1. Насколько хватает понимания, функция должна иметь следующую текстовку: [vba]
Код
Function KOEF(rass4et) Do While rass4et < 10 rass4et = rass4et + 1 Loop End Function
[/vba]
Понятное дело не работает, ибо мало опыта. Благодарю за любую помощь.
Имеем 2 ячейки 1-1 и 2-1. Задача стоит в увеличении ячейки 1-1 с шагом 1 до тех пор, пока ячейка 2-1 не станет больше значения 10. Сейчас это делаю вручную, заполняя ячейку 1-1. Ячейка 2-1 связана с ячейкой 1-1 через ряд вычислений, которые намеренно опустил, чтобы показать наглядность. Для решения этой задачи хочу использовать Function в VBA, подставляя пользовательскую формулу в ячейку 2-1. Насколько хватает понимания, функция должна иметь следующую текстовку: [vba]
Код
Function KOEF(rass4et) Do While rass4et < 10 rass4et = rass4et + 1 Loop End Function
[/vba]
Понятное дело не работает, ибо мало опыта. Благодарю за любую помощь.enjoymeforever
Т.е. логика такова: Если значение в ячейке 2-1 меньше 10, то к ячейке 1-1 прибавить 1 и повторять до тех пор, пока условие не выполнится.
Т.е. логика такова: Если значение в ячейке 2-1 меньше 10, то к ячейке 1-1 прибавить 1 и повторять до тех пор, пока условие не выполнится.enjoymeforever
Если уж через пользовательскую функцию, то можно так: [vba]
Код
Function KOEF(Изменяемая As Range, Контрольная As Range, Шаг, МахЗнач) Dim x#: x = 0 Do While Application.Evaluate(Replace(Контрольная.Formula, Изменяемая.Address(0, 0), Replace(CStr(Изменяемая.Value + x), ",", "."))) <= МахЗнач x = x + Шаг Loop KOEF = x / Шаг End Function
[/vba] Функция вернет коэффициент, который надо будет прибавить к первому числу ("Изменяемая") и, подразумевается, что в формуле("Контрольная ") используются относительные ссылки.
Если уж через пользовательскую функцию, то можно так: [vba]
Код
Function KOEF(Изменяемая As Range, Контрольная As Range, Шаг, МахЗнач) Dim x#: x = 0 Do While Application.Evaluate(Replace(Контрольная.Formula, Изменяемая.Address(0, 0), Replace(CStr(Изменяемая.Value + x), ",", "."))) <= МахЗнач x = x + Шаг Loop KOEF = x / Шаг End Function
[/vba] Функция вернет коэффициент, который надо будет прибавить к первому числу ("Изменяемая") и, подразумевается, что в формуле("Контрольная ") используются относительные ссылки.boa
Во вложении файл с пользовательской функцией из предыдущего поста.
P.S. Хотя, если рассматривать, что в ячейке "2-1" формула (как в примере) A1/7, то коэффициент можно найти без итераций.
(A1 + X * Step) / 7 > Max , где A1 - ячейка с исходной цифрой (17), X - искомый коэффициент, Max - Предел для считаемого результата (в примере = 10), Step - Шаг итераций (в примере = 1) тогда X > (7 * Max - A1) / Step X > (7 * 10 - 17) / 1 Ответ: X > 53, т.е. следующее число после 53 с шагом Step. 53 + 1 = 54
Во вложении файл с пользовательской функцией из предыдущего поста.
P.S. Хотя, если рассматривать, что в ячейке "2-1" формула (как в примере) A1/7, то коэффициент можно найти без итераций.
(A1 + X * Step) / 7 > Max , где A1 - ячейка с исходной цифрой (17), X - искомый коэффициент, Max - Предел для считаемого результата (в примере = 10), Step - Шаг итераций (в примере = 1) тогда X > (7 * Max - A1) / Step X > (7 * 10 - 17) / 1 Ответ: X > 53, т.е. следующее число после 53 с шагом Step. 53 + 1 = 54boa
enjoymeforever, Прикрутить к вшему файлу то, что в данной теме описано, я вам помогу за даром. Если файл большой, его можно сжать архиватором и поделить на тома по 100кб, что бы приатачить к сообщению. Остается вопрос конфиденциальности данных. Вам решать.
enjoymeforever, Прикрутить к вшему файлу то, что в данной теме описано, я вам помогу за даром. Если файл большой, его можно сжать архиватором и поделить на тома по 100кб, что бы приатачить к сообщению. Остается вопрос конфиденциальности данных. Вам решать.boa