The dates in date column are entered like this.
01/03/2011
01/04/2011
01/06/2011
01/12/2011
13/1/2011
14/1/2011
19/1/2011
29/1/2011
31/1/2011
02/01/2011
02/03/2011
02/04/2011
02/08/2011
09/02/2011
02/10/2011
02/11/2011
14/2/2011
28/2/2011
03/01/2011
In the above example I have given as though one date occurs only one. But, one date may be repeated more than once.
From 01/03/2011 to 01/12/2011 refers to Jan. (mm/dd/yyyy)
From 13/1/2011 to 31/1/2011 refers to Jan. (dd/mm/yyyy)
Then,
From 02/01/2011 to 02/08/2011 refers to Feb. (mm/dd/yyyy)
Then 09/02/2011 refers to Feb. (dd/mm/yyyy)
From 02/10/2011 to 02/11/2011 refers to Feb. (mm/dd/yyyy)
From 14/2/2011 to 28/2/2011 refers to Feb. (dd/mm/yyyy)
Then,
From 03/01/2011 refers to Mar. (mm/dd/yyyy)
After this, dates of April are mentioned.
Likewise, until December dates are keyed in.
After December, the next year begins.
Again the date format is not uniform in that year.
Thus it goes on upto 2014.
There is no uniformity in the format.
The date format does not change after say, a particular row.
Months are noted down as 01 and also 1.
I have written the code given below. it works fine for 5 months.
But is there a simpler method or how to simplify this code?
Please suggest.
Sample of the result I get is given below:Code:Private Sub UserForm_Click() Dim rRng As Range Dim rCell As Range Dim sDest As String Dim sYear, sMonth, sDay, aDate Dim LastRecNum As Long Sheets("MemberJoinDate").Select On Error Resume Next Sheets("MemberJoinDate").AutoFilterMode = False On Error GoTo 0 Dim Bgnrow As Long Dim Endrow As Long Dim Mnth As Integer Endrow = 0 ChkAgain: If Endrow = 0 Then Bgnrow = 2 Endrow = 73 Mnth = 1 ElseIf Endrow = 73 Then Bgnrow = 74 Endrow = 150 Mnth = 2 ElseIf Endrow = 150 Then Bgnrow = 151 Endrow = 219 Mnth = 3 ElseIf Endrow = 219 Then Bgnrow = 220 Endrow = 301 Mnth = 4 ElseIf Endrow = 301 Then Bgnrow = 302 Endrow = 405 Mnth = 5 End If Set rRng = ActiveSheet.Range("B" & Trim(Str(Bgnrow)) & ":B" & Trim(Str(Endrow))) sDest = "D" For Each rCell In rRng.Cells sYear = 99999 If InStr(rCell.Value, "/") > 0 Then aDate = Split(rCell.Value, "/") If UBound(aDate) = 2 Then If aDate(0) <= 12 Then If Val(aDate(0)) = Mnth Then sDay = aDate(1) sMonth = aDate(0) ElseIf Val(aDate(0)) > Mnth And Val(aDate(1)) = Mnth Then sDay = aDate(0) sMonth = aDate(1) ElseIf Val(aDate(0)) < Mnth And Val(aDate(1)) = Mnth Then sDay = aDate(0) sMonth = aDate(1) End If ElseIf aDate(0) >= 12 Then If Val(aDate(0)) > Mnth And Val(aDate(1)) = Mnth Then sDay = aDate(0) sMonth = aDate(1) End If End If sYear = aDate(2) End If End If With rCell.Range(sDest & "1") If sYear <> 99999 Then On Error Resume Next .Value = "'" & Format(CDate(sDay & "/" & sMonth & "/" & sYear), "DD-MM-YYYY") If Err.Number <> 0 Then .Value = rCell.Value On Error GoTo 0 Else .Value = rCell.Value End If End With Next If Endrow = 876 Then Exit Sub End If GoTo ChkAgain End Sub
03-01-2011
04-01-2011
07-01-2011
10-01-2011
11-01-2011
29-01-2011
31-01-2011
01-02-2011
09-02-2011
15-02-2011
28-02-2011
01-03-2011
09-03-2011
14-03-2011
31-03-2011
01-04-2011
09-04-2011
11-04-2011
19-04-2011
20/4/20 11
29-04-2011
30-04-2011
02-05-2011
02-05-2011
05-05-2011
06-05-2011
09-05-2011
10-05-2011
28-05-2011
30-05-2011
31-05-2011
Is it possible to get the result as : 03/01/2011 instead of 03-01-2011? Please suggest.
Bookmarks