2014-09-08 2 views
0

Я пытаюсь сравнить только день из приведенного ниже интервала:.EXCEL VBA: сравнение день и месяц только от всего дня

Sheets ("DATA") Диапазон. ("H: H") NumberFormat = " мм/дд/гггг чч: мм AM/PM»

я нашел себе решение с этой функцией, если это входит в

If Sheets("Data").Range("i" & i).Value <> "N/A" And Sheets("Data").Range("K" & i).Value <> "N/A" Then 
    If Day(Sheets("Data").Range("i" & i)) = Day(Sheets("DATA").Range("K" & i)) Then 
     Sheets("Data").Range("S" & i).Value = "Equals" 
    ElseIf Day(Sheets("Data").Range("i" & i)) > Day(Sheets("DATA").Range("K" & i)) Then 
     Sheets("Data").Range("S" & i).Value = "Later" 
    Else: Sheets("Data").Range("S" & i).Value = "Earlier" 
    End If 
    Else: Sheets("Data").Range("S" & i).Value = "N/A" 
End If 

Это, кажется, сделать трюк многого другого ИФ - сравнить только день от весь интервал дат и запись в столбце S - это тот же день, позже или ранее, или «недоступен».

Однако это didnot не работает, если тот или иной срок в один месяц (как есть большие объемы более чем 500k строк данных из 2012-2013гг)

Как я могу сравнить год/месяц/дата от этот формат «mm/dd/yyyy hh: mm am/pm» без - удаление часов и минут из исходного ряда (создание новой строки без часов/минут также не является опцией)

Спасибо!

+0

Как насчет того, чтобы делать дату без времени в колонке, а затем использовать ее для сравнения? – Myles

+0

Я сравниваю эти даты более чем в 10 сценариях, где мне нужны часы и минуты. Это один из сценариев, когда мне просто нужно сказать, находится ли он в один и тот же день, раньше или позже – user3812753

+0

Я не говорю «alter column H», я говорю, что включает дополнительный столбец, в котором есть только дата, а не время. Альтернативно сделайте это как цикл, присвойте значение ячейки переменной и каждый раз изменяйте формат переменной через цикл. – Myles

ответ

3

Сравните значения ячеек, используя свойство Value2. Свойство Value2 возвращает неформатированное значение ячейки. Каждое целое число сохраненного значения даты/времени составляет один день, поэтому я использовал метод Int() для усечения сохраненного значения, поэтому мы сравниваем только по дате, а не минуты или секунды.

If Sheets("Data").Range("i" & i).Value <> "N/A" _ 
     And Sheets("Data").Range("K" & i).Value <> "N/A" Then 

    Select Case Int(Sheets("Data").Range("i" & i).Value2) 
     Case Is = Int(Sheets("DATA").Range("K" & i).Value2) 
      Sheets("Data").Range("S" & i).Value = "Equals" 
     Case Is > Int(Sheets("DATA").Range("K" & i).Value2) 
      Sheets("Data").Range("S" & i).Value = "Later" 
     Case Else 
      Sheets("Data").Range("S" & i).Value = "Earlier" 
    End Select 

Else 
    Sheets("Data").Range("S" & i).Value = "N/A" 
End If 
+0

+1 Я раньше не видел «Выбрать случай», что кажется супер удобным! – Myles

+0

Привет, Росс, работает как шарм! Именно это мне и нужно! Просто из любопытства, что делает INT в этом случае? Я вижу в окне imeediate, что если я пишу значение (не 2), он возвращает только дату – user3812753

+0

@ user3812753 INT принимает целочисленное значение порядкового номера даты/времени, поэтому просто дата с полудня, например, представлена ​​'0,5'. – pnuts

Смежные вопросы