Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 19.11.2008, 16:07   #1
Eugene***
Новичок
Джуниор
 
Регистрация: 19.11.2008
Сообщений: 1
По умолчанию Помогите с расчетами в Excel

Подскажите, пожалуйста, решить следующий вопрос:
в Excel есть столбец со значением стоимости услуг. Стоимость периодически увеличивается на определенный коэффициент по отношению к предыдущему значению. Как сделать так, чтобы не производить несколько манипуляций, а просто менять значение коэффициента в одной ячейке и видеть в столбце стоимости новое значение (с учетом того, что при введении нового коэфффициента, стоимость будет изменяться на величину этого коэффициента)?
Eugene*** вне форума
Старый 19.11.2008, 22:08   #2
owl-ka
Пользователь
 
Регистрация: 17.11.2008
Сообщений: 18
По умолчанию

Иногда возникает надобность добавить одно число к куче разных ячеек, или домножить их на какой-то коэффициент.

' MultiplicateSelection
' домножает выделенные ячейки на число с округлением до десятков

Sub MultiplicateSelection()
' объявляем переменные
Dim Koef As Variant, cl As Range
' запрашиваем у пользователя число
Koef = InputBox("Умножить на", "Домножение выделения")
' если ничего не введено или нажата ОТМЕНА, выходим из процедуры
If Koef = "" Then Exit Sub

' Помните о пользователе!
' Простейшей заменой решается проблема с десятичной точкой
' (в системе разделителем установлена запятая, если введена
' точка, здесь она заменяется на запятую)
Koef = Replace(Koef, ".", ",")

' опять перебираем выделенные ячейки
For Each cl In Selection
' указываем объект, с которым будем работать
With cl
' кучка возможно не нужных вам проверок и вычисление
If .Value <> "" And .Locked = False And _
CStr(.Formula) = CStr(.Value) Then
.Value = Round((.Value * CDbl(Koef)) / 10) * 10
End If
' заканчиваем работу с указанным объектом
End With
' закрываем цикл
Next
' выходим из процедуры
End Sub

InputBox - обычное окошко для вводя текста пользователем. Функция возвращает пустую строку, если была нажата кнопка ОК при пустой строке ввода, или нажата Отмена.

Replace заменяет в строке одну последовательность символов на другую. Здесь используется для того, чтобы пользователю не приходилось думать о раскладке. Неважно, что он напечатает - десятичную точку или запятую, вычисления пройдут без ошибки.

Далее уже знакомый перебор выделенных ячеек.

Для чего нужна конструкция With ... End With? Если в каком-то блоке кода вы активно работаете с одним объектом, есть смысл указать его после слова With, а дальше вместо Объект.Свойство писать просто .Свойство. Это делает код более читаемым, а также, насколько я знаю, несколько ускоряет исполнение.

Я специально оставил свои проверки свойств ячейки, для интереса. В одном из моих шаблонов лист организован таким образом, что я могу выделить несколько строк целиком и запустить эту процедуру. При этом пропускаются пустые ячейки (.Value <> ""), защищенные от изменений (.Locked = False), и содержащие формулы (CStr(.Formula) = CStr(.Value)). Все остальные изменяются.

Round - округление. Поскольку округление происходит только до целых, приходится делить, а потом умножать на 10.

И еще две функции: CStr - конвертация в строку, в данном случае для корректного сравнения. CDbl - приведение к вещественному типу Double, вводит-то пользователь строку, а нам числа умножать надо. Впрочем, Visual Basic редко требует явное преобразование типов, справляется сам, но так - аккуратнее.

Специально не разбираю аргументы функций. Читайте документацию и экспериментируйте, это лучший способ понять.

Это с http://doitq.ru/
Я не специалист, я только ищу для себя ту информацию, которая может пригодиться в работе. Может это то, что ты ищешь.
owl-ka вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите в excel Norik-74 Microsoft Office Excel 2 04.06.2008 11:27
Помогите с заданиями в Excel Arxan Помощь студентам 5 15.05.2008 20:29
Помогите! Глючит Excel Pithon Microsoft Office Excel 8 20.02.2008 07:47
Помогите по Excel пожалуйста лопух Microsoft Office Excel 2 04.11.2007 17:25