Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум 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

 

Динохромный


Contributor


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

Профиль | Отправить 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



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

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


Динохромный


Contributor


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

Профиль | Отправить 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:
На том, что больше 1000 строк — электронные таблицы уже явно лишние. »
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:58, 05-02-2016 | #12



Компьютерный форум 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




 
Переход