Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/34: Рейтинг темы: голосов - 34, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 08.09.2017
Сообщений: 391
1

Поиск дат в заданном диапазоне

19.07.2018, 21:34. Показов 6283. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всех приветствую!

Задача следующая: есть список дат. Необходимо, чтобы пользователь вводил две даты (дата начальная и дата конечная), а программа выводила те даты из списка, которые подходят под этот диапазон и копировала их в соседний столбец. Начальную дату в коде я обозначил переменной "а", дату конечную - переменной "n" (см. вложения). Получилось вот так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub data()
Dim i As Integer
Dim a As Integer
Dim n As Integer
 
a = "20.01.2017"
n = "30.01.2017"
 
For i = 10 To 21
 
If n < Cells(i, 4) > a Then Cells(i, 4).Copy
 
Cells(i, 5).PasteSpecial
Next
 
End Sub
Помогите, пожалуйста, в чем ошибка?

Заранее огромное спасибо!
Вложения
Тип файла: xlsx поиск даты .xlsx (9.0 Кб, 25 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.07.2018, 21:34
Ответы с готовыми решениями:

Поиск символов в заданном диапазоне
Привет всем! Нужно найти и удалить лишние пробелы в обзаце. Например дан такой...

Поиск данных из массива в заданном пользователем диапазоне
Добрый день! Уважаемые форумчане! Столкнулась со следующей задачей. Имеется некий диапазон...

Как посчитать количество дат из списка, находящихся в заданном диапазоне
Здравствуйте. Есть список дат. И есть две фиксированные даты. Нужно написать такую функцию, чтобы...

Поиск по DataGridView в диапазоне дат
Здравствуйте. Помогите реализовать поиск за определенный период дат. Таблица - отчетыDataGridView...

6
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
19.07.2018, 21:58 2
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dim r&, startDate As Date, endDate As Date
 
startDate = #1/20/2017#
endDate = #1/30/2017#
 
Application.ScreenUpdating = False
Range("E10:E21").Clear
Range("E10:E21").NumberFormat = "dd/mm/yyyy"
 
For r = 10 To 21
    Select Case Cells(r, 4)
        Case startDate To endDate: Cells(r, 5) = Cells(r, 4)
    End Select
Next
Application.ScreenUpdating = True

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dim startDate As Date, endDate As Date, r&, arr As Variant
 
startDate = #1/20/2017#
endDate = #1/30/2017#
 
arr = Range("D10:D21").Value
 
For r = 1 To UBound(arr)
    Select Case arr(r, 1)
        Case startDate To endDate
        Case Else: arr(r, 1) = Empty
    End Select
Next
 
Range("E10:E21") = arr
0
1 / 1 / 0
Регистрация: 08.09.2017
Сообщений: 391
19.07.2018, 22:42  [ТС] 3
Спасибо!
Решил привязать выбор даты к форме, но выходит ошибка:

Private Sub CommandButton1_Click()
Dim startDate As Date, endDate As Date, r&, arr As Variant

startDate = UserForm1.TextBox1.Value
endDate = UserForm1.TextBox2.Value


в чем причина?
0
96 / 84 / 49
Регистрация: 17.09.2014
Сообщений: 670
19.07.2018, 22:45 4
Baykal555, попробуйте
Visual Basic
1
startDate = CDate(UserForm1.TextBox1.Value)
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
19.07.2018, 22:54 5
CDate "нужна" только как правило хорошего тона, ибо если в текстовом поле будет не дата, то данная функция "рухнет", так что нужна предварительная проверка IsDate, например

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub CommandButton1_Click()
 
Dim startDate As Date, endDate As Date, r&, arr As Variant
 
startDate = CDate(TextBox1)
endDate = CDate(TextBox2)
 
...
 
End Sub
 
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Cancel = Not IsDate(TextBox1)
End Sub
 
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Cancel = Not IsDate(TextBox2)
End Sub
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
20.07.2018, 10:13 6
Baykal555, а разве ВБА на эту строку не ругалась?
Цитата Сообщение от Baykal555 Посмотреть сообщение
If n < Cells(i, 4) > a Then Cells(i, 4).Copy
Надо так записывать условие (оно у вас логически и программно неправильно)
Visual Basic
1
2
3
4
a = CDate("20.01.2017")
n = CDate("30.01.2017")
 
If  Cells(i, 4) > a and  Cells(i, 4)  < n Then Cells(i, 5)= Cells(i, 4)
и 13 строку убрать, можно обойтись и без Copy

Добавлено через 12 минут
Лучше
Visual Basic
1
Cells(i, 5)= Format(Cells(i, 4),"dd.mm.yyyy")
или действительно копированием
0
1 / 1 / 0
Регистрация: 08.09.2017
Сообщений: 391
20.07.2018, 15:04  [ТС] 7
Спасибо большое!
0
20.07.2018, 15:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.07.2018, 15:04
Помогаю со студенческими работами здесь

Поиск в диапазоне указанных дат
Доброго времени суток. Все как всегда сложно и не понятно( На форме расположен DGV, подключенный...

Поиск значения в диапазоне дат
Здравствуйте уважаемые форумчане! Возникла следующая проблема: есть диапазоны дат, есть также...

Поиск по таблице в диапазоне дат с учетом цены
Ребят помогите уже сижу несколько дней мучую делфи не получается. Читал подобные темы путного не...

Поиск в DGV в заданном интервале дат
Доброго времени суток. Имеется DataGrid, datetimepicker1 , datetimepicker2, button1 - есть таблица...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru