Страницы: 1
RSS
Как найти дату функцией Find, Find VBA
 
Доброго времени суток, Друзья!

Подскажите, пожалуйста, никак не могу найти ответ на данный вопрос в интернете..
Предположим есть две таблички, нужной найти значение из одной таблички и подставить его в другую табличку, используя функцию Find по дате.
Проблема в том, что макрос начинает искать дату в формате 01/01/2021, а данные в табличке записаны в формате 01.01.2021.
Код
Sub New_copy()

Application.ScreenUpdating = False
Application.Calculation = xlManual

Workbooks.Open Filename:="АДРЕС КНИГИ С ТАБЛИЧКОЙ", ReadOnly:=True


Dim IRow As Long

IRow = Cells(Rows.Count, 1).End(xlUp).Row

lLastRow = Cells(3, 1).Row

Y = Cells(IRow, 1).Row - lLastRow = Cells(3, 1).Row

For i = 0 To 365

Set fcell2 = Workbooks("КНИГА С ТАБЛИЧКОЙ").Sheets("ЛИСТ С ТАБЛИЧКОЙ").Rows("СТРОКА С ДАТАМИ").Find(Workbooks("КНИГА КУДА НУЖНЫ ДАННЫЕ").Sheets("ЛИСТ КУДА НУЖНЫ ДАННЫЕ").Cells(lLastRow + i, 1).Value, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByColumns)

If Not fcell2 Is Nothing Then

'Sheets("Extract Losses SIC, %").Select
'Sheets("Extract Losses SIC, %").Cells(fcell.Row, fcell2.Column).Select

Workbooks(""КНИГА КУДА НУЖНЫ ДАННЫЕ").Sheets("ЛИСТ КУДА НУЖНЫ ДАННЫЕ").Cells(lLastRow + i, 4).Value = Workbooks("PlanDepTool_2021.xlsx").Sheets("Production").Cells(29, fcell2.Column).Value

End If
Next i

Workbooks("КНИГА С ТАБЛИЧКОЙ").Close

Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
MsgBox ("Все данные были загружены")
End Sub
 
Dihlofos881,
здравствуйте!
Скиньте пожалуйста пример.
Потому что дату ищет отлично:
Код
Sub aa()
Set fcell = Columns("A:A").Find(Range("B1").Value, LookIn:=xlValues)
If Not fcell Is Nothing Then
    MsgBox "Нашел в строке: " + CStr(fcell.Row)
End If
End Sub
 
evgeniygeo, https://disk.yandex.ru/d/EFtU66b_Ywwp8g

Не получилось сжать до 700 кб, файлы как смог уменьшил
 
Dihlofos881,
у Вас пример кода с примером файлов совсем не совпадают.

Сделайте пример попроще  :)

Вообще, я предполагаю, что проблема в формате даты на листе "Vol Pack", измените ее на стандартную и должно быть ок.
Изменено: evgeniygeo - 18.02.2021 08:13:44
 

Согласен с предыдущем комментарием эксель прекрасно ищет даты я писал макрос для заполнения табеля учета рабочего времени там не было никаких проблем с датами. Просто нужно понимать что даты в эксель храняться не так как мы видим на экране 15.02.2021, на самом деле в этой ячейке записано число 44242. и эксель ищет это число возможно с форматом дат. И проверьте действительно ли в ячейках где ведете поиск записаны даты. А VBA воспринимает даты в таком формате 01/01/2021. Так что он дейсвительно ищет дату. Только в VBA  запись 01/02/2021 означает дату 02.01.2021. Число и месяц меняются местами.

 
evgeniygeo, состряпал примерчик.
На листе "Production" ничего изменять нельзя, это будет из чужой книги))
Проблему решил частично функцией Cstr, теперь ищет в нужном формате, но файл все равно не работает.
 
Метод Range.Find с параметром LookIn:=xlValues имеет ряд непростых для понимания особенностей. Для начала можно ознакомиться с замечательными разъяснениями Владимира (ZVI).

Для того, чтобы пример из #6 заработал, необходимо:

1. Изменить формат ячеек первой строки листа Production c Д.М;@ на Д\.М;@
2. Изменить строку макроса с вызовом Find на
Код
Set fcell2 = Sheets("Production").Rows("1:1").Find(Format(CStr(Sheets("Vol Pack").Cells(lLastRow + i, 1).Value), "D.M"), LookIn:=xlValues, LookAt:=xlWhole)
Изменено: sokol92 - 18.02.2021 14:13:16 (Уточнил параметры Find)
Владимир
 
sokol92, Макрос теперь вроде находит, но не переносит значение....
 
Переносит. Если Вы в примере из #6 заполните ячейку B29 на листе Production, то макрос перенесет ее значение в ячейку B2 листа Vol Pack.
Изменено: sokol92 - 18.02.2021 16:16:36
Владимир
 
sokol92, это работает в примере, но.... почему-то не собирается работать в нужном мне файле.
Он все равно не находит, хотя в ручном режиме данные есть. (После нажатия сочетания ctrl+f он оставляет последнее значение по которому был поиск и если сделать по этому значению поиск, то он все находит). Если код проматывать по шагам будет понятно, что он не находит значение.
Код
Sub Load_data()

Application.ScreenUpdating = False
Application.Calculation = xlManual

Dim IRow As Long

IRow = 366

lLastRow = 3

Y = IRow - lLastRow

For i = 0 To Y

Windows("PlanDepTool_2021.xlsx").Activate

Set fcell2 = Workbooks("PlanDepTool_2021.xlsx").Sheets("Production").Rows("2:2").Find(Format(CStr(Workbooks("LE_GLY_Packaging_2021.xls").Sheets("Vol Pack").Cells(lLastRow + i, 1).Value), "D.M"), LookIn:=xlValues, SearchOrder:=xlByColumns)

If Not fcell2 Is Nothing Then

Windows("LE_GLY_Packaging_2021.xls").Activate

Workbooks("LE_GLY_Packaging_2021.xls").Sheets("Vol Pack").Cells(lLastRow + i, 4) = Workbooks("PlanDepTool_2021.xlsx").Sheets("Production").Cells(29, fcell2.Column).Value

End If

Next i

Application.Calculation = xlAutomatic
Application.ScreenUpdating = True

End Sub
Изменено: Dihlofos881 - 19.02.2021 10:10:18
 
Вроде работает проверяйте
 
Евгений Смирнов, в файле примера работает это да, а вот в фалах из сообщения  #3 не хочет.
 
Проблема действительно в формате отображения данных в которых идет поиск.
Если мой файл работать не будет варианта 3
1 если формат 1 строки там где ведется поиск одинаковый то можно еще изменить макрос и он будет работать
2. если формат 1 строки разный то можно сначала сделать формат одинаковым во всей строке поиска и тогда вести поиск
3. Пользоваться не методом Find а в цикле просматривать ячейки и сравнивать их с искомым значением тогда Excel сам преобразует форматы.
 
Цитата
Dihlofos881 написал:
Проблема в том, что макрос начинает искать дату в формате 01/01/2021, а данные в табличке записаны в формате 01.01.2021.
Послесловие. Ключ к разгадке - в этой теме.
Владимир
Страницы: 1
Наверх