Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828

График рабочих смен

24.07.2018, 09:39. Показов 2851. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, не соображу как сделать шапку макросом МЕСЯЦ/ДАТА(день недели+число). В примере показано. Спасибо огромное
Вложения
Тип файла: zip Пример1.zip (20.0 Кб, 28 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.07.2018, 09:39
Ответы с готовыми решениями:

DataTable - График рабочих смен на 14 дней в разных салонах
Добрый день. В DataTable выводится список торговых точек и ещё 14 колонок это дата. Салон |30.05.2018| 31.05.2018| 01.06.2018 Точка1|...

Определить доход, полученный за N смен. Число смен вводится в режиме диалога
Автобус за смену делает от 10 до 15 рейсов (случайное число). За рейс перевозит от 130 до 230 пассажиров (случайное число). Стоимость...

Фото своих рабочих или домашне-рабочих мест.
Не знаю точно ли я по ветке попал но вроде больше некуда. Давайте размещать Фото своих рабочих мест, думаю многим будет интересно. Вот...

43
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
24.07.2018, 11:14
Пример для одной ячейки вставкой формулы:
Visual Basic
1
     Cells(5, 1).FormulaR1C1 = "=TEXT(R[-1]C,""ддд"")"
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
24.07.2018, 12:21  [ТС]
toiai, не знаю как быть с датами. Как закончить цикл
Visual Basic
1
2
3
4
5
Sub b()
For i = 1 To DatePart("y", DateSerial(2018, 12, 31))
Cells(3, i) = .................
Next i
End Sub
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,670
24.07.2018, 12:32
день недели и число из даты можно выдернуть так
Visual Basic
1
2
3
Dim dat As Date
dat = Now()
MsgBox Format(dat, "ddd dd")
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
24.07.2018, 12:37  [ТС]
snipe,спасибо, работает.. а первый день года как найти...у меня с 1900 отсчет идет
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,670
24.07.2018, 12:45
а я так и не понял откуда вы дату берете
можно так
Visual Basic
1
2
dim asd as date
asd=cdate("01.01." & Year(date))' 1 января текущего года по системной дате компа
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
24.07.2018, 13:18  [ТС]
snipe, toiai, сделал....а как сделать чтобы название месяца объединяло ячейки дней этого месяца? как в примере показал
Visual Basic
1
2
3
4
5
Sub b()
For i = 1 To DatePart("y", DateSerial(2018, 12, 31))
Cells(3, i) = Format((CDate("01.01." & Year(Date)) - 1 + i), "ddd dd.mmm.yyyy")
Next i
End Sub
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
24.07.2018, 14:27
Предложу как вариант:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub b()
    Dim m&, i&, j&
    dn = CDate("01.01." & Year(Date))
    dk = CDate("03.03." & Year(Date))
    m = Month(dn)
    i = 1: j = 1
    For d = dn To dk
        Cells(3, i) = d
        Cells(3, i).NumberFormat = "ddd dd/mm/yyyy"
        If m <> Month(d) Then
            Cells(2, j) = d - 1
            Cells(2, j).NumberFormat = "Mmmm"
            With Range(Cells(2, j), Cells(2, i - 1))
                .HorizontalAlignment = xlCenter
                .Merge
            End With
            m = Month(d)
            j = i
        End If
        i = i + 1
    Next
End Sub
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
24.07.2018, 15:52  [ТС]
toiai, Разлиновал таблицу, не могу понять почему последний месяц не обрабатывает.во второй строке одним словом который. 2 месяца только

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Sub b()
    Application.ScreenUpdating = False
Dim m&, i&, j&
'If (Cells(3, 1)) <> "" Then Exit Sub
    dn = CDate("01.01." & Year(Date))
    dk = CDate("31.03." & Year(Date))
    m = Month(dn)
    i = 1: j = 1
    For d = dn To dk
        With (Cells(3, i))
       Cells(3, i) = d
          .HorizontalAlignment = xlCenter
          .Borders(xlEdgeRight).LineStyle = xlContinuous 'право
          .Borders(xlEdgeLeft).LineStyle = xlContinuous 'лево
          .Borders(xlEdgeTop).LineStyle = xlContinuous 'низ
          .Borders(xlEdgeBottom).LineStyle = xlContinuous 'верх
              .Merge
                .Orientation = 90
                 End With
        Cells(3, i).NumberFormat = "ddd dd/mm/yyyy"
        If m <> Month(d) Then
            Cells(2, j) = d - 1
            Cells(2, j).NumberFormat = "Mmmm"
            With Range(Cells(2, j), Cells(2, i - 1))
 
        .HorizontalAlignment = xlCenter
        .Borders(xlEdgeRight).LineStyle = xlContinuous
        .Borders(xlEdgeLeft).LineStyle = xlContinuous
        .Borders(xlEdgeTop).LineStyle = xlContinuous
                      .Merge
                End With
            m = Month(d)
            j = i
        End If
        i = i + 1
    Next
     Application.ScreenUpdating = True
End Sub
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
24.07.2018, 17:17
Замени строку
Visual Basic
1
dk = CDate("31.03." & Year(Date))
на
Visual Basic
1
dk = CDate("01.01." & Year(Date)+1)
Добавлено через 9 минут
Цитата Сообщение от mor_sergey Посмотреть сообщение
.Borders(xlEdgeRight).LineStyle = xlContinuous 'право
* * * * *.Borders(xlEdgeLeft).LineStyle = xlContinuous 'лево
* * * * *.Borders(xlEdgeTop).LineStyle = xlContinuous 'низ
* * * * *.Borders(xlEdgeBottom).LineStyle = xlContinuous 'верх
можно заменить на
Visual Basic
1
.Borders.LineStyle = xlContinuous
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
24.07.2018, 18:18  [ТС]
toiai, все работает, но мне надо таблицу на 1 квартал (первые 3 мес)...во вторую строку заносятся названия первых двух...а если диапазон расширять, то названия пишутся до предпоследнего. Не найду чего исправить.
Code
1
dk = CDate("01.01." & Year(Date)+1)
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
24.07.2018, 18:24
На 1 квартал
Visual Basic
1
2
    dn = CDate("01.01." & Year(Date))
    dk = CDate("01.04." & Year(Date))
2 квартал
Visual Basic
1
2
    dn = CDate("01.04." & Year(Date))
    dk = CDate("01.07." & Year(Date))
и т.д.
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
24.07.2018, 18:54  [ТС]
toiai, все здорово. Надо теперь последний день убрать ) не знаю как это написать...когда макрос работает отладчик запускал. не пойму как 2 и 3 строку синхронизировать. Не знаю как сформулировать по понятней

Добавлено через 6 минут
1 апреля убрать нужно
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
24.07.2018, 19:17
Тогда 1 квартал
Visual Basic
1
2
dn = CDate("01.01." & Year(Date))
    dk = CDate("31.03." & Year(Date))
2 квартал
Visual Basic
1
2
dn = CDate("01.04." & Year(Date))
    dk = CDate("30.06." & Year(Date))
и заменить строку
Visual Basic
1
If m <> Month(d) Then
на
Visual Basic
1
If m <> Month(d) or d=dk Then
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
24.07.2018, 19:39  [ТС]
toiai, с Вашим кодом посмотрите как работает. Все перепробывал. чего-то тут не так
Миниатюры
График рабочих смен  
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
24.07.2018, 19:46
Цитата Сообщение от mor_sergey Посмотреть сообщение
чего-то тут не так
что тут не так, нужно на голове стоять чтобы все это прочесть
Миниатюры
График рабочих смен  
2
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
24.07.2018, 19:52
Есть рудименты в коде, вот вариант только добавь свое оформление:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub b()
    Dim m&, i&, j&
    dn = CDate("01.01." & Year(Date))
    dk = CDate("31.03." & Year(Date))
    m = Month(dn)
    i = 1: j = 1
    For d = dn To dk
        Cells(3, i) = d
        Cells(3, i).NumberFormat = "ddd dd/mm/yyyy"
        If m <> Month(d) Or d = dk Then
            If d = dk Then d = d + 1: i = i + 1
            Cells(2, j) = d - 1
            Cells(2, j).NumberFormat = "Mmmm"
            With Range(Cells(2, j), Cells(2, i - 1))
                .HorizontalAlignment = xlCenter
                .Merge
            End With
            m = Month(d)
            j = i
        End If
        i = i + 1
    Next
End Sub
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
24.07.2018, 20:02  [ТС]
toiai, работает.......заменил строки строками. Спасибо

Visual Basic
1
2
3
If m <> Month(d) Or d = dk Then
            If d = dk Then d = d + 1: i = i + 1
            Cells(2, j) = d - 1
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,670
25.07.2018, 02:07
вах вах стоит отлучиться на сон и все
вот тут набор функций для работы с датами
к сожалению osmor не предусмотрел дни недели, но остальное вроде все есть
http://hiprog.com/index.php?op... =251661640
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
25.07.2018, 06:27  [ТС]
snipe, ссылка на прогнозы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.07.2018, 06:27
Помогаю со студенческими работами здесь

Известен список рабочих и их месячный заработок. Напечатать список рабочих в порядке убывания зарплаты.
Составьте пожалуйста программу в среде обитания C# вообще не понимаю как делать, хочу увидеть решение и понять. Известен список рабочих...

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

Подсчет дневных смен
Привет всем, есть таблица в Access, и приложение в делфи. все подключил, но теперь нужно подсчитать количество дневных смен, и вывести в...

Реализация последовательной смен окон
Просмотрел множество уроков и книг по Qt, но не нашел как делать смену окон в приложении. Для более лучшего понимания моей проблемы...

Подсчет количества смен знака
Сгенерировать матрицу размерности MхN (M, N вводятся пользователем) со случайными ненулевыми значениями в пределах . Сделать проход по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru