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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2015, 13:11   #1
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию Рабочие дни двух работников

Всем привет!!

Как в макросе прописать, рабочие дни двух работников?

Условно, назовём работников - Оля и Надя(работают по неделям).

В августе у Нади рабочие дни
31(Июль), 1, 2, 10-16, 24-30, ....

У Оли соответственно
3-9, 17-23, 31 - 06(сентябрь)...

Почему у меня так с датами, пересекаются дни других месяцов, потому, что я работаю три дня в неделю - понедельник, среда и пятница, поэтому данные мне поступают с запаздывнием.

В ручную - каждый месяц метить график, неохота )

Если я открыл свой рабочий лист - имя месяца с датой, ввёл в яч. D3 - D367 с шагом 28, данные и макрос сообщил мне, кто в это число работа л(ет), Оля или Надя.

Главное - как на вечно прописать условие дат, причем не от системной даты, а от имени листа.
Имя листа - всегда имя месяца.

В прищепке видно как они работают.

В столбце С(Д-Н) - дни месяца от них и привязка графика...??
Красные даты - всегда понедельник и данные поступают за три предыдущих дня.
Спасибо.
Вложения
Тип файла: xlsx zxc.xlsx (41.8 Кб, 13 просмотров)
valerij вне форума Ответить с цитированием
Старый 13.08.2015, 13:42   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в А1 - любая дата
а любую ячейку (только не в А1)
Код:
=ЕСЛИ(ОСТАТ(ЦЕЛОЕ((A1+5)/7);2);"Надя";"Оля")
там и будет вечный календарь выходов на смену для Оли и Нади.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 13.08.2015, 14:11   #3
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
в А1 - любая дата
а любую ячейку (только не в А1)
Код:
=ЕСЛИ(ОСТАТ(ЦЕЛОЕ((A1+5)/7);2);"Надя";"Оля")
там и будет вечный календарь выходов на смену для Оли и Нади.
Игорь у меня нет пустых ячеек, мне надо привязать к имеющимся.

Но я попробовал на файле zxc, В2, изменив А1(=ЕСЛИ(ОСТАТ(ЦЕЛОЕ((C3+5)/7);2);"Надя";"Оля")) в 03.08.15 получилось - Надя, а в 05.08.15(=ЕСЛИ(ОСТАТ(ЦЕЛОЕ((C31+5)/7);2);"Надя";"Оля")) - Надя, а должна быть Оля - ошибка.
valerij вне форума Ответить с цитированием
Старый 13.08.2015, 14:20   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

для 05.08.2015 формула пишет Оля...

поищи ошибку у себя)) или покажи мне файл, ячейку, где эта формула выдает ошибку
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 13.08.2015, 14:24   #5
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
для 05.08.2015 формула пишет Оля...

поищи ошибку у себя)) или покажи мне файл, ячейку, где эта формула выдает ошибку
Смотри, там ошибки красным.
Вложения
Тип файла: xlsx 00.xlsx (42.4 Кб, 15 просмотров)
valerij вне форума Ответить с цитированием
Старый 13.08.2015, 14:39   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
в А1 - любая дата
"любая дата " - это, например, 13.08.2015

31 - это тоже дата = 31.01.1900г. - это Надина смена (была)
1 - это 01.01.1900г. - это Олина смена (была)
2 - это -1.01.1900г. - снован Надина смена и будет до 8 (по твоему календарю или до 08.01.1900г) по принятому в Ексель календарю
а с 9 по 15 - будут снова Олины смены
16 - 22 - Надя
23 - 29 - Оля
30,31, 01 - 05 февр.1900г - Надя

Удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 13.08.2015, 15:04   #7
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
"любая дата " - это, например, 13.08.2015
Я тебя понял, привязка к моей дате, когда я получаю данные, но не к фактически когда один из них работник работал.
03.08.15 - дата моя, а получил данные за 31, 1 и 2 число, а за эти числа работала Надя, а 03.08.15 естественно работает Оля.

По другому никак нельзя решить??
valerij вне форума Ответить с цитированием
Старый 13.08.2015, 15:30   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

31-е число (в Ексель) - это 31.01.1900 года
1-е число - это 01.01.1900 года
понимаю, что это никак не вяжется с твоей системой летоисчисления, но так принято в Ексель!

напиши Биллу Гейтсу, может он даст распоряжение программистам и они пересмотрят этот подход, чтобы все аккуратненько вписывалось в твой файл, в конце концов - они работают для нужд потребителя, а не для собственного самоутверждения
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 13.08.2015, 17:12   #9
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
31-е число (в Ексель) - это 31.01.1900 года
1-е число - это 01.01.1900 года
понимаю, что это никак не вяжется с твоей системой летоисчисления
Это не мой, а твой, твой макрос так мне расставляет и очень классно ставит, возможно к нему можно привязаться?
Код:
Sub даты()
Application.EnableEvents = False
c = 3: g = 3: cc = 2: gg = 2
        For L = 1 To 3
Sheets(L).Select
For iCount& = 0 To 13
If Application.Weekday([e1].Offset(iCount& * 28), 2) = 1 Then
        For i = 3 To 20
        Range("C" & i).Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - c)
        c = c - 1: If c = 0 Then c = 3
        If i = 6 Or i = 7 Or i > 10 And i < 14 Or i > 16 Then GoTo 1
        Range("G" & i).Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - g)
        g = g - 1: If g = 0 Then g = 3
1:      Next
Else
    For ii = 3 To 19
        If ii = 5 Or ii = 8 Or ii = 11 Or ii = 14 Or ii = 17 Then GoTo m
            Range("C" & ii).Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - cc)
                cc = cc - 1: If cc = 0 Then cc = 2
m:      If ii > 4 And ii < 8 Or ii > 9 And ii < 14 Or ii > 15 Then GoTo 3
            Range("G" & ii).Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - gg)
                gg = gg - 1: If gg = 0 Then gg = 2
3:  Next
End If
    Next iCount&
Next L
Application.EnableEvents = True
End Sub
valerij вне форума Ответить с цитированием
Старый 13.08.2015, 17:17   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

это я писал в бреду (не приходя в сознание)

к этому привязаться невозможно, я непосредственно сейчас пытаюсь от этого отвязаться посредством алкоголя

...втягиваюсь. Валера, на меня не рассчитывай!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
рабочие дни в определенный месяц opoiknet Microsoft Office Excel 7 29.08.2012 19:50
Рабочие листы... MARine_life Microsoft Office Excel 6 05.11.2011 14:01
Билиотека для работников колледжа Фаризочка БД в Delphi 1 06.06.2011 23:52
из диапазона двух выбранных дат, отдельно вывести(перечислить) дни, месяцы, годы Alex003 Помощь студентам 5 12.05.2010 22:03