Страницы: 1
RSS
Поиск ячейки с датой-временем в Excel 2010
 
Друзья, день добрый! Сижу и туплю наверное уже не один час. Имеется Excel 2010, на одном из листов которого в столбце A указан список дата-время. Скопировал содержимое

17.12.2012 00:15:00
17.12.2012 00:30:00
17.12.2012 00:45:00
17.12.2012 01:00:00
17.12.2012 01:15:00
17.12.2012 01:30:00
17.12.2012 01:45:00
17.12.2012 02:00:00
17.12.2012 02:15:00
17.12.2012 02:30:00
17.12.2012 02:45:00
17.12.2012 03:00:00
17.12.2012 03:15:00

Пытаюсь организовать поиск в макросе, увы и ах, не получается. Я поискал на рабочем листе поиском - нормально, записал это в макрос. Запускаю макрос - вылетает ошибка. Макрос прилагаю, я его не менял.

Cells.Find(What:="17.12.2012 00:30:00", After:=ActiveCell, LookIn:= _
xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext _
, MatchCase:=False, SearchFormat:=False).Activate

В чем дело, какие-то особенности моего экселя? Я пробовал конвертить в дату, брать значение из ячейки листа - не получается и все!

Раньше у меня стоял 2003 - проблем не возникало. Вообще проблема возникла именно после того, как макрос, исправно работающий в 2003 отказался по вышеуказанной причине работать в 2010.
Изменено: Андрей - 26.12.2012 16:43:02
 
Точно не знаю, но есть ощущение, что поиску в макросе американский формат нужен, типа такого:

What:="12/17/2012 0:30"
 
У меня то, что ищется берется из другого листа в переменной r2. Попробовал вот так сделать

Dim sDate As String, rTempFind as Range
sDate = Format(CDate(r2), "MM/DD/YYYY HH:MM")

Set rTempFind = Sheets("Data").Range("A:A").Find(What:=sDate, LookIn:=xlValues, LookAt:=xlWhole, SearchFormat:=False)

rTempFind всегда Nothing...

p.s.Установка xlFormulas вместо xlValues не влияет
 
похоже, не надо двух цифр в месяце и дне - только необходимое, "M/D/YYYY"

вот у меня "5 декабря полшестого утра"
в таком виде "12/5/2012 5:30" ищет,
а вот в таком "12/05/2012 05:30" - нет
 
У меня вот так не работает
? r2
24.12.2012 14:00:00

Dim sDate As String, rTempFind  as Range
sDate = Format(CDate(r2), "M/D/YYYY HH:MM")
Set rTempFind = Sheets("Data").Range("A:A").Find(What:=sDate, LookIn:=xlFormulas, LookAt:=xlWhole, SearchFormat:=False)

rTempFind получается Nothing...На листе Data искомые дата-время есть

маски для времени H:M, HH:M, H:MM не меняют ничего
 
Похоже, еще зависит от того, что ячейка отображает, т.е. от формата ячейки...

если в моем случае с "5 декабря" скрыть отображение времени в ячейке, оставив только дату :05.12.2012,
то  "12/5/2012 5:30" уже не найдёт, а без времени "12/5/2012" - найдёт
 
Код
 Set rTempFind = Sheets("Data").Range("A:A").Find(What:=r2, LookIn:=xlFormulas, LookAt:=xlWhole, SearchFormat:=False)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Указание r2 также не работает. Поверьте, я перебрал все, то можно. Даже пробовал форматировать, используя формат, взятый непосредственно с листа, на котором производил поиск, то есть вот так

Set rTempFind = Sheets("Data").Range("A:A").Find(What:=Format(CDate(r2), Sheets("Data").Range("A3").NumberFormat), LookIn:=xlFormulas, LookAt:=xlWhole, SearchFormat:=False)

Видно придется на 2003 возвращаться...
 
Приложите файл - посмотрим.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Вот. Сил моих уже нет :) Я на всякий случай на листе Data сделал 2 варианта даты-времени - как в идеале должно быть (с формулами) и рядом то же, но вставленное Специальной вставкой (Значения). Я так подозреваю, что у нас в компании наверное какие-то экзотические настройки формата даты-времени могут стоять, так как на соседнем компе с Excel 2007 то же самое. В 2003 кстати тоже не работает :)
 
Код
Set rTempFind = Range("A:B").Find(What:=DateValue("24.12.2012") + TimeValue("02:45:00"), LookIn:=xlFormulas, LookAt:=xlPart)
Set rTempFind = Range("A:B").Find(What:=DateValue("24.12.2012") + TimeValue("02:45:00"), LookIn:=xlFormulas, LookAt:=xlWhole)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо за внимание. Попробовал, сделал по аналогии с вашим примером - вот так. Не помогает.

Dim sDate As String
sDate = Format(CDate(r2), "dd.mm.yyyy" ;)
Dim sTime As String
sTime = Format(CDate(r2), "hh:nn:ss" ;)

Set rTempFind = Sheets("Data" ;) .Range("A:A" ;) .Find(What:=DateValue(sDate) + TimeValue(sTime), LookIn:=xlFormulas, LookAt:=xlWhole, SearchFormat:=False)

Кажется, я нашел, как это сделать немного по другому. На рабочем листе составляю формулу на ячейке A3 ПОИСКПОЗ(A1;B:B). В макросе пишу :

Dim d As Date
d = "18.12.2012 09:30"

Dim s As String
s = Format(d, "m\/d\/yyyy hh:nn" ;)  
Range("A1" ;) .FormulaR1C1 = s

В A1 макросом пишу искомую дату, а в ячейке A3 возвращается ее позиция в столбце B, а у ж из нее я планирую вычислять объект Range ячейки. Извращение, но делать нечего.

p.s. \/ в формате даты - это не буква виктория, это два разнонаправленных слэша.
Изменено: Андрей - 27.12.2012 08:29:23
Страницы: 1
Наверх