Supprimer les dates d'une colonne

J'ai une colonne avec des dates (colonne A) qui sont sortingées du plus ancien au plus récent. Je ne veux pas que cette colonne ait des dates qui sont séparées plus de 32 jours si la date qui doit être supprimée est dans la colonne B.

Un exemple à comprendre.

Column A Column B "Target Column" 07/02/2006 20/01/2006 07/02/2006 11/02/2006 17/02/2006 11/02/2006 17/02/2006 17/03/2006 17/03/2006 17/03/2006 21/04/2006 21/04/2006 21/04/2006 19/05/2006 19/05/2006 

Dans la colonne A à partir du 07/02/2006, la prochaine date est le 11/02/2006, mais elle n'est pas incluse dans la colonne B, donc elle doit restr. A3 est le 17/02/2016 qui est seulement à 6 jours de A2 et est inclus dans la colonne B. Donc, A3 doit partir. Maintenant, A4 = 17/03/2006 restra parce qu'il est à 34 jours d'écart de A3 = 17/02/2016. etc.

ok je vais postr un code ci-dessous. Ce n'est pas le code le plus élégant, car je ne suis pas formé à VBA et je l'apprends encore moi-même.

J'ai noté un problème et cela m'a fait bash la tête contre le mur pendant quelques heures. Il ne semble pas fonctionner lorsque les colonnes de votre date sont des dates de série formatées pour qu'elles s'affichent dans un format de date. Il fonctionne bien lorsque vous travaillez avec les valeurs de date cependant. La fonction d'application VBA pour VLOOKUP ne peut pas correspondre aux éléments de la list lorsque la valeur de la date est formatée en tant que date pour une raison quelconque.

 Option Explicit Sub removedates() Dim counter As Integer Dim MaxDays As Integer Dim Datelist() As Variant Dim NumberofDates As Integer Dim RemoveDateList As Range Dim RemoveDate As Boolean Dim RemoveDays As Boolean Dim Doesitexist As Variant MaxDays = 32 Range("A1").Select Datelist = Range(Selection, Selection.End(xlDown)) Range("B1").Select Set RemoveDateList = Range(Selection, Selection.End(xlDown)) NumberofDates = UBound(Datelist) counter = 2 While counter <= NumberofDates Doesitexist = Application.VLookup(Datelist(counter, 1), RemoveDateList.Value, 1, False) RemoveDate = Not (IsError(Doesitexist)) RemoveDays = MaxDays > Datelist(counter, 1) - Datelist(counter - 1, 1) If RemoveDate And RemoveDays Then Call Removefromlist(Datelist, counter) counter = counter - 1 NumberofDates = NumberofDates - 1 End If counter = counter + 1 Wend Range(Cells(1, 3), Cells(UBound(Datelist), 3)) = Datelist End Sub Sub Removefromlist(arr As Variant, rowtodelete As Integer) Dim temp As Variant Dim i As Integer If rowtodelete = UBound(arr) Then arr(rowtodelete) = "" Else For i = rowtodelete To UBound(arr) - 1 arr(i, 1) = arr(i + 1, 1) Next i arr(UBound(arr), 1) = "" End If End Sub 

J'ai placé la list des dates dans un tableau comme apparemment plus rapide que les cellules et les plages. l'une des limites est que vous ne pouvez pas supprimer des arrays apparemment, donc j'ai ajouté le deuxième sous pour déplacer toutes les dates dans la list par 1 rangée puis remplacez la dernière input par "". Donc, même si la cellule située au-dessous de votre nouvelle list peut être vide, elle ne l'est pas vraiment.