|
Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2010 - [решено] выбор данных по дате |
|
2010 - [решено] выбор данных по дате
|
Пользователь Сообщения: 77 |
Профиль | Отправить 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 |
Динохромный Сообщения: 690
|
Профиль | Отправить PM | Цитировать Цитата Elizavetta:
Код написан для диска С:. код
Public Sub RowsHide_FileCopy_rev3() 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)).Select Selection.NumberFormat = "yyyy/mm/dd h:mm:ss" Selection.SpecialCells(xlCellTypeVisible).Select For Each myCell In Selection If myCell.Value Like "##.##.#### #:##:##" Then strFN = Replace(Replace(Replace(myCell.Text, ".", "-"), " ", "_0") & ".dat", ":", ".") Else strFN = Replace(Replace(Replace(myCell.Text, ".", "-"), " ", "_") & ".dat", ":", ".") End If strFN = Dir("c:\metrology\pda???_" & strFN) If strFN <> "" Then FileCopy "c:\metrology\" & strFN, "c:\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 Intersect(ActiveSheet.Cells(2, 2).CurrentRegion, ActiveSheet.Columns(2)).Select Selection.NumberFormat = "dd/mm/yyyy h:mm" End Sub |
|
Последний раз редактировалось a_axe, 01-02-2016 в 19:43. Отправлено: 17:49, 01-02-2016 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Динохромный Сообщения: 690
|
Профиль | Отправить PM | Цитировать Elizavetta, выкладываю озвученную в личке обратную задачу: перебор имеющихся файлов, поиск соответствующих записей на листе Excel и копирование на новый лист найденных ячеек+диапазона ниже них, укладывающихся в разницу по времени 20 минут.
код
Public Sub files2newSheet() Dim i As Long, j As Long, k As Long Dim strPath As String Dim dCell As Range Dim DataSheet As Worksheet Dim NewSheet As Worksheet Set DataSheet = ActiveSheet Set NewSheet = Worksheets.Add DataSheet.Activate strPath = Dir("c:\\Metrology\*.dat") k = 1 Do While strPath <> "" And k < 1000000 strPath = Replace(strPath, ".dat", "") strPath = Replace(strPath, ".", ":") strPath = Mid(strPath, 9, 2) & "." & Mid(strPath, 6, 2) _ & "." & Left(strPath, 4) & " " & Right(strPath, 8) strPath = Replace(strPath, " 0", " ") If Not Intersect(DataSheet.UsedRange, DataSheet.Columns(2)).Find(CDate(strPath)) Is Nothing Then i = Intersect(DataSheet.UsedRange, DataSheet.Columns(2)).Find(CDate(strPath)).Row j = 0 Do j = j + 1 Loop Until DataSheet.Cells(i + j, 2).Value - DataSheet.Cells(i, 2).Value > 20 / 24 / 60 j = j - 1 DataSheet.Cells(i, 2).Interior.ColorIndex = 3 Range(DataSheet.Cells(i, 2), DataSheet.Cells(i + j, 2)).Copy NewSheet.Cells(k, 1).Insert k = k + j + 1 End If strPath = Dir() Loop Set DataSheet = Nothing Set NewSheet = Nothing End Sub Поскольку речь идет о многократном копировании одних и тех же диапазонов, лимит записей на новом листе установлен на 1000000 строк. Если файлов у вас на большее количество строк - лишние файлы будут пропущены. Не могу не заметить, что задача не для Экселя: Цитата Iska:
|
|
Отправлено: 10:58, 05-02-2016 | #12 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Прочие - [решено] Сортирование файлов по папкам (копирование по дате создания) | 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 |
|