Страницы: 1
RSS
Выборка строк по сегодняшней дате на новый лист
 
Прошу помочь разобраться с выборкой данных на основании сравнения даты с сегодняшним числом.
То есть если дата в столбце = сегодня(), то такие строки выводятся на отдельный лист.
Исходный файл прикладываю.
 
Код
Sub ExportNowRows2NewList()
  Dim rg As Range, r&, rc&
  Set rg = ActiveSheet.UsedRange
  Set rg = rg.Resize(rg.Rows.Count, rg.Columns.Count + 1)
  rg.Columns(rg.Columns.Count) = "=row()"
  rg.Columns(rg.Columns.Count).Value = rg.Columns(rg.Columns.Count).Value
  SortRangeBy rg, Array(1)
  rc = WorksheetFunction.CountIf(Columns(1), Int(Now))
  If rc > 0 Then
    Worksheets.Add after:=Worksheets(Worksheets.Count)
    r = WorksheetFunction.Match(CDbl(Int(Now)), rg.Parent.Columns(1), True)
    Union(rg.Parent.Rows(1), rg.Parent.Rows(r).Resize(rc)).Copy Cells(1)
  End If
  SortRangeBy rg, Array(rg.Columns.Count)
  Columns(rg.Columns.Count).ClearContents
  rg.Parent.Columns(rg.Columns.Count).ClearContents
End Sub


Sub SortRangeBy(rg As Range, c, Optional Hd& = 1)
  Dim i&
  With rg.Parent.Sort
    .SortFields.Clear
    For i = LBound(c) To UBound(c)
      .SortFields.Add Key:=rg.Cells(1).Offset(Hd, Abs(c(i)) - 1).Resize( _
      rg.Rows.Count - Hd, 1), SortOn:=xlSortOnValues, Order:=IIf(c(i) > 0, _
      1, 2), DataOption:=xlSortNormal
    Next
    .SetRange rg: .Header = Hd: .MatchCase = False
    .Orientation = xlTopToBottom: .SortMethod = xlPinYin: .Apply
  End With
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
воу, спасибо огромное!
то есть встроенными формулами это никак не сделать, как я понимаю?
а как этот полученный список автоматически по времени отсортировать при этом?
 
я как знал...
видите второй макрос называется SortRangeBy - для чего, думаете, он нужен? примените его
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх