Hi mahmoud-lee,

This is much harder than it seems - well it was for me anyway (took me nearly 3 days on and off).

Anyway, let us know how this goes (hopefully good as it works for me):

Code:
Option Explicit
Sub Macro1()

    'Written by Trebor76
    'Visit my website www.excelguru.net.au
    
    'Match the dates in Col's D and E and output them to Col's L and M respectively.
    
    'http://www.excelfox.com/forum/f2/compare-between-two-dates-1497/

    Const lngStartRow As Long = 4 'Starting row number for the data. Change to suit.

    Dim objMyUniqueList As Object
    Dim strMyArray() As String
    Dim lngArrayCount As Long
    Dim lngEndRow As Long
    Dim lngListARow As Long, _
        lngListBRow As Long
    Dim rngCell As Range
    Dim dteMyDate As Date   
    Dim varUniqueItem As Variant
    Dim lngMatchCount As Long
    
    Application.ScreenUpdating = False
    
    Set objMyUniqueList = CreateObject("Scripting.Dictionary")
    
    lngEndRow = Range("D:E").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    
    'Create an unique array of dates from both columns.
    For Each rngCell In Range("D" & lngStartRow & ":E" & lngEndRow)
        If Len(rngCell) > 0 And IsDate(rngCell) = True Then
            dteMyDate = CDate(rngCell)
            If Not objMyUniqueList.Exists(dteMyDate) Then
                objMyUniqueList.Add dteMyDate, dteMyDate
                lngArrayCount = lngArrayCount + 1
                ReDim Preserve strMyArray(1 To lngArrayCount)
                strMyArray(lngArrayCount) = Format(dteMyDate, "yyyymmdd") 'Best format for sorting.
            End If
        End If
    Next rngCell
    
    'Need to sort the array in ascending sequence.
    'This nifty code was written by Hans Vogelaar MCC, MVP and is sourced from here: _
    'http://social.msdn.microsoft.com/Forums/en-US/830b42cf-8c97-4aaf-b34b-d860773281f7/sorting-an-array-in-vba-without-excel-function?forum=isvvba
    Call BubbleSort(strMyArray)
    
    'Initialise the 'lngListARow' and 'lngListBRow' variables to the 'lngStartRow' constant variable.
    lngListARow = lngStartRow: lngListBRow = lngStartRow
    
    For Each varUniqueItem In strMyArray()
        '**Note the 'dteMyDate' variable here must be in the same format (i.e. with dashes or slashes) as the dates are formatted within the cells**
        'Toggle through the unique dates and, using the COUNTIF function, output however many are required from Col. D into Col. L.
        dteMyDate = CDate(Mid(varUniqueItem, 5, 2) & "-" & Right(varUniqueItem, 2) & "-" & Left(varUniqueItem, 4))
        If Evaluate("COUNTIF($D$" & lngStartRow & ":$D$" & lngEndRow & ",""" & Format(dteMyDate, "d-mmm-yyyy") & """)") > 0 Then
            For lngMatchCount = 1 To Evaluate("COUNTIF($D$" & lngStartRow & ":$D$" & lngEndRow & ",""" & Format(dteMyDate, "d-mmm-yyyy") & """)")
                Cells(lngListARow, "L") = Format(CDate(dteMyDate), "mm/dd/yyyy") 'Output format can be changed here if desired.
                lngListARow = lngListARow + 1
            Next lngMatchCount
        End If
        'Toggle through the unique dates and, using the COUNTIF function, output however many are required from Col. E into Col. M.
        If Evaluate("COUNTIF($E$" & lngStartRow & ":$E$" & lngEndRow & ",""" & Format(dteMyDate, "d-mmm-yyyy") & """)") > 0 Then
            For lngMatchCount = 1 To Evaluate("COUNTIF($E$" & lngStartRow & ":$E$" & lngEndRow & ",""" & Format(dteMyDate, "d-mmm-yyyy") & """)")
                Cells(lngListBRow, "M") = Format(CDate(dteMyDate), "mm/dd/yyyy") 'Output format can be changed here if desired.
                lngListBRow = lngListBRow + 1
            Next lngMatchCount
        End If
        'Get the two output row numbers in sync.
        If lngListARow > lngListBRow Then
            lngListBRow = lngListARow
        ElseIf lngListBRow > lngListARow Then
            lngListARow = lngListBRow
        End If
    Next varUniqueItem
    
    'Remove objects from memory
    Set objMyUniqueList = Nothing
    Erase strMyArray()
        
    Application.ScreenUpdating = True
    
    MsgBox "The dates in columns D and E have matched to columns L and M.", vbInformation, "Excel Guru"

End Sub
Sub BubbleSort(arr)
    
    Dim strTemp As String
    Dim i As Long
    Dim j As Long
    Dim lngMin As Long
    Dim lngMax As Long
    
    lngMin = LBound(arr)
    lngMax = UBound(arr)
    
    For i = lngMin To lngMax - 1
        For j = i + 1 To lngMax
          If arr(i) > arr(j) Then
            strTemp = arr(i)
            arr(i) = arr(j)
            arr(j) = strTemp
          End If
        Next j
  Next i

End Sub
Regards,

Robert