2013-07-23 30 views
-4

У меня есть две колонки в книге; первая имеет сегодняшнюю дату, вторая имеет дату в будущем. Я хотел бы создать VBA, который сравнивает эти два столбца и проверяет, что будущая дата три рабочих дня впереди сегодня. Если дата не на три рабочих дня раньше, я бы хотел отобразить предупреждающее сообщение.Excel VBA - Как сравнить сегодняшнюю дату в одном столбце с будущей датой во втором столбце

Есть ли способ сделать это? Спасибо.

+0

http://stackoverflow.com/q/10583970 –

+0

Вы должны попробовать сначала решить вашу проблему и опубликовать ваши попытки кодирования. – Barranka

+0

http://msdn.microsoft.com/en-us/library/office/ff835532.aspx – SeanC

ответ

2

Прежде всего, вам нужно понять, как VBA «понимает» дату.

Excel, Access, VBA и многие продукты MS хранят даты как число двойной точности; целая часть числа - это дата (количество дней, считанных с 1 января 1900 года), а десятичная часть числа - это время (часть дня).

Это позволяет легко сравнивать две даты: вы можете сравнивать, добавлять или выписывать даты так же, как если бы вы использовали цифры. Итак, если t0 и t1 - это две даты (t1 >= t0), то выражение t1 - t0 даст вам разницу в днях.

Теперь ... как рассчитывать «рабочие дни» между двумя датами? Функция format() в VBA может вам помочь. Вы можете использовать эту функцию для возврата числа «день недели». Проверьте онлайн-справку по функции: http://msdn.microsoft.com/en-us/library/office/gg251755.aspx

Итак ... как вы положите это вместе? Вот пример:

public function bizDaysRemaining(t0 as date, t1 as date) as String 
    Dim ans As String, dayCount as Integer, n as Integer 
    If t1 < t0 Then 
     ans = "Warning" 
    Else 
     dayCount = 0 
     n = 0 
     While t0 + n <= t1 
      if format(t0 + n, "w", vbMonday) <= 5 Then dayCount = dayCount + 1 
      n = n + 1 
     Wend 
     If dayCount < 3 Then 
      ans = "Warning" 
     Else 
      ans = "There are " & dayCount & " business days remaining" 
     End If 
    End IF 
    bizDaysRemaining = ans 
End Function 

Надеется, что это помогает вам

+0

Большое спасибо за это. Я бы попытался сначала решить мою проблему и опубликовать то, что я придумал, но я очень начинаю и не знаю с чего начать. Однако, вместо того, чтобы выходить из ячейки в электронной таблице, я ищу что-то немного другое. Я хотел бы запустить макрос, который проверяет каждую строку для дат, которые на 3 рабочих дня опережают сегодня, и если они отличаются от 3 рабочих дней вперед, отображается предупреждающее сообщение. Как я могу манипулировать этим кодом для запуска в качестве макроса для выполнения этого теста? Еще раз спасибо. – user2611396

+0

@ user2611396 Во-первых: если вам это нравится, повышайте его и/или принимайте его;). Второе: эта функция не зависит от того, какие ячейки (или любые другие файлы Excel) работают, поэтому вы можете использовать их везде, где хотите. Вы можете написать макрос для чтения данных, и вы можете использовать эту функцию * внутри * свой макрос.Я предлагаю вам найти хороший онлайновый учебник VBA или ссылку или хорошую книгу по программированию на Excel и VBA (там много книг). – Barranka

1

Кроме того, не требуется использовать VBA. Excel позволит вам обрабатывать даты как математические объекты, а также множество функций формулы вокруг дат.

Посмотрите на функцию NETWORKDAYS().

http://office.microsoft.com/en-us/excel-help/networkdays-HP005209190.aspx

+0

Ничего себе! Не знал, что эта функция даже существует! +1 – Barranka

0

Попробуйте это:

Предполагая, что A1 = First Date

A2 = Второй Дата

Sub xtremeexcel() 

x = Cells(1, 2) - Cells(1, 1) 

If x > 3 Then 

    If Weekday(Cells(1, 1)) <= 2 Then 

    MsgBox ("Success") 

    Else 

    If x > 5 Then 

     MsgBox ("Success") 

    Else 

     MsgBox ("fail") 

    End If 

    End If 

Else 

    MsgBox ("fail") 

End If 


End Sub