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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2015, 08:31   #1
Kot070
Форумчанин
 
Регистрация: 22.12.2012
Сообщений: 139
По умолчанию Распределение по датам

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

Например в любой строке в ячейке добавили запись 10.10.2015 сначала макрос должен понять что нужно искать в таблице с 2015 годом, затем что месяц октябрь и туда вставить определенные данные
Kot070 вне форума Ответить с цитированием
Старый 15.12.2015, 09:34   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Лучше приложить файл-примера что Вы на выходе хотите получить.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 15.12.2015, 16:37   #3
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию …Хоть шерсти клок

Неделю назад делал такую болванку для анализа даты и времени (не пора ли на обед).

Просто в качестве опытного образца:
Вложения
Тип файла: xls Время обеда.xls (51.0 Кб, 19 просмотров)
Sasha_Smirnov вне форума Ответить с цитированием
Старый 16.12.2015, 08:36   #4
Kot070
Форумчанин
 
Регистрация: 22.12.2012
Сообщений: 139
По умолчанию

Вот такой на выходе должен получиться файлик
Вложения
Тип файла: xlsx tst.xlsx (8.4 Кб, 23 просмотров)
Kot070 вне форума Ответить с цитированием
Старый 16.12.2015, 09:14   #5
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Можно формулами сделать. Или необходимо макросом?
если даты будут не 2015 года, то надо еще условие на год добавить
Вложения
Тип файла: xlsx Копия tst.xlsx (10.4 Кб, 11 просмотров)
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 16.12.2015, 13:40   #6
Kot070
Форумчанин
 
Регистрация: 22.12.2012
Сообщений: 139
По умолчанию

лучше конечно если будет макрос
Kot070 вне форума Ответить с цитированием
Старый 16.12.2015, 15:03   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

принимаем что в столбце А даты йдут строка в строку.
Код:
Sub smth()
    Dim r As Long, i As Long
    Dim mon1 As Byte, mon2 As Byte
    r = 4
    Do While Cells(r, 1) <> ""
      mon1 = Month(CDate(Cells(r, 1).Value))
      mon2 = Month(CDate(Cells(r, 2).Value))
      For i = 1 To 12
        If i >= mon1 And i <= mon2 Then Cells(r, i + 3) = Cells(r, 3)
      Next
      r = r + 1
    Loop
End Sub
Код:
Sub smth()
    Dim r As Long, i As Long
    Dim mon1 As Byte, mon2 As Byte, y1 As Integer, y2 As Integer
    r = 4
    Do While Cells(r, 1) <> ""
      mon1 = Month(CDate(Cells(r, 1).Value))
      mon2 = Month(CDate(Cells(r, 2).Value))
      y1 = Year(CDate(Cells(r, 1).Value))
      y2 = Year(CDate(Cells(r, 2).Value))
      For i = 1 To 12
        If i >= mon1 And i <= mon2 And Trim(CStr(y1)) = Trim(CStr(y2)) And Trim(CStr(y2)) = Trim(CStr(Year(CDate(Cells(2, 5).Value)))) Then Cells(r, i + 3) = Cells(r, 3)
      Next
      r = r + 1
    Loop
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 16.12.2015 в 15:25.
Aleksandr H. вне форума Ответить с цитированием
Старый 16.12.2015, 15:31   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub smth()
    Dim r As Long:  r = 4
    Do While Not IsEmpty(Cells(r, 1))
      Cells(r, 3 + Month(Cells(r, 1))).Resize(1, Month(Cells(r, 2) - Cells(r, 1))).Value = Cells(r, 3)
      r = r + 1
    Loop
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 16.12.2015, 16:09   #9
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

как из числа (например 10-09-2015 и 31-12-2015) 112 получается 4 месяца?
Код:
Month(Cells(r, 2) - Cells(r, 1))
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 16.12.2015, 17:06   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет по датам Ppaa Microsoft Office Excel 9 03.06.2013 13:08
Запрос по датам Стингуля Microsoft Office Access 5 20.05.2013 09:05
Вопрос по датам Jrcfyf C# (си шарп) 8 13.04.2012 01:22
Фильтрация по датам Shpon Microsoft Office Excel 2 12.10.2009 16:53
выборка по датам Screame Microsoft Office Excel 8 15.07.2009 23:22