Я работаю над электронной таблицей, которая будет принимать список дат и находить эти даты на другом листе и заполнять некоторую информацию в ячейке ниже даты сопоставления. Данные для поиска выглядят примерно так:
ROW23: dates generated by formula (formatted: d-mmm) ROW24: Mix of empty cells and cells with text and numbers. ROW25: dates generated by formula (formatted: d-mmm) ROW26: Mix of empty cells and cells with text and numbers. and so on
Этот диапазон называется «Календарь» и является Sheet9 (B23: O74). Этот список дат для поиска - «List_Holidays» и является листом5 (B9: B12, B16: B21). После того, как дата будет установлена, текст, который будет возвращен в ячейке ниже, будет «List_HolAbbr» на Sheet5 (A9: A12, A16: A21).Ни с помощью VBA .Find, ни Application.Match, чтобы соответствовать датам в Excel Range, найдите дату
В настоящее время я застрял на стадии 1 этого кода: попробуйте запустить только одну дату.
Этап 2 - это поиск списка дат. Этап 3 заключается в том, что он выполняет поиск только по строкам, которые фактически содержат даты из приведенного выше примера (пропустите строку пустых ячеек и ячеек с текстом/# s.
Этап 4: заполнить ячейку под найденной датой некоторый текст
Моя попытка до сих пор:..
Sub holidays()
Dim Cal As Range
Dim vholidays As Long
Dim cl As Range
Dim clgcaldate As Range
Set Cal = Sheets("2015_Consolidated").Range("Calendar")
'Find this
Set rgholidays = Worksheets("Holidays_EndPeriods").Range("F10") 'This is the date of the holiday to find in range Calendar
vholidays = DateValue(rgholidays)
MsgBox "vholidays is " & vholidays
'Search this range
MsgBox "g47 is: " & Sheets("2015_Consolidated").Cells(47, "G") 'G47 is the match to the cell in "rgholidays".
For Each cl In Cal
'With Range("List_Holidays)
Set rFound = Cells.Find(what:=vholidays, _
LookIn:=xlValues, _
lookat:=xlWhole, _
SearchOrder:=xlByRows) 'The cell in range Calendar that matches to vholidays
'Match found
If Not rFound Is Nothing Then
MsgBox "rFound is " & rFound
End If
'End With
Next cl
MsgBox "vholidays is " & vholidays & " and is located: " & rFound
End Sub`
первые 2 msgbox
s являются правильными, но не находит соответствия в G47
Я также попробовал этот код, найденный по адресу: Excel VBA - Using Find method on a range of dates
Вторая попытка, используя те же переменные, что и выше.
`MsgBox "vhol is " & vholidays & " rghol is " & rgholidays
For Each cl In Cal
With rgholidays
Set rFound = .Find(vholidays, LookIn:=xlValues, lookat:=xlWhole)
If Not rFound Is Nothing Then
MsgBox cell
End If
End With
Next cl
End Sub`
Опять же, это не возвращает соответствия.
http://www.cpearson.com/excel/DateTimeVBA.htm рекомендует использовать DateValue()
, чтобы преобразовать даты в серийный номер, что представляется разумным для меня, и я попробовал его в первом примере.
Я нашел несколько других ссылок, но они еще больше удалены из того, что я пытаюсь сделать.
Любые предложения, чтобы сделать эту работу?
Редактировать: Я установил условие, чтобы проверить, были ли форматы одинаковыми для значения поиска и значения, которое оно должно найти. Он сказал, что они такие же. Тестирование окна поиска/замены gui в электронной таблице «find» не определяет правильную ячейку независимо от параметров поиска/замены.
Редактировать: Я попробовал Application.Match. Не найдено совпадений. Это проходит через каждый столбец в диапазоне, который ищет совпадение с датой, но ничего не находит.
Sub holidays()
Dim Calendar As Range
Dim cl As Range
Dim rFound As Variant
Dim findthis As Double
Dim rng As Range
Dim Cal As Range
Set Cal = Sheets("2015_Consolidated").Range("Calendar")
findthis = CDate(CLng(Sheets("2015_Consolidated").Range("K17"))) '"1/13/2015"
Debug.Print "find this:" & findthis
Debug.Print "cell d23: " & ActiveSheet.Cells(23, 4)
For Each rng In Range("Calendar").Columns
Debug.Print rng.Address
rFound = Application.Match(findthis, rng.Address, 0)
If IsError(rFound) Then
Debug.Print "Not found"
Else
Debug.Print rFound
End If
Next rng
End Sub
Для «ячейки», вы имеете в виду мою переменную «cl»? – mechengr02
Пробовал. Он все еще не находит его. Я установил условие для проверки, были ли форматы одинаковыми для значения поиска и значения, которое оно должно найти. Он сказал, что они такие же. – mechengr02
Не находите это вы имеете в виду код, который вы написали вместо комментария «сделать какой-то код», который не запускался или что-то другое? – user3476534