Выпуск № 797 от 11.06.2009, 23:35
Администратор рассылки: Ерёмин А.А., Советник
В рассылке: подписчиков - 530, экспертов - 295
В номере: вопросов - 1, ответов - 1
Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке: оценить выпуск >>
Вопрос № 169058: Здравствуйте, господа Эксперты! Вопрос по MS Excel. Мне нужно написать несколько функций, принимающую один или два параметра и просматривающих ячейки вспомогательных листов со справочной информацией. Конкретно - коэффициенты к зарплате в завис...
Вопрос № 169058:
Здравствуйте, господа Эксперты!
Вопрос по MS Excel. Мне нужно написать несколько функций, принимающую один или два параметра и просматривающих ячейки вспомогательных листов со справочной информацией. Конкретно - коэффициенты к зарплате в зависимости от положения в разрядной сетке и стажа работы. Причём явно придётся организовать циклическую обработку внутри функций. Основы VBA знаю, но забыл, как всё это реализуется в MS Excel... Буду благодарен за любые подсказки
Отправлен: 06.06.2009, 23:06
Вопрос задал: Delph, Практикант
Всего ответов: 1 Страница вопроса >>
Отвечает Megaloman, Практикант :
Здравствуйте, Delph. Для начала создадим книгу с таблицами, на которой буду объяснять возможные решения Скачать пример можно здесь. Пример достаточно условен и годится лишь как иллюстрация ответа на Ваш вопрос, с той степенью определённости, как он поставлен.
На листе Ведомость я расположил список работников с их разрядным номером и стажем работы. Выше располагаю базовую величину, от которой считается
оклад.
оклад=базовую величину * тарифный коэффициент
На листе Тариф_сетка я расположил таблицу с номерами разрядов в сетке и соответствующее им значение тарифного коэффициента На листе За_стаж я расположил таблицу с значениями стажа и соответствующее им значение надбавки за стаж в % надбавкa за стаж = оклад*надбавкa за стаж(%)/100 список работников
1. Решение, использующее стандартную функцию ВПР Excel (описание см. в справочной системе Exc
el) Мне это решение нравится более всего.
Вычисляю оклад. Формула имеет вид (например, в ячейке F6):
=$F$3*ВПР(D6;Тариф_сетка!$B$5:$C$13;2;ЛОЖЬ)
Где $F$3 - Базовая величина Тариф_сетка!$B$5:$C$13 - таблица с тарифными коэффициентами D6 - тарифный разряд конкретного работника
Вычисляю надбавку за стаж
=F6*ВПР(E6;За_стаж!$C$7:$D$12;2;ИСТИНА)/100
где За_стаж!$C$7:$D$12 - таблица с граничными значениями стажа и соответствующими надбавками за стаж в процентах F6
- оклад E6 - кол-во отработанных лет
Задача решена -----------------------------------
Далее показываю примеры создания функций пользователя
2. На листе Вед_функ1 приведено решение, где справочные данные записаны в тексте функции.
ЗАСТАЖ = 0 For i = 1 To N2 If СТАЖ2 >= Годы(i) Then ЗАСТАЖ = СЧЕГО2 * Надбавка(i) / 100 Next
End Function
Напоминаю, чтобы записать функцию пользователя, необходимо (Excel 2002-2003): Меню Сер
вис - Макрос - Редактор VisualBasic - Insert - Module - В открывшемся справа окне пишем свои функции
Функция ОКЛАД(База1, Разряд1) принимает в аргументах значение базовой величины и тарифный разряд конкретного работника Вычисляю оклад. Формула имеет вид (например, в ячейке F6):
=ОКЛАД($F$3;D6)
Функция ЗАСТАЖ(СЧЕГО2, СТАЖ2) принимает в аргументах значение оклада и стажа. Вычисляю надбавку за стаж (например, в ячейке G6):
=ЗАСТАЖ(F6;E6)
Задача решена -----------------------------------
3.
На листе Вед_функ2 приведено решение, где справочные данные берутся из таблиц в книге.
Код:
Function ОКЛАДТАБ(База3, Разряд3, Сетка3 As Variant)
ОКЛАДТАБ = База3 * Сетка3(Разряд3)
End Function
Function ЗАСТАЖТАБ(СЧЕГО3, СТАЖ3, ГодыНадбавка As Variant)
ЗАСТАЖТАБ = 0 j = 1 Do While ГодыНадбавка(j) <> "" If СТАЖ3 >= ГодыНадбавка(j) Then ЗАСТАЖТАБ = СЧЕГО3 * ГодыНадбавка(j + 1) / 100 j = j + 2 Loop
End Function
Функция ОКЛАДТАБ(База3, Разряд3, Сетка3 As Variant) принимает в аргументах значение базовой величины, тарифный разряд конкретного работника, массив тарифных коэффициентов Вычисляю оклад. Формула имеет вид (например,
в ячейке F6):
=ОКЛАДТАБ($F$3;D6;Тариф_сетка!$C$5:$C$13)
Функция ЗАСТАЖТАБ(СЧЕГО3, СТАЖ3, ГодыНадбавка As Variant) принимает в аргументах значение оклада, стажа и массив соответствия стажа (на нечётных местах) и надбавки за стаж в процентах (на четных местах). Вычисляю надбавку за стаж (например, в ячейке G6):
=ЗАСТАЖТАБ(F6;E6;За_стаж!$C$7:$D$12)
Задача решена ----------------------------------- Итак, я привёл три возможных приёма реше
ния Вашей задачи. Похоже, примеры я бы мог продолжить и далее
----- Нет времени на медленные танцы
Ответ отправил: Megaloman, Практикант
Ответ отправлен: 08.06.2009, 18:17
Оценка ответа: 5 Комментарий к оценке: Большое спасибо! Конкретные примеры часто оказываются намного эффективнее длинной теории, поскольку наглядно показывают, каким образом может выглядеть решение.
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 250632
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке: оценить выпуск >>
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.