как сравнить время в vba - PullRequest
       5

как сравнить время в vba

3 голосов
/ 24 ноября 2011

Я хочу написать макрос, который сравнивает два раза, что доступно в ячейках A1 и B1

Я пытался использовать следующий код, НО он дал мне "type dismatch" при date1 = TimeValue(Range("A1"))

например, значение в ячейке A1 выглядит следующим образом 11/18/2011 10:11:36 PM

dim date1 as date
dim date2 as date 
date1 = TimeValue(Range("A1"))
date1 = TimeValue(Range("B1"))
if date1 > date2 then
'do something 
else 
'do something else
end if 

Ответы [ 5 ]

2 голосов
/ 25 ноября 2011

Две вещи:

  1. попробуйте изменить значение в A1 на 11/10/2011 10:11:36 PM Если что-то Теперь вы можете работать с региональными настройками
  2. вы объявили date1 и date2, но дважды присваиваете date1 и никогда присвоение date2
2 голосов
/ 24 ноября 2011

вам нужно использовать Range("A1").Value

1 голос
/ 09 мая 2015

use application.worksheetfunction.mod (значение даты, 1)

Вы должны понимать, что дата и время в excel представлены серийным номером, в котором 1 равно дню, а время представленов десятичных или дробных долях.

Все системы основывают свою дату с нулевого дня, который равен 1 января 1900 года = 1 и 2 января 1900 года = 2 и т. д.

На листе Excel вы можете получить текущую дату и время, используя функцию today ().Сейчас на vba вы используете вместо этого.Сегодняшняя дата в числовом формате «0» или «Общее» должна показывать число, начинающееся с 42 ..., которое представляет количество дней с 1 января 1900 года.

Поскольку в течение 24 часовдень, если вы хотите сослаться на 1 час или 1:00 утра, дробная или десятичная дробь в серийном номере равна 1/24.19:00 = 19/24

mod () - это формула или функция, которая возвращает остаток от деления.Помните, что время представлено в десятичных числах, вам не нужны фактические целые числа.

Вы можете использовать формулу mod () в vba, используя "application.worksheetfunction".перед любым.

Когда вы делите дату и время на 1 с помощью mod (), он возвращает остаток, который является десятичной частью вашей даты или времени.

Сравнение значения даты ("1: 00:00 ») не будет равно CDate (« 8 мая 2015 г., 1:00 PM »)

0 голосов
/ 02 июля 2013

Разве это нельзя сделать, просто используя .Text вместо .Value?

Dim date1 As Date
Dim date2 As Date
Dim date3 As Date

date1 = TimeValue(Range("A1").Text)
date2 = TimeValue(Range("B1").Text)
date3 = TimeValue(Range("C1").Text)

If date3 >= date1 And date3 <= date2 Then
     'Yes!
Else
     'No!
End If
0 голосов
/ 24 ноября 2011
 sub compare_dates()
     dim  date1 as date
     dim  date2 as date
     dim  str   as string
     str = activesheet.range("A1").value 'str  = "11/18/2011 10:11:36 PM"
     str = Left(str,Instr(str," ")-1)    ' str = "11/18/2011"
     date1 = str   ' assign it to date1
     str = activesheet.range("B1").value ' in the same way b1 cell value
     str =  left(str,instr(str," ")-1)
     date2 = str
     if date1 >  date2 then
          ' do something
     end if
 end sub
...