2015-08-28 2 views
1

Я хотел бы знать, могу ли я использовать подстановочный знак для дат?Excel VBA Countifs с подстановочными критериями - для дат

У меня есть даты, время, хранящееся на A1: A5 и я хочу, чтобы подсчитать, сколько элементов
там с критериями «8/12/2015», независимо от времени, выход компл должен быть 2, как А1 и А4 содержит дату "8/12/2015"

A1 = 8/12/2015 12:00 утра

A2 = 8/25/2015 3:00 вечера

A3 = 8/23/2015 4:00 AM

A4 = 8/12/2015 1:30 утра

A5 = 8/20/2015 12:00 утра

  Sub counter() 

      With Sheet1 
      Dim compl As String 
      Dim xdate As String, xdate2 As String 
      xdate = "08/12/2015" 
      xdate2 = xdate & "*" 

      compl = WorksheetFunction.CountIfs(Range("a1:a5"), xdate2) 
       Debug.Print compl 
      End With 

      End Sub 

ответ

1

Убедитесь, что ваша дата - это дата, а не строка.

Обязательно используйте стандартные форматы ISO, а не какой-либо случайный порядок даты.

Dim xdate As date 
xdate = "2015-08-12" 

compl = WorksheetFunction.CountIfs(Range("a1:a5"), ">=" & xdate, _ 
            Range("a1:a5"), "<" & (xdate + 1)) 

Кроме того, вам не нужно VBA для этого, просто используйте функцию COUNTIFS в Excel как это:

=COUNTIFS(a1:a5,">=2015-08-28",a1:a5,"<2015-08-29") 

Редактировать Для меня, добавив функцию Format необходимо сохранить дате в человеческом формате для Excel. Изменение WorksheetFunction линии, как это, если вы хотите, чтобы убедиться, что он работает:

WorksheetFunction.CountIfs(Range("a1:a5"), ">=" & Format(xdate, "yyyy-mm-dd"), _ 
          Range("a1:a5"), "<" & Format(xdate + 1, "yyyy-mm-dd")) 
+0

большое спасибо! жаль, что я очень новичок, чтобы преуспеть в VBA, –

0

В Excel дата хранится в виде чисел с 1/1/1970. это означает, что указанная вами дата - 42239. Когда две десятичные цифры - это часы. вы можете использовать функцию round (с 0 цифрами), когда это число будет включать все ячейки в конкретную дату.

+0

Спасибо за ответ @Balinti я попробовал этот процесс, но когда я преобразовать дату в номер будет десятичный эквивалент времени. Есть ли какой-либо код для сравнения по шаблону для чисел, чтобы игнорировать десятичные знаки? ex. A1 содержит 42239,97 ниже код не работает: х = 42239 xdate2 = 42239 & "*" компл = WorksheetFunction.CountIfs (Range ("a1: a5"), xdate2) –

+0

вы можете использовать формат с Формат (Дата, «MM_DD_YYYY»), а также – Balinti

+0

Я, похоже, не понимаю, где я буду использовать синтаксис формата, извините, можете ли вы рассказать подробнее? –

0

Если это не должно быть в VBA и countif (я не вижу в чем цель): = sumproduct ((floor (value (A1: A5), 1) = date (2015,8 , 20)) * 1) в противном случае есть варианты для циклов и т. Д., Но без цели трудно указать правильное направление.

+0

Countifs проще – vacip

+0

Хорошо, я всегда забыл, что я работаю в компании с технологиями последнего тысячелетия. –

+0

Я использовал vba, потому что у меня тысячи записей, которые я вытаскиваю из таблицы MS Access DB, таблица содержит имя пользователя, задачу, статус задачи (например,завершено, выполняется, отменено), дата, завершенная/аннулированная для моего отчета, которая показывает, сколько задач было выполнено/отменено/inprogress по имени человека в указанную дату или неделю или месяц. –

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