Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Пакет Microsoft Office

  Все выпуски  

RusFAQ.ru: Пакет Microsoft Office


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

ValeryN
Статус: Академик
Рейтинг: 293
∙ повысить рейтинг >>
Windessy
Статус: Студент
Рейтинг: 178
∙ повысить рейтинг >>
Botsman
Статус: Специалист
Рейтинг: 166
∙ повысить рейтинг >>

∙ / КОМПЬЮТЕРЫ И ПО / Помощь пользователю ПО / Пакет Microsoft Office

Выпуск № 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 приведено решение, где справочные данные записаны в тексте функции.
Код:
Function ОКЛАД(База1, Разряд1)

N1 = 9
ReDim Сетка(1 To N1) '

Сетка(1) = 1.05
Сетка(2) = 2.8
Сетка(3) = 3.5
Сетка(4) = 4.06
Сетка(5) = 5.5
Сетка(6) = 6.6
Сетка(7) = 7.7
Сетка(8) = 8.4
Сетка(9) = 10

ОКЛАД = База1 * Сетка(Разряд1)

End Function

Function ЗАСТАЖ(СЧЕГО2, СТАЖ2)

N2 = 5
ReDim Годы(1 To N2), Надбавка(1 To N2)

Годы(1) = 0 ' Отработанные годы
Годы(2) = 5
Годы(3) = 10
Годы(4) = 15
Годы(5) = 20

Надбавка(1) = 0 ' Проценты надбавок за стаж
Надбавка(2) = 5
Надбавка(3) = 15
Надбавка(4) = 20
Надбавка(5) = 25


ЗАСТАЖ = 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 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!



    Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке:
    оценить выпуск >>

    подать вопрос экспертам этой рассылки >>

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.1 RC от 10.06.2009

    В избранное