2015-01-09 3 views
-1

Я очень новичок в этом, поэтому, пожалуйста, помогите мне или дайте мне несколько советов, если сможете. В основном у меня есть столбец (N), в котором есть строки с датами и заметками в ячейках. Например, "12/20 Notes:-Left start site", "09/23 Notes:- Needs more information" ....Удаление строк, датированных старше 3-х дней

Как вы можете видеть, все эти ячейки, очевидно, начинаются с даты, но затем есть примечания, включенные в нее, что затрудняет ее. В основном я пытаюсь написать код VBA, который позволит мне удалить строки, датированные более 3 дней с текущей даты.

+0

Можете ли вы изменить дизайн листа, чтобы дата была в ячейке сама по себе? –

+0

У вас уже есть код, с которым вам нужна помощь? Сейчас это похоже на запрос написания кода. – Matt

+1

Пер Крис и Мэтт, это простое упражнение, если вы можете отделить дату в своей собственной ячейке. Кроме того, вам нужно дать ему попробовать и опубликовать свой код. –

ответ

0
Sub test() 

Dim rgNote As Range, clNote As Range 
Dim noteDate As Variant, splitDate As Variant, splitNote As Variant 
Dim expiredData 

'Решают до когда замечания считаются истек

expiredData = DateSerial(Year(Now), Month(Now), Day(Now)) - 3 

' Найти клетки, чтобы проверить

Set rgNote = Intersect(Range("N:N"), Range("N:N").Parent.UsedRange) 
If Not rgNote Is Nothing Then 
    For Each clNote In rgNote.Cells 

'Проверьте это действительно записка. Это действительно зависит от структуры таблицы

 splitNote = Split(clNote.Formula) 
     If UBound(splitNote) > LBound(splitNote) Then 
      splitDate = Split(splitNote(LBound(splitNote)), "/") 
      If UBound(splitDate) = LBound(splitDate) + 1 Then 

'Извлечь дату, в данном случае, мы ожидаем, что их в формате мм/дд и предположим, что все они в недавнем прошлом

   noteDate = DateSerial(Year(Now), splitDate(LBound(splitDate)), splitDate(LBound(splitDate) + 1)) 
       If noteDate > Date Then 
        noteDate = DateSerial(Year(noteDate) - 1, Month(noteDate), Day(noteDate)) 
       End If 

'Если истек, то удалите строку

   If noteDate <= expiredData Then 
        clNote.EntireRow.Delete 
       End If 
      End If 
     End If 
    Next clNote 
End If 

End Sub 
+0

прежде всего спасибо огромное Dirk. Но когда я пытаюсь применить это, он дает мне ошибку вне диапазона, и эта строка подсвечивается: «Если UCase (splitNote (LBound (splitNote) + 1)) =« ПРИМЕЧАНИЕ: «Тогда» –

+0

в первую очередь благодарим Дирк. Но когда я пытаюсь применить это, он дает мне ошибку, которая говорит «индекс вне диапазона», и эта строка подсвечивается: «Если UCase (splitNote (LBound (splitNote) + 1)) =« ПРИМЕЧАНИЕ: «Затем» –

+0

Попробуйте снова, Джеймс: добавил: «Если UBound (splitNote)> LBound (splitNote) Затем« –