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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2011, 17:44   #11
GRS1988
Пользователь
 
Регистрация: 10.02.2010
Сообщений: 18
Печаль

Цитата:
Сообщение от 3BEPOBOY Посмотреть сообщение
GRS1988
я думаю просто нужно сделать функцию как в шаблоне. Это не трудно, будете ее использовать.
Только сперва нужно доразобраться в сумме этой вашей, я так до конца и не понял что к чему.
В шаблоне есть строка "РЕБЕНОК ПО ЧИСЛУ РОЖДЕННЫХ МАТЕРЬЮ" - это типа 1ый 2ой или 3ий ребенок?
Допустим. Вы написали как считать для первого. Возьмем тогда строку 704, там получается 120 дней 2009г и 242 2010г. Считаем: 120*60,42+242*66,46=23333,72 а в строке сумма стоит 23850,80. Не сходится...
Ок, берем скажем строку 710. 09.09.2009 - 31.08.2010. 114*60,42+242*66,46=22971,20 что также не сходится с 23476,18.
То есть либо я дурак либо такой вариант не годится. Как считать на второго вы вообще не написали. А на третьего и последующего я так понимаю то же что и на первого, только умножить на 2?

Вобщем поясните, а то я не пойму никак.
Спасибо за время которую вы мне уделяете....
просмотрите файл... мне трудно объяснить...
Вложения
Тип файла: rar Книга1.rar (5.3 Кб, 9 просмотров)
GRS1988 вне форума Ответить с цитированием
Старый 27.01.2011, 21:42   #12
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Может, как-то так? Кнопка "Считаем".
Вложения
Тип файла: zip ШАБЛОН-2.zip (14.8 Кб, 12 просмотров)
nilem вне форума Ответить с цитированием
Старый 28.01.2011, 11:42   #13
GRS1988
Пользователь
 
Регистрация: 10.02.2010
Сообщений: 18
По умолчанию

Цитата:
Сообщение от nilem Посмотреть сообщение
Может, как-то так? Кнопка "Считаем".
Именно так! nilem можно ли сделать так чтобы сумма на 2,3,4 и.т - ребенка в столбце Sum умножалось на два посмотрите в приложении... Огромное спасибо вы и так мне очень помогли...
Вложения
Тип файла: rar 7777.rar (13.3 Кб, 6 просмотров)
GRS1988 вне форума Ответить с цитированием
Старый 28.01.2011, 12:32   #14
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Вот, добавил еще функцию Posobie().
Вложения
Тип файла: zip ШАБЛОН-3.zip (15.4 Кб, 9 просмотров)
nilem вне форума Ответить с цитированием
Старый 28.01.2011, 13:52   #15
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

GRS1988
а вы уверены что все правильно считается? я не выдержал и из любопытства сломал пароль в фашем файле, там вот что сидит:
Код:
Public Function socViplata(dateBegin As Date, dateEnd As Date, bebyNum As Integer) As Double
  Dim i As Integer, j As Integer
  Dim period
  Dim summa As Double
  Dim tmpDBEG As Date, tmpDEND As Date
  Dim n As Byte   ' количество периодов
  If dateBegin > dateEnd Then socViplata = 1000000000: Exit Function
  period = Array(#1/1/2007#, #1/1/2008#, #7/1/2008#, #1/1/2009#, #1/1/2010#)
  tmpDBEG = dateBegin
  summa = 0
  n = 5
   
  For i = n To 1 Step -1
    If dateBegin >= period(i) Then
        For j = i To n
            If j = n Then
                tmpDEND = dateEnd
                summa = summa + Raschet(tmpDBEG, tmpDEND, bebyNum, j)
                Exit For
            End If
            If dateEnd < period(j + 1) Then
                tmpDEND = dateEnd
                summa = summa + Raschet(tmpDBEG, tmpDEND, bebyNum, j)
                Exit For
            Else
                tmpDEND = period(j + 1) - 1
                summa = summa + Raschet(tmpDBEG, tmpDEND, bebyNum, j)
                tmpDBEG = period(j + 1)
            End If
        Next j
        Exit For
    End If
  Next i
  
  socViplata = summa 'sum_1 + sum_2 + sum_3 + sum_4
End Function

Private Function Raschet(DBEG As Date, DEND As Date, beby_N As Integer, p As Integer) As Double
  Dim dayToMon   '(1 To 12)  'значения массива хранят количество дней в каждом из 12 месяцев
  Dim plata As Double
  Dim plataNum As Byte
  Dim summa As Double, sumInDayBeg As Double, sumInDayEnd As Double
  Dim indeks As Double
  plataNum = Month(DEND) - Month(DBEG)
  Select Case p
    Case 1  '******  01.01.2007 -  31.12.2007  ***************
        dayToMon = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
        plata = 1500: indeks = 1
    Case 2  '******  01.01.2008 -  30.06.2008  ***************
        dayToMon = Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
        plata = 1500: indeks = 1.085
    Case 3  '******  01.07.2008 -  31.12.2008  ***************
        dayToMon = Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
        plata = 1627.5: indeks = 1.0185
    Case 4  '******  01.01.2009 -  31.12.2009  ***************
        dayToMon = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
        plata = 1657.61: indeks = 1.13
    Case 5  '******  01.01.2010 -  ??.??.20??  ***************
        dayToMon = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
        plata = 1873.1: indeks = 1.1
  End Select
 
 sumInDayBeg = plata / dayToMon(Month(DBEG))
 sumInDayEnd = plata / dayToMon(Month(DEND))
 If plataNum = 0 Then
    summa = sumInDayBeg * (Day(DEND) - Day(DBEG) + 1)
 Else
    summa = sumInDayBeg * (dayToMon(Month(DBEG)) - Day(DBEG) + 1) + _
            plata * (plataNum - 1) + sumInDayEnd * Day(DEND)
 End If
 
 summa = summa * indeks
 If beby_N > 1 Then summa = summa * 2
 Raschet = Round(summa, 2)
End Function
по моему есть еще что-то, о чем вы не сказали. Сейчас некогда немного разбираться в коде, посмотрю попозже.
3BEPOBOY вне форума Ответить с цитированием
Старый 28.01.2011, 17:05   #16
GRS1988
Пользователь
 
Регистрация: 10.02.2010
Сообщений: 18
По умолчанию

Цитата:
Сообщение от 3BEPOBOY Посмотреть сообщение
GRS1988
а вы уверены что все правильно считается? я не выдержал и из любопытства сломал пароль в фашем файле, там вот что сидит:
Код:
Public Function socViplata(dateBegin As Date, dateEnd As Date, bebyNum As Integer) As Double
  Dim i As Integer, j As Integer
  Dim period
  Dim summa As Double
  Dim tmpDBEG As Date, tmpDEND As Date
  Dim n As Byte   ' количество периодов
  If dateBegin > dateEnd Then socViplata = 1000000000: Exit Function
  period = Array(#1/1/2007#, #1/1/2008#, #7/1/2008#, #1/1/2009#, #1/1/2010#)
  tmpDBEG = dateBegin
  summa = 0
  n = 5
   
  For i = n To 1 Step -1
    If dateBegin >= period(i) Then
        For j = i To n
            If j = n Then
                tmpDEND = dateEnd
                summa = summa + Raschet(tmpDBEG, tmpDEND, bebyNum, j)
                Exit For
            End If
            If dateEnd < period(j + 1) Then
                tmpDEND = dateEnd
                summa = summa + Raschet(tmpDBEG, tmpDEND, bebyNum, j)
                Exit For
            Else
                tmpDEND = period(j + 1) - 1
                summa = summa + Raschet(tmpDBEG, tmpDEND, bebyNum, j)
                tmpDBEG = period(j + 1)
            End If
        Next j
        Exit For
    End If
  Next i
  
  socViplata = summa 'sum_1 + sum_2 + sum_3 + sum_4
End Function

Private Function Raschet(DBEG As Date, DEND As Date, beby_N As Integer, p As Integer) As Double
  Dim dayToMon   '(1 To 12)  'значения массива хранят количество дней в каждом из 12 месяцев
  Dim plata As Double
  Dim plataNum As Byte
  Dim summa As Double, sumInDayBeg As Double, sumInDayEnd As Double
  Dim indeks As Double
  plataNum = Month(DEND) - Month(DBEG)
  Select Case p
    Case 1  '******  01.01.2007 -  31.12.2007  ***************
        dayToMon = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
        plata = 1500: indeks = 1
    Case 2  '******  01.01.2008 -  30.06.2008  ***************
        dayToMon = Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
        plata = 1500: indeks = 1.085
    Case 3  '******  01.07.2008 -  31.12.2008  ***************
        dayToMon = Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
        plata = 1627.5: indeks = 1.0185
    Case 4  '******  01.01.2009 -  31.12.2009  ***************
        dayToMon = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
        plata = 1657.61: indeks = 1.13
    Case 5  '******  01.01.2010 -  ??.??.20??  ***************
        dayToMon = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
        plata = 1873.1: indeks = 1.1
  End Select
 
 sumInDayBeg = plata / dayToMon(Month(DBEG))
 sumInDayEnd = plata / dayToMon(Month(DEND))
 If plataNum = 0 Then
    summa = sumInDayBeg * (Day(DEND) - Day(DBEG) + 1)
 Else
    summa = sumInDayBeg * (dayToMon(Month(DBEG)) - Day(DBEG) + 1) + _
            plata * (plataNum - 1) + sumInDayEnd * Day(DEND)
 End If
 
 summa = summa * indeks
 If beby_N > 1 Then summa = summa * 2
 Raschet = Round(summa, 2)
End Function
по моему есть еще что-то, о чем вы не сказали. Сейчас некогда немного разбираться в коде, посмотрю попозже.


Тот который сделал забыл password и не смог взломать, а вы сделали круто!!! 3BEPOBOY вы не могли бы мне без пароля скинуть этот файл...
Мне конечно не удобно просить но вы не могли бы добавить туда индексацию 2011 года что составляет 6,5 %
GRS1988 вне форума Ответить с цитированием
Старый 07.02.2011, 11:46   #17
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

Цитата:
Сообщение от GRS1988
но вы не могли бы добавить туда индексацию 2011 года что составляет 6,5 %
не смог. Я не понял куда его вставлять. изменил файл, но данные для 2011 поставил такие же как на 2010. Там списочек то довольно скромный
Код:
plata = 1873.1: indeks = 1.1
но к чему 6.5 отнести я не понял. Сами подставите значения, найдете эту строку и измените в модуле "viplata".
Пароль файлы по прежнему спрашивают, но поле заполнять не нужно, просто жмете ОК, все откроется.

вот вроде все
Вложения
Тип файла: rar Desktop.rar (73.6 Кб, 10 просмотров)
3BEPOBOY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сумма по интервалам o5tion Microsoft Office Excel 8 02.09.2010 16:35
Вычисление времени макросом sasha_prof Microsoft Office Excel 4 02.04.2010 11:35
Поиск по интервалам VBA МаргариткА Microsoft Office Excel 3 06.12.2009 23:18
подсчет значений, удовлетворяющих интервалам treim Microsoft Office Excel 2 22.11.2008 13:37
указатель мыши автоматически должен совершать клик по заданному месту на экране, через промежуток времени Deefrost Qt и кроссплатформенное программирование С/С++ 5 16.05.2008 20:25