Vba excel поиск даты
Sub PROBA()
Dim sel&, criteria2
criteria2 = Date
Set les = Sheets("Лист1").Range("A10:AL10")
Set lleess = les.Find(criteria2, , xlValues, xlWhole, xlByRows)
llleeesss = lleess.Column
End Sub
не хочет и всё тут. выдаёт Nothing и, соответственно далее выкидывает в дебагер.
и что у меня там не так?
Sub PROBA()
Dim sel&, criteria2
criteria2 = Date
Set les = Sheets("Лист1").Range("A10:AL10")
Set lleess = les.Find(criteria2, , xlValues, xlWhole, xlByRows)
llleeesss = lleess.Column
End Sub
не хочет и всё тут. выдаёт Nothing и, соответственно далее выкидывает в дебагер.
и что у меня там не так? китин
Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
Sub PROBA()
Dim sel&, criteria2
criteria2 = Date
Set les = Sheets("Лист1").Range("A10:AL10")
Set lleess = les.Find(criteria2, , xlValues, xlWhole, xlByRows)
llleeesss = lleess.Column
End Sub
не хочет и всё тут. выдаёт Nothing и, соответственно далее выкидывает в дебагер.
и что у меня там не так? Автор - китин
Дата добавления - 26.04.2018 в 14:22
При поиске даты два условия:
1) Поиск даты осуществляется по тому, как дата отображается в ячейке.
2) Find видит даты в строке 10 с учетом английского языка в региональных настройках.
В Вашем случае нужно искать не целиком дату "26.04.2018", а только день и месяц и в том формате, как их видит "Find":
26-Apr.
Чтобы разобраться в ситуации, измените в региональных настройках язык на английский (США).
Решения пока не знаю, как работать в режиме русского языка. Надо переводить название месяца с русского на английский.
Вот так будет находиться:
Sub PROBA()
Dim sel&, criteria2
Dim les As Range, lleess As Range, llleeesss As Long
criteria2 = "26-apr"
Set les = Sheets("Лист1").Range("A10:AL10")
Set lleess = les.Find(criteria2, , xlValues, xlWhole, xlByRows)
llleeesss = lleess.Column
End Sub
При поиске даты два условия:
1) Поиск даты осуществляется по тому, как дата отображается в ячейке.
2) Find видит даты в строке 10 с учетом английского языка в региональных настройках.
В Вашем случае нужно искать не целиком дату "26.04.2018", а только день и месяц и в том формате, как их видит "Find":
26-Apr.
Чтобы разобраться в ситуации, измените в региональных настройках язык на английский (США).
Решения пока не знаю, как работать в режиме русского языка. Надо переводить название месяца с русского на английский.
Вот так будет находиться:
Sub PROBA()
Dim sel&, criteria2
Dim les As Range, lleess As Range, llleeesss As Long
criteria2 = "26-apr"
Set les = Sheets("Лист1").Range("A10:AL10")
Set lleess = les.Find(criteria2, , xlValues, xlWhole, xlByRows)
llleeesss = lleess.Column
End Sub
Вот так будет находиться:
Sub PROBA()
Dim sel&, criteria2
Dim les As Range, lleess As Range, llleeesss As Long
criteria2 = "26-apr"
Set les = Sheets("Лист1").Range("A10:AL10")
Set lleess = les.Find(criteria2, , xlValues, xlWhole, xlByRows)
llleeesss = lleess.Column
End Sub
есть функция на VBA, которая на вход получает номер строки, на основании которого записывает в переменную из нужного столбца дату. Функция должна найти в определенной строке (в таблице это временная шкала) эту дату и сохранить номер столбца результата. Сейчас это выглядит примерно так:
Проблема в том, что находит эту же самую ячейку, которая грубо говоря задается условием. Пробовал разные варианты поиска, нужного результата не получил( В "заданной" ячейке дата в формате ДД.ММ.ГГГГ , в искомой МММ ДД ГГ . Заранее всем спасибо)
Ну так искать надо не на всём листе, а только в нужном диапазоне. Замените Cells.Find на какой-нить Range("F10:X20").Find(. ) . Или, если блок With там не просто так, и нужно искать именно в указанной строке, то просто .Find(. ) .
Блок With насколько я понимаю как раз и указывает на диапазон, пробовал его менять на аналогичный, указанный вами. Да, искать нужно именно в указанной строке. Просто во остальном коде данный метод работает, но там не даты. А как правильно, если без этого оформить синтаксис .Find?
Вы бы сделали модель - импортируемый текст со значениями, указания по форматам, код для модуля,- чтобы можно было легко воспроизвести файл. а так на пальцах как-то сложновато.
1 ответ 1
Оператор With указывает на родителя, а между With-End With указываются подчиненные объекты. Но не все, что внутри, относится к родителю.
Запишем данные диапазона в массив. Ссылку на диапазон листа пишем обычно так - родитель(точка)подчиненный:
Объявим объект с помощью With :
Здесь диапазон A1:C5 относится к листу "Лист", а диапазон D1:E5 - к активному листу.
Теперь, надеюсть, ошибка понятна.
Еще один момент, который иногда ставит подножки (вернее, авторы кода сами себе посечку делают).
Это может быть и диапазон, и значение. Хорошо, что объявленная переменная d которой передается объект, имеет тип Date , но все же рекомендую не экономить на символах и, когда нужно получить значение ячейки, явно это прописывать:
I am trying to find if a certain date is in a range of dates. This is the range of dates:
Here is the VBA code:
In the above code, the first MsgBox that pops up reads "11/01/2013". This makes absolutely no sense, as that value is not in the range.
Note: ConfigData.Range("B8:B18") refers to the range of dates shown above.
ALSO: This code is within a for loop that increments the value of s1.Cells(row_count, 1). Starting at 01/01/2013 until 31/12/2013
Could you show us the code that assigns s1 and row_count? (Also, you need to use .Value to access the value in a cell, as in Cells(row_count,1).Value).
4 Answers 4
If you just want to confirm a calendar day in your series is within the holiday list, then you could even use vlookup :
Funny, that's the first thing that occurred to me, but I thought I'd try the code and see what was wrong. I obviously forgot vlookup in the process :). +1, formulae before vba.
@mkingston thanks :) In a usual day, when we just work with sheets (without any VBA), to look for something in a range, we would use vlookup , so thought it would be a better fit given holidays are unique so is the calendar ;)
The following code works for me:
If this doesn't work, I'd suggest it's likely you have a cell formatting issue. Select one of your date cells. Go to the immediate window (Alt+F11, then Ctrl+G from Excel), type ? Selection.Value2 and press enter. Does that return a numeric value (~41000)?
Alternatively, you could reenter the dates in a completely new sheet (enter the first couple manually and drag down, do not copy and paste as formatting will be copied also) and try again. This should at least remove odd formatting as a potential issue.
@user985779 I've revised my answer. Let me know if it helps at all. Additionally, please respond to the comment thread on the other answer to your question. Thanks.
It is important to note that excel uses american date formatting. ie mm/dd/yyyy and it can therefore be a little tricky to get the .Find() function to work properly. Make sure your variables are formated properly in order for excel to hopefully give you what you're looking for:
Of course there are a lot of annoying things that can happen with the date formatting, but this is assuming the dates you're looking for ar in the "Short Date" format.
'To find a cell elsewhere in a worksheet with the same specific date as a reference cell: 'First copy all dates to cells immediately to their left. 'Format the copied cells as "General" 'Run this code - then use the dateRow and DateCol variables (eg in vlookup) 'Works in Excel 2013 (The "General" column must not be hidden - Hide by formatting in background colour)
Задача следующая: есть список дат. Необходимо, чтобы пользователь вводил две даты (дата начальная и дата конечная), а программа выводила те даты из списка, которые подходят под этот диапазон и копировала их в соседний столбец. Начальную дату в коде я обозначил переменной "а", дату конечную - переменной "n" (см. вложения). Получилось вот так:
Помогите, пожалуйста, в чем ошибка?
Заранее огромное спасибо!
Поиск символов в заданном диапазоне
Привет всем! Нужно найти и удалить лишние пробелы в обзаце. Например дан такой.
Как посчитать количество дат из списка, находящихся в заданном диапазоне
Здравствуйте. Есть список дат. И есть две фиксированные даты. Нужно написать такую функцию, чтобы.
Поиск по DataGridView в диапазоне дат
Здравствуйте. Помогите реализовать поиск за определенный период дат. Таблица - отчетыDataGridView.
Спасибо!
Решил привязать выбор даты к форме, но выходит ошибка:
Private Sub CommandButton1_Click()
Dim startDate As Date, endDate As Date, r&, arr As Variant
startDate = UserForm1.TextBox1.Value
endDate = UserForm1.TextBox2.Value
CDate "нужна" только как правило хорошего тона, ибо если в текстовом поле будет не дата, то данная функция "рухнет", так что нужна предварительная проверка IsDate, например
и 13 строку убрать, можно обойтись и без Copy
Добавлено через 12 минут
Лучше
Поиск в диапазоне указанных дат
Доброго времени суток. Все как всегда сложно и не понятно( На форме расположен DGV, подключенный.
Поиск по таблице в диапазоне дат с учетом цены
Ребят помогите уже сижу несколько дней мучую делфи не получается. Читал подобные темы путного не.
Поиск в DGV в заданном интервале дат
Доброго времени суток. Имеется DataGrid, datetimepicker1 , datetimepicker2, button1 - есть таблица.
Ваша тема закрыта, почему это могло произойти? Возможно, Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |