Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Кол-во дней между датами в двух ячейках, в месяцах и днях / 24 сообщений из 24, страница 1 из 1
18.09.2005, 21:34:12
    #33275602
Suleyman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кол-во дней между датами в двух ячейках, в месяцах и днях
Есть две даты, например 12-Янв-2005 и 25-Июн-2005.
Подскажите можно ли составить формулу, чтобы в первой ячейке показывало сколько месяцев,
а во второй сколько дней между этими датами включая начальную и конечную дату.

Пример: А1=12-Янв-2005
А2=25-Июн-2005 Всего дней между ними 193

Должно быть: В1=6 (означает месяцев)
В2=13 (означает дней)
...
Рейтинг: 0 / 0
18.09.2005, 22:57:07
    #33275663
nibbles
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кол-во дней между датами в двух ячейках, в месяцах и днях
DateDiff("m",A1,A2)
DateDiff("d",A1,A2)
...
Рейтинг: 0 / 0
19.09.2005, 11:30:53
    #33276180
Suleyman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кол-во дней между датами в двух ячейках, в месяцах и днях
Не знаю почему, но эта формула почему то не работает, ее нет даже в списке функций, выдает сообщение, что формула содержит ошибку???
...
Рейтинг: 0 / 0
19.09.2005, 11:44:58
    #33276233
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кол-во дней между датами в двух ячейках, в месяцах и днях
с днями все просто
в а3 пишешь =a1-a2 и формат ячейки - числовой
...
Рейтинг: 0 / 0
19.09.2005, 12:26:58
    #33276368
Melkiades
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кол-во дней между датами в двух ячейках, в месяцах и днях
SuleymanНе знаю почему, но эта формула почему то не работает, ее нет даже в списке функций, выдает сообщение, что формула содержит ошибку???
И в бэйсике, и в VBA эта функция нормально работает. См. примеры в MSDN.
...
Рейтинг: 0 / 0
19.09.2005, 15:03:01
    #33276842
Кол-во дней между датами в двух ячейках, в месяцах и днях
Вообще-то между 12-Янв-2005 и 25-Июн-2005 163 дня. На месяц ошибся.

Лови процедуру.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Sub MonthsAndDays( _
  FirstDate As Range, _
  LastDate As Range)

    Dim intMonth As Integer
    Dim intDays As Integer
      
    If Day(FirstDate) <= Day(LastDate) Then
        intMonth = DateDiff("m", FirstDate, LastDate, vbMonday)
    Else
        intMonth = DateDiff("m", FirstDate, LastDate, vbMonday) -  1 
    End If
    
    If Day(FirstDate) = Day(LastDate) Then
        intDays =  0 
    Else
        intDays = DateDiff("d", DateAdd("m", intMonth, FirstDate), _
          LastDate)
    End If
    
    Range("B1").Value = intMonth
    Range("B2").Value = intDays
End Sub

Запускаешь так.

Код: plaintext
MonthsAndDays Range("A1"), Range("A2")
...
Рейтинг: 0 / 0
19.09.2005, 22:36:04
    #33277642
Suleyman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кол-во дней между датами в двух ячейках, в месяцах и днях
Прошу прщения, но сам я доделать макрос не смогу. Просто я думал есть функция
которую можно исп-ть как любую другую прямо на листе, оказалось не много сложнее.
Если макрос, то мне нужно что бы он срабатывал при открытии листа.
Есть дата в ячейке В5 - это конечная дата, и есть столбик диапазоном J10-J28 с более
ранними датами, (промежуток между В5 и каждой из этих ячеек и есть цель которуюю ищем)
и после открытия листа в столбцах L и M диапазоном от 10 до 28 соотв-но должны выставляться
месяца (L10-L28) и дни (M10-M28). И все тоже самое, только деленное на 3 в столбцах N и O
диапазоном от 10 до 28. Вот и все.
Заранее спасибо если кто то возмется помочь!
...
Рейтинг: 0 / 0
20.09.2005, 09:20:19
    #33277864
Кол-во дней между датами в двух ячейках, в месяцах и днях
Стандартный модуль.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Public intMonth As Integer
Public intDays As Integer

Sub MonthsAndDays( _
  FirstDate As Range, _
  LastDate As Range)
      
    If Day(FirstDate) <= Day(LastDate) Then
        intMonth = DateDiff("m", FirstDate, LastDate, vbMonday)
    Else
        intMonth = DateDiff("m", FirstDate, LastDate, vbMonday) -  1 
    End If
    
    If Day(FirstDate) = Day(LastDate) Then
        intDays =  0 
    Else
        intDays = DateDiff("d", DateAdd("m", intMonth, FirstDate), _
          LastDate)
    End If
End Sub

Модуль книги.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Private Sub Workbook_Open()
    Dim rngFirstDate As Range
    Dim rngLastDate As Range
    Dim intI As Integer
    
    Set rngLastDate = ThisWorkbook.Worksheets("Лист1").Range("B5")
    
    For intI =  10  To  28 
        Set rngFirstDate = ThisWorkbook.Worksheets("Лист1").Range("J" & intI)
        Call MonthsAndDays(rngFirstDate, rngLastDate)
        With rngFirstDate
            .Offset( 0 ,  2 ).Value = intMonth
            .Offset( 0 ,  3 ).Value = intDays
            .Offset( 0 ,  4 ).Value = Round((intMonth /  3 ),  2 )
            .Offset( 0 ,  5 ).Value = Round((intDays /  3 ),  2 )
        End With
    Next
    
    Set rngFirstDate = Nothing
    Set rngLastDate = Nothing
End Sub
...
Рейтинг: 0 / 0
20.09.2005, 16:22:43
    #33279327
Suleyman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кол-во дней между датами в двух ячейках, в месяцах и днях
Огромное спасибо! все работает отлично.
Последняя просьба, сразу не подумал, можно ли сделать так что бы макрос срабатывал не
при открытии книги,а при изменении данных ячейки В5. Просто по связям с этого листа
данные уходят в другие книги, а при закрытии листа данные не меняются пока его не откроешь.
А когда открываешь те связанные книги - там старые данные.
А так все супер! Реально спасибо
...
Рейтинг: 0 / 0
20.09.2005, 17:35:06
    #33279609
Кол-во дней между датами в двух ячейках, в месяцах и днях
Вынеси процедуру, которая стоит на Workbook_Open() в стандартный модуль, например с именем CreateDaysAndMonths.

В модуле листа запиши:

Код: plaintext
1.
2.
3.
4.
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(False, False) = "B5" Then
        Call CreateDaysAndMonths
    End If
End Sub
...
Рейтинг: 0 / 0
20.09.2005, 21:18:38
    #33279981
Suleyman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кол-во дней между датами в двух ячейках, в месяцах и днях
Не знаю, может я туплю, вроде делаю все так, добавляю к первому стандартному модую
то что было в модуле листа. Первая строка нового - Sub CreateDaysAndMonths(),
остальное как понимаю не должен менять. Добавляю в модуль листа - Private Sub Worksheet_Change
(ByVal Target As Range), жму на нем F5, но выпадает окно и нужно выбрать этот
новый CreateDaysAndMonths и потом нажать Выполнить.
А нельзя сделать, что бы автоматически при изменении данных в В5 запускался макрос?
Заранее благодарен
...
Рейтинг: 0 / 0
21.09.2005, 08:28:56
    #33280236
Кол-во дней между датами в двух ячейках, в месяцах и днях
Все уже автоматически.

Стандартный модуль (Module1).

Код: plaintext
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.
39.
40.
41.
Public intMonth As Integer
Public intDays As Integer

Sub MonthsAndDays( _
  FirstDate As Range, _
  LastDate As Range)
      
    If Day(FirstDate) <= Day(LastDate) Then
        intMonth = DateDiff("m", FirstDate, LastDate, vbMonday)
    Else
        intMonth = DateDiff("m", FirstDate, LastDate, vbMonday) -  1 
    End If
    
    If Day(FirstDate) = Day(LastDate) Then
        intDays =  0 
    Else
        intDays = DateDiff("d", DateAdd("m", intMonth, FirstDate), _
          LastDate)
    End If
End Sub

Sub CreateDaysAndMonths()
    Dim rngFirstDate As Range
    Dim rngLastDate As Range
    Dim intI As Integer
    
    Set rngLastDate = ThisWorkbook.Worksheets("Ëèñò1").Range("B5")
    
    For intI =  10  To  28 
        Set rngFirstDate = ThisWorkbook.Worksheets("Ëèñò1").Range("J" & intI)
        Call MonthsAndDays(rngFirstDate, rngLastDate)
        With rngFirstDate
            .Offset( 0 ,  2 ).Value = intMonth
            .Offset( 0 ,  3 ).Value = intDays
            .Offset( 0 ,  4 ).Value = Round((intMonth /  3 ),  2 )
            .Offset( 0 ,  5 ).Value = Round((intDays /  3 ),  2 )
        End With
    Next
    
    Set rngFirstDate = Nothing
    Set rngLastDate = Nothing
End Sub

Модуль листа (Лист1).

Код: plaintext
1.
2.
3.
4.
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(False, False) = "B5" Then
        Call CreateDaysAndMonths
    End If
End Sub

Модуль книги (ЭтаКнига).

Код: plaintext
1.
2.
Public Sub Workbook_Open()
    Call CreateDaysAndMonths
End Sub

Меняешь дату в ячейке "B5" и все значения обновляются и не надо самому F5 нажимать.
...
Рейтинг: 0 / 0
21.09.2005, 12:39:01
    #33280945
Suleyman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кол-во дней между датами в двух ячейках, в месяцах и днях
Большое спасибо, все работает. Последняя проблемка всплыла.
Нужно что бы все числа округлялись до целых. Пробовал через формат ячеек, да показывает
то что нужно, но в документах куда они идут по связям, эти числа описываются другим
макросом. А если число не целое, тот макрос их не видит

Вот тот макрос:
Private Sub Workbook_Open()
Dim intI As Integer
Dim rng As Range
Dim cel As Range

For intI = 2 To 20
With Worksheets(intI)
Set rng = Worksheets(intI).Range("G40, G42")
For Each cel In rng
Select Case cel.Value
Case 0
cel.Offset(0, 1).Value = "(Ноль/Nil)"
Case 1
cel.Offset(0, 1).Value = "(Один/One)"
Case 2
cel.Offset(0, 1).Value = "(Два/Two)"
Case 3
cel.Offset(0, 1).Value = "(Три/Three)"
Case 4
cel.Offset(0, 1).Value = "(Четыре/Four)"
Case 5
cel.Offset(0, 1).Value = "(Пять/Five)"
Case 6
cel.Offset(0, 1).Value = "(Шесть/Six)"
Case 7
cel.Offset(0, 1).Value = "(Семь/Seven)"
Case 8
cel.Offset(0, 1).Value = "(Восемь/Eight)"
Case 9
cel.Offset(0, 1).Value = "(Девять/Nine)"
Case 10
cel.Offset(0, 1).Value = "(Десять/Ten)"
Case 11
cel.Offset(0, 1).Value = "(Одинадцать/Eleven)"
Case 12
cel.Offset(0, 1).Value = "(Двенадцать/Twelve)"
Case 13
cel.Offset(0, 1).Value = "(Тринадцать/Thirteen)"
Case 14
cel.Offset(0, 1).Value = "(Четырнадцать/Fourteen)"
Case 15
cel.Offset(0, 1).Value = "(Пятнадцать/Fifteen)"
Case 16
cel.Offset(0, 1).Value = "(Шестнадцать/Sixteen)"
Case 17
cel.Offset(0, 1).Value = "(Семнадцать/Seventeen)"
Case 18
cel.Offset(0, 1).Value = "(Восемнадцать/Eighteen)"
Case 19
cel.Offset(0, 1).Value = "(Девятнадцать/Nineteen)"
Case 20
cel.Offset(0, 1).Value = "(Двадцать/Twenty)"
Case 21
cel.Offset(0, 1).Value = "(Двадцать один/Twenty one)"
Case 22
cel.Offset(0, 1).Value = "(Двадцать два/Twenty two)"
Case 23
cel.Offset(0, 1).Value = "(Двадцать три/Twenty three)"
Case 24
cel.Offset(0, 1).Value = "(Двадцать четыре/Twenty four)"
Case 25
cel.Offset(0, 1).Value = "(Двадцать пять/Twenty five)"
Case 26
cel.Offset(0, 1).Value = "(Двадцать шесть/Twenty six)"
Case 27
cel.Offset(0, 1).Value = "(Двадцать семь/Twenty seven)"
Case 28
cel.Offset(0, 1).Value = "(Двадцать восемь/Twenty eight)"
Case 29
cel.Offset(0, 1).Value = "(Двадцать девять/Twenty nine)"
Case 30
cel.Offset(0, 1).Value = "(Тридцать/Thirty)"
Case 31
cel.Offset(0, 1).Value = "(Тридцать один/Thirty one)"
End Select
Next cel
End With
Next intI
End Sub
...
Рейтинг: 0 / 0
21.09.2005, 13:01:40
    #33281009
Кол-во дней между датами в двух ячейках, в месяцах и днях
Код: plaintext
Round((intMonth /  3 ),  0 )
...
Рейтинг: 0 / 0
30.09.2005, 19:10:30
    #33299406
Suleyman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кол-во дней между датами в двух ячейках, в месяцах и днях
Помогите пожалуйста переделать макрос.
Нужно что бы работал с 1-го по 20-й листы,
Данные сравнивать между ячейками В27 и Н27, а вставлять на каждом листе:
in month - ячейка А40
in days - ячейка G40
in month/3 - ячейка А42
in days/3 - ячейка G42

Заранее благодарен
...
Рейтинг: 0 / 0
03.10.2005, 09:24:57
    #33300564
Кол-во дней между датами в двух ячейках, в месяцах и днях
Попробуй так.

Код: plaintext
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.
39.
40.
41.
Public intMonth As Integer
Public intDays As Integer

Sub MonthsAndDays( _
  FirstDate As Date, _
  LastDate As Date)
      
    If Day(FirstDate) <= Day(LastDate) Then
        intMonth = DateDiff("m", FirstDate, LastDate, vbMonday)
    Else
        intMonth = DateDiff("m", FirstDate, LastDate, vbMonday) -  1 
    End If
    
    If Day(FirstDate) = Day(LastDate) Then
        intDays =  0 
    Else
        intDays = DateDiff("d", DateAdd("m", intMonth, FirstDate), _
          LastDate)
    End If
End Sub

Sub CreateDaysAndMonths()
    Dim FirstDate As Date
    Dim LastDate As Date
    Dim intI As Integer
    Dim ws As Worksheet
    
    For intI =  1  To  20 
        Set ws = Worksheets(intI)
        FirstDate = ws.Range("H27").Value
        LastDate = ws.Range("B27").Value
        Call MonthsAndDays(FirstDate, LastDate)
        With ws
            .Range("A40").Value = intMonth
            .Range("G40").Value = intDays
            .Range("A42").Value = Round((intMonth /  3 ),  0 )
            .Range("G42").Value = Round((intDays /  3 ),  0 )
        End With
    Next

    Set ws = Nothing
End Sub
...
Рейтинг: 0 / 0
03.10.2005, 17:29:48
    #33301969
Suleyman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кол-во дней между датами в двух ячейках, в месяцах и днях
Спасибо, все работает отлично, но блин новая проблемка появилась.
В третьей и четвертой ячейке данные должны показывать реально
третью часть кол-ва дней от их общего кол-ва.
На пример если первая дата 16-мар-2005, а последняя 1-сен-2005,
то макрос считает в первую яч.-5 (мес.), во вторую яч.-16 (дней)
в третью -2(мес.) и в четвертую -5 (дней).
Ошибка появляется в 3-ей и 4-ой ячейках. Потому что долно быть: 1 (мес)
и 25 (дней)
...
Рейтинг: 0 / 0
04.10.2005, 09:26:44
    #33302786
Кол-во дней между датами в двух ячейках, в месяцах и днях
Сделай так:

Код: plaintext
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.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
Public intMonth As Integer
Public intDays As Integer
Public intDaysFull As Integer
Public intDays3 As Integer
Public intMonth3 As Integer

Sub MonthsAndDays( _
  FirstDate As Date, _
  LastDate As Date)

    If Day(FirstDate) <= Day(LastDate) Then
        intMonth = DateDiff("m", FirstDate, LastDate, vbMonday)
    Else
        intMonth = DateDiff("m", FirstDate, LastDate, vbMonday) -  1 
    End If
    
    If Day(FirstDate) = Day(LastDate) Then
        intDays =  0 
    Else
        intDays = DateDiff("d", DateAdd("m", intMonth, FirstDate), _
          LastDate)
    End If
    
    intDaysFull = DateDiff("d", FirstDate, LastDate, vbMonday)
    intMonth3 = Round(intDaysFull /  3 ,  0 ) \  31 
    intDays3 = Round(intDaysFull /  3 ,  0 ) Mod  31 
End Sub

Sub CreateDaysAndMonths()
    Dim FirstDate As Date
    Dim LastDate As Date
    Dim intI As Integer
    Dim ws As Worksheet
    
    For intI =  1  To  20 
        Set ws = Worksheets(intI)
        FirstDate = ws.Range("H27").Value
        LastDate = ws.Range("B27").Value
        Call MonthsAndDays(FirstDate, LastDate)
        With ws
            .Range("A40").Value = intMonth
            .Range("G40").Value = intDays
            .Range("A42").Value = intMonth3
            .Range("G42").Value = intDays3
        End With
    Next
    
    Set ws = Nothing
End Sub
...
Рейтинг: 0 / 0
04.10.2005, 14:06:37
    #33303765
Suleyman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кол-во дней между датами в двух ячейках, в месяцах и днях
Спасибо, все работает отлично
...
Рейтинг: 0 / 0
04.10.2005, 14:28:11
    #33303844
Кол-во дней между датами в двух ячейках, в месяцах и днях
Ок.
...
Рейтинг: 0 / 0
04.10.2005, 20:16:45
    #33304865
Suleyman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кол-во дней между датами в двух ячейках, в месяцах и днях
Я прошу прощения, наверное задолбал уже своими поправками, последняя просьба, реально последняя: можно ли сделать этот макрос только для работы только на листах "Master", "Office", и "Deck". Просто в этой книге появилось куча других листов, и он на них тоже пытается считать
...
Рейтинг: 0 / 0
05.10.2005, 09:05:03
    #33305229
Кол-во дней между датами в двух ячейках, в месяцах и днях
SuleymanЯ прошу прощения, наверное задолбал уже своими поправками, последняя просьба, реально последняя.
:)

Переделай процедуру следующим образом.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Sub CreateDaysAndMonths()
    Dim FirstDate As Date
    Dim LastDate As Date
    Dim intI As Integer
    Dim ws As Worksheet
    
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name = "Master" Or _
          ws.Name = "Office" Or _
          ws.Name = "Deck" Then
            FirstDate = ws.Range("H27").Value
            LastDate = ws.Range("B27").Value
            Call MonthsAndDays(FirstDate, LastDate)
            With ws
                .Range("A40").Value = intMonth
                .Range("G40").Value = intDays
                .Range("A42").Value = intMonth3
                .Range("G42").Value = intDays3
            End With
        End If
    Next ws
    
    Set ws = Nothing
End Sub
...
Рейтинг: 0 / 0
05.10.2005, 16:36:14
    #33306908
Suleyman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кол-во дней между датами в двух ячейках, в месяцах и днях
Большое спасибо! наконец то все заработало как надо.
...
Рейтинг: 0 / 0
05.10.2005, 17:08:15
    #33307041
Кол-во дней между датами в двух ячейках, в месяцах и днях
Ок. :)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Кол-во дней между датами в двух ячейках, в месяцах и днях / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]