Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2010 - [решено] выбор данных по дате

Ответить
Настройки темы
2010 - [решено] выбор данных по дате

Пользователь


Сообщения: 77
Благодарности: 2

Профиль | Отправить PM | Цитировать


Ещё просьба о помощи
есть эксель с данными, в нем есть столбец дата, по счету он второй)
там данные в таком формате
30.09.2015 17:40:22
30.09.2015 17:41:00
30.09.2015 17:51:01
и так далее.

есть папка D:/metrology в ней файлы, каждый называется примерно так "pda391_2015-06-17_03.35.33.dat" (т.е. в названии дата и время и этот формат унифицирован, он может быть только в таком виде)
можно ли сделать макрос, который
1. выберет строки. где разница во времени не менее 10 мин. Т.е. если у нас время идет так
28
38
39
40
41
51
строки со временем 39,40 убираем. Т.е. он должен видеть, что даже если после 51 минуты идет 52, нельзя удалять 51 минуту, т.к. у нее разница с предыдущем времени на 10 мин.
т.е. отталкиваемся по возрастанию времени.
2. когда остались нужные записи . Сличим их со временем в названии файла "pda391_2015-06-17_03.35.33.dat и в папку
D:/metrology1 копируем те dat файлы, которые совпадают со временем.
Просто этих файлов 5000. Я сама не смогу все это в ручную сличить.

Отправлено: 19:12, 27-01-2016

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата Elizavetta:
есть эксель с данными, в нем есть столбец дата, по счету он второй)
там данные в таком формате
30.09.2015 17:40:22
30.09.2015 17:41:00
30.09.2015 17:51:01
и так далее. »
Упакуйте образец рабочей книги в архив и приложите к сообщению, либо выложите на RGhost.

Отправлено: 19:26, 27-01-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 77
Благодарности: 2

Профиль | Отправить PM | Цитировать


Iska, вот ссылка
http://rghost.ru/6KKnZJDF2
Переменных может быть много, хоть 1000 столбцов, строк тоже
Это просто сокращенный вариант

Отправлено: 10:55, 28-01-2016 | #3


Пользователь


Сообщения: 77
Благодарности: 2

Профиль | Отправить PM | Цитировать


Неужели там так все сложно?)

Отправлено: 11:36, 29-01-2016 | #4


Динохромный


Contributor


Сообщения: 712
Благодарности: 322

Профиль | Отправить PM | Цитировать


Elizavetta, могу предложить следующий код, но с оговорками:
Файлы лежат в папке "D:/metrology" и имеют следующие названия: pda391_2015-06-17_03.35.33.dat , где красная часть неизменна, синий нолик присутствует, если время менее 10 часов (в экселе в вашем примере этот ноль не отображается), черные символы - меняются.
Эти моменты принципиальны, так как в случае, если программа не найдет файл для копирования, файл будет пропущен.
Разница в 10 минут вычисляется с учетом секунд (т.е. в последовательности 10:05:14, 10:15:13, 10:15:14 второе значение будет пропущено, так как разница между первым и вторым 9:59).
Если необходимый файл успешно найден и скопирован - ячейка заливается зеленым цветом, если файл для копирования не найден - красным.
Первая строка содержит заголовки. Даты содержатся во втором столбце.
Строки не удаляются, вместо этого скрываются (их всегда можно отобразить).
Код желательно предварительно протестить на реальном примере. Если в реальном файле содержание будет отличаться от вашего примера (например даты будут записаны например в виде текста) - код выдаст ошибку.
Код
Код: Выделить весь код
Public Sub Metrology()
    
    Dim i As Integer, j As Integer, n As Integer
    Dim myCell As Range
    Dim strFN As String
    Dim answ As Integer
    Dim diff As Double
    diff = 1 / 24 / 6
    n = ActiveSheet.Cells(2, 2).CurrentRegion.Rows.Count
    For i = 2 To n
        j = i + 1
        
        Do While j <= n And ActiveSheet.Cells(j, 2).Value - ActiveSheet.Cells(i, 2).Value <= diff
            ActiveSheet.Rows(j).Hidden = True
            j = j + 1
        Loop
        
        i = j - 1
        
    Next
    ActiveSheet.Rows(1).Hidden = True
    Intersect(ActiveSheet.Cells(2, 2).CurrentRegion, ActiveSheet.Columns(2)).SpecialCells(xlCellTypeVisible).Select
    For Each myCell In Selection
        If myCell.Value Like "##.##.#### #:##:##" Then
            strFN = "pda391_" & Replace(Replace(myCell.Value, " ", "_0") & ".dat", ":", ".")
        Else
            strFN = "pda391_" & Replace(Replace(myCell.Value, " ", "_") & ".dat", ":", ".")
        End If
        If Dir("d:\metrology\" & strFN) <> "" Then
            FileCopy "d:\metrology\" & strFN, "d:\metrology1\" & strFN
            myCell.Interior.Color = vbGreen
        Else
            '            answ = MsgBox("Отсутствует файл d:\metrology\" & strFN & ", он будет пропущен. Продолжить обработку дальше?", vbYesNo, "Ошибка!")
            '            If answ = vbNo Then Exit Sub
            myCell.Interior.Color = vbRed
        End If
    Next
    ActiveSheet.Rows(1).Hidden = False
End Sub
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:59, 29-01-2016 | #5


Пользователь


Сообщения: 77
Благодарности: 2

Профиль | Отправить PM | Цитировать


a_axe, а можно сделать ,чтобы эта часть pda391_ была изменна, например pda900_
А стоп, кажется сама нашла решение. Немного учусь)

Последний раз редактировалось Elizavetta, 01-02-2016 в 12:03.


Отправлено: 11:55, 01-02-2016 | #6


Пользователь


Сообщения: 77
Благодарности: 2

Профиль | Отправить PM | Цитировать


Нет, не получилось Как сделать, чтобы pdaxxx_принимал разные числа

Отправлено: 12:37, 01-02-2016 | #7


Пользователь


Сообщения: 77
Благодарности: 2

Профиль | Отправить PM | Цитировать


Ошибка в этой строчке
n = ActiveSheet.Cells(2, 2).CurrentRegion.Rows.Count

вот файл полный. Правда переменные убрала) этот Файл на диск С, а не на D. на D другие pda файлы.
http://rghost.ru/6sqp5N9yS

Отправлено: 14:05, 01-02-2016 | #8


Динохромный


Contributor


Сообщения: 712
Благодарности: 322

Профиль | Отправить PM | Цитировать


Цитата Elizavetta:
Ошибка в этой строчке
n = ActiveSheet.Cells(2, 2).CurrentRegion.Rows.Count »
Есть такое дело - переменная n объявлена как integer, ее максимальное значение допустимо чуть больше 32000, у вас в задаче много больше, соответственно тип должен быть long. Соответственно и обсчитывается файл очень долго.
Цитата Elizavetta:
эта часть pda391_ была изменна, например pda900_ »
Код я подправил, с ограничением - после pda должно обязательно идти 3 цифры, кроме того время указанное после pdaXXX_ не должно быть одинаковым у разных файлов, т.к. один из них будет пропущен.
Код
Код: Выделить весь код
Public Sub RowsHide_FileCopy_rev1()
    Dim i As Long, j As Long, n As Long
    Dim myCell As Range
    Dim strFN As String
    Dim answ As Integer
    Dim diff As Double
    diff = 1 / 24 / 6
    n = ActiveSheet.Cells(2, 2).CurrentRegion.Rows.Count
    For i = 2 To n
        j = i + 1
        
        Do While j <= n And ActiveSheet.Cells(j, 2).Value - ActiveSheet.Cells(i, 2).Value <= diff
            ActiveSheet.Rows(j).Hidden = True
            j = j + 1
        Loop
        
        i = j - 1
        
    Next
    ActiveSheet.Rows(1).Hidden = True
    Intersect(ActiveSheet.Cells(2, 2).CurrentRegion, ActiveSheet.Columns(2)).SpecialCells(xlCellTypeVisible).Select
    For Each myCell In Selection
        If myCell.Value Like "##.##.#### #:##:##" Then
            strFN = Replace(Replace(myCell.Value, " ", "_0") & ".dat", ":", ".")
            
        Else
            strFN = Replace(Replace(myCell.Value, " ", "_") & ".dat", ":", ".")
            
        End If
        strFN = Dir("d:\metrology\pda???_" & strFN)
        If strFN <> "" Then
            
            FileCopy "d:\metrology\" & strFN, "d:\metrology1\" & strFN
            myCell.Interior.Color = vbGreen
        Else
            '            answ = MsgBox("Отсутствует файл d:\metrology\" & strFN & ", он будет пропущен. Продолжить обработку дальше?", vbYesNo, "Ошибка!")
            '            If answ = vbNo Then Exit Sub
            myCell.Interior.Color = vbRed
        End If
    Next
    ActiveSheet.Rows(1).Hidden = False
End Sub

Добавлено:
В коде поменяйте строчки "C:/Metrology" на "D:/Metrology" и "C:/Metrology1" на "D:/Metrology1", я тестировал на С:, а обратно не переправил.

Последний раз редактировалось a_axe, 01-02-2016 в 15:43.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:25, 01-02-2016 | #9


Пользователь


Сообщения: 77
Благодарности: 2

Профиль | Отправить PM | Цитировать


Код теперь работает)) Все ясно кроме одного
например вот в экселе значение даты
13.06.2015 21:15:34
вот в папке
D:/Metrology файл
pda156_2015-06-13_21.15.34.dat
но эта дата красным помечена, типа нет файла. и конечно же он не скопировался

Отправлено: 16:42, 01-02-2016 | #10



Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2010 - [решено] выбор данных по дате

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочие - [решено] Сортирование файлов по папкам (копирование по дате создания) DIMM2005 Программное обеспечение Windows 36 03-01-2020 16:54
CMD/BAT - Сортирование файлов по папкам (копирование в многоуровневые папки по дате создания) Systems Скриптовые языки администрирования Windows 18 03-10-2014 11:37
2010 - Access 2010 - сбор данных в один фильтр и подстановка значений по условию выбор mlm1 Microsoft Office (Word, Excel, Outlook и т.д.) 0 27-02-2013 11:37
2010 - как сделать выбор параметра из таблицы данных по входному условию Pozia Microsoft Office (Word, Excel, Outlook и т.д.) 15 06-06-2011 21:49
CMD/BAT - [решено] Выбор данных из txt по маске hxygen Скриптовые языки администрирования Windows 4 24-10-2010 15:52




 
Переход