ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   convert first 6 digits into date (https://www.excelbanter.com/excel-programming/430260-convert-first-6-digits-into-date.html)

tracktraining

convert first 6 digits into date
 

Hi Everyone,

I have a column that contains serial numbers in this format - mmddyy - ###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot get the
first 6 digit to convert into a date - sometimes the field may not be a
serial number and just some other ID number so it can't be converted into a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning

joel

convert first 6 digits into date
 

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells.offset, 6)
record_serial = DateSerial(mid(myserial,5,2),
Left(Myserial,2),mid(myserial,3,2) )
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng


"tracktraining" wrote:

Hi Everyone,

I have a column that contains serial numbers in this format - mmddyy - ###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot get the
first 6 digit to convert into a date - sometimes the field may not be a
serial number and just some other ID number so it can't be converted into a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning


tracktraining

convert first 6 digits into date
 

the code is erroring out at this location:
record_serial = DateSerial(mid(myserial,5,2),
Left(Myserial,2),mid(myserial,3,2) )

During these two lines (see below), i am trying to 1.) read the first 6
digits then 2.) convert to format mm/dd/yy. Maybe it would help if i told you
that the serial number is in column is D.

myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")

thanks!
--
Learning


"Joel" wrote:

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells.offset, 6)
record_serial = DateSerial(mid(myserial,5,2),
Left(Myserial,2),mid(myserial,3,2) )
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng


"tracktraining" wrote:

Hi Everyone,

I have a column that contains serial numbers in this format - mmddyy - ###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot get the
first 6 digit to convert into a date - sometimes the field may not be a
serial number and just some other ID number so it can't be converted into a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning


joel

convert first 6 digits into date
 

The offset satement was wrong. the code below should work. I create a set
statement so you can see how the code should work.

Set SerialRange = Range("A1:A10")
For Each SerialRng In SerialRange
myserial = Left(SerialRng.Offset(0, 3), 6)
record_serial = DateSerial(Mid(myserial, 5, 2), _
Left(myserial, 2), Mid(myserial, 3, 2))
Next SerialRng


"tracktraining" wrote:

the code is erroring out at this location:
record_serial = DateSerial(mid(myserial,5,2),
Left(Myserial,2),mid(myserial,3,2) )

During these two lines (see below), i am trying to 1.) read the first 6
digits then 2.) convert to format mm/dd/yy. Maybe it would help if i told you
that the serial number is in column is D.

myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")

thanks!
--
Learning


"Joel" wrote:

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells.offset, 6)
record_serial = DateSerial(mid(myserial,5,2),
Left(Myserial,2),mid(myserial,3,2) )
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng


"tracktraining" wrote:

Hi Everyone,

I have a column that contains serial numbers in this format - mmddyy - ###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot get the
first 6 digit to convert into a date - sometimes the field may not be a
serial number and just some other ID number so it can't be converted into a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning


Patrick Molloy

convert first 6 digits into date
 

the date is
Dim mydate As Date
mydate = DateSerial(Mid(Range("A1"), 5, 2), Mid(Range("A1"), 3, 2),
Left(Range("A1"), 2))

so for your loop

For Each SerialRng In SerialRng.cells
record_serial= Left(Range("A1"), 2) & "/" & Mid(Range("A1"), 3, 2) &
"/" & Mid(Range("A1"), 5, 2)
if isdate(record_serial) then
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data"). cells(Rows.count,
1).End(xlUp)(2).PasteSpecial Paste:=xlAll
End If
End If
Next


"tracktraining" wrote in message
...
Hi Everyone,

I have a column that contains serial numbers in this format - mmddyy - ###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot get
the
first 6 digit to convert into a date - sometimes the field may not be a
serial number and just some other ID number so it can't be converted into
a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning



Rick Rothstein

convert first 6 digits into date
 

Here is another method you can use to convert your serial numbers into real
dates...

MySerial = Left(Format(SerialRng, "@@/@@/@@"), 8)

This code line requires MySerial to be Dim'med as a Date (so that VB will
convert the String value on the right side into a real date. If you want to
force this conversion (instead of allowing VB to do the conversion behind
the scenes), then use this...

MySerial = CDate(Left(Format(SerialRng, "@@/@@/@@"), 8))

--
Rick (MVP - Excel)


"tracktraining" wrote in message
...
Hi Everyone,

I have a column that contains serial numbers in this format - mmddyy - ###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot get
the
first 6 digit to convert into a date - sometimes the field may not be a
serial number and just some other ID number so it can't be converted into
a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning



Rick Rothstein

convert first 6 digits into date
 

Oh, and the statement I posted also assumes your regional settings are set
for dates in month, date, year order (so the mm/dd/yy ordering of the String
that results from my statement will be interpreted correctly).

--
Rick (MVP - Excel)


"Rick Rothstein" wrote in message
...
Here is another method you can use to convert your serial numbers into
real dates...

MySerial = Left(Format(SerialRng, "@@/@@/@@"), 8)

This code line requires MySerial to be Dim'med as a Date (so that VB will
convert the String value on the right side into a real date. If you want
to force this conversion (instead of allowing VB to do the conversion
behind the scenes), then use this...

MySerial = CDate(Left(Format(SerialRng, "@@/@@/@@"), 8))

--
Rick (MVP - Excel)


"tracktraining" wrote in message
...
Hi Everyone,

I have a column that contains serial numbers in this format - mmddyy -
###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot get
the
first 6 digit to convert into a date - sometimes the field may not be a
serial number and just some other ID number so it can't be converted into
a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning




Mishell

convert first 6 digits into date
 


Sub Final()

'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

Dim startserial As Date

Dim endserial As Date

startserial = CDate(Me.Start_Serial)
endserial = CDate(Me.End_Serial)


For Each SerialRng In SerialRng.Cells
myserial = Left(Cells(SerialRng.Row, 4), 6)
YY = Mid(myserial, 5, 2)
MM = Left(myserial, 2)
DD = Mid(myserial, 3, 2)
record_serial = DateSerial(YY, MM, DD)

'On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Cells(Rows.Count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

End Sub

Mishell

"tracktraining" wrote in message
...
Hi Everyone,

I have a column that contains serial numbers in this format - mmddyy - ###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot get
the
first 6 digit to convert into a date - sometimes the field may not be a
serial number and just some other ID number so it can't be converted into
a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning




Rick Rothstein

convert first 6 digits into date
 

'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates


If you place the output from a **properly constructed** Format function into
a Date variable, you will have a Date that can be used in a comparison with
other dates, so a general warning about staying away from the Format
function may be too strong a statement. In my response to the OP, I offered
this code line...

MySerial = Left(Format(SerialRng, "@@/@@/@@"), 8)

which uses the Format statement as its basis and which works fine (as long
as MySerial is Dim'med as a Date). By the way, another way to write this
statement (so that it looks like a "true" Format statement) is this way...

MySerial = Format(Left(SerialRng, 6), "@@/@@/@@")

and, as long as MySerial is Dim'med as a Date, it would work fine too. If
the OP wanted to do the comparisons directly, without using a variable
Dim'med as a Date, the you would simply wrap the output from the Format
function with a CDate function call. For example, something like this...

If CDateFormat(Left(SerialRng, 6), "@@/@@/@@")) = OtherDate Then

--
Rick (MVP - Excel)


"Mishell" wrote in message
...

Sub Final()

'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

Dim startserial As Date

Dim endserial As Date

startserial = CDate(Me.Start_Serial)
endserial = CDate(Me.End_Serial)


For Each SerialRng In SerialRng.Cells
myserial = Left(Cells(SerialRng.Row, 4), 6)
YY = Mid(myserial, 5, 2)
MM = Left(myserial, 2)
DD = Mid(myserial, 3, 2)
record_serial = DateSerial(YY, MM, DD)

'On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Cells(Rows.Count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

End Sub

Mishell

"tracktraining" wrote in message
...
Hi Everyone,

I have a column that contains serial numbers in this format - mmddyy -
###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot get
the
first 6 digit to convert into a date - sometimes the field may not be a
serial number and just some other ID number so it can't be converted into
a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning





Mishell

convert first 6 digits into date
 

Thank you Rick.

I did not know that the FORMAT function could do this, transform
060308 to 06/03/08

Mishell

"Rick Rothstein" wrote in message
...
'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates


If you place the output from a **properly constructed** Format function
into a Date variable, you will have a Date that can be used in a
comparison with other dates, so a general warning about staying away from
the Format function may be too strong a statement. In my response to the
OP, I offered this code line...

MySerial = Left(Format(SerialRng, "@@/@@/@@"), 8)

which uses the Format statement as its basis and which works fine (as long
as MySerial is Dim'med as a Date). By the way, another way to write this
statement (so that it looks like a "true" Format statement) is this way...

MySerial = Format(Left(SerialRng, 6), "@@/@@/@@")

and, as long as MySerial is Dim'med as a Date, it would work fine too. If
the OP wanted to do the comparisons directly, without using a variable
Dim'med as a Date, the you would simply wrap the output from the Format
function with a CDate function call. For example, something like this...

If CDateFormat(Left(SerialRng, 6), "@@/@@/@@")) = OtherDate Then

--
Rick (MVP - Excel)


"Mishell" wrote in message
...

Sub Final()

'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

Dim startserial As Date

Dim endserial As Date

startserial = CDate(Me.Start_Serial)
endserial = CDate(Me.End_Serial)


For Each SerialRng In SerialRng.Cells
myserial = Left(Cells(SerialRng.Row, 4), 6)
YY = Mid(myserial, 5, 2)
MM = Left(myserial, 2)
DD = Mid(myserial, 3, 2)
record_serial = DateSerial(YY, MM, DD)

'On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Cells(Rows.Count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

End Sub

Mishell

"tracktraining" wrote in
message ...
Hi Everyone,

I have a column that contains serial numbers in this format - mmddyy -
###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot get
the
first 6 digit to convert into a date - sometimes the field may not be a
serial number and just some other ID number so it can't be converted
into a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning







Rick Rothstein

convert first 6 digits into date
 

Just to be clear, the Format function returns the String value "06/03/08"
and the assignment to the Date variable, or alternately wrapping it in the
CDate function, is what converts that String value into a Date value.

--
Rick (MVP - Excel)


"Mishell" wrote in message
...
Thank you Rick.

I did not know that the FORMAT function could do this, transform
060308 to 06/03/08

Mishell

"Rick Rothstein" wrote in message
...
'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates


If you place the output from a **properly constructed** Format function
into a Date variable, you will have a Date that can be used in a
comparison with other dates, so a general warning about staying away from
the Format function may be too strong a statement. In my response to the
OP, I offered this code line...

MySerial = Left(Format(SerialRng, "@@/@@/@@"), 8)

which uses the Format statement as its basis and which works fine (as
long as MySerial is Dim'med as a Date). By the way, another way to write
this statement (so that it looks like a "true" Format statement) is this
way...

MySerial = Format(Left(SerialRng, 6), "@@/@@/@@")

and, as long as MySerial is Dim'med as a Date, it would work fine too. If
the OP wanted to do the comparisons directly, without using a variable
Dim'med as a Date, the you would simply wrap the output from the Format
function with a CDate function call. For example, something like this...

If CDateFormat(Left(SerialRng, 6), "@@/@@/@@")) = OtherDate Then

--
Rick (MVP - Excel)


"Mishell" wrote in message
...

Sub Final()

'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

Dim startserial As Date

Dim endserial As Date

startserial = CDate(Me.Start_Serial)
endserial = CDate(Me.End_Serial)


For Each SerialRng In SerialRng.Cells
myserial = Left(Cells(SerialRng.Row, 4), 6)
YY = Mid(myserial, 5, 2)
MM = Left(myserial, 2)
DD = Mid(myserial, 3, 2)
record_serial = DateSerial(YY, MM, DD)

'On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Cells(Rows.Count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

End Sub

Mishell

"tracktraining" wrote in
message ...
Hi Everyone,

I have a column that contains serial numbers in this format - mmddyy -
###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot get
the
first 6 digit to convert into a date - sometimes the field may not be a
serial number and just some other ID number so it can't be converted
into a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning







tracktraining

convert first 6 digits into date
 

i tried this and it is erroring out at
record_serial = DateSerial(Mid(myserial, 5, 2), _
Left(myserial, 2), Mid(myserial, 3, 2))


when i put my cursor over the record_serial the data stored in it is 12:00 AM


--
Learning


"Joel" wrote:

The offset satement was wrong. the code below should work. I create a set
statement so you can see how the code should work.

Set SerialRange = Range("A1:A10")
For Each SerialRng In SerialRange
myserial = Left(SerialRng.Offset(0, 3), 6)
record_serial = DateSerial(Mid(myserial, 5, 2), _
Left(myserial, 2), Mid(myserial, 3, 2))
Next SerialRng


"tracktraining" wrote:

the code is erroring out at this location:
record_serial = DateSerial(mid(myserial,5,2),
Left(Myserial,2),mid(myserial,3,2) )

During these two lines (see below), i am trying to 1.) read the first 6
digits then 2.) convert to format mm/dd/yy. Maybe it would help if i told you
that the serial number is in column is D.

myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")

thanks!
--
Learning


"Joel" wrote:

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells.offset, 6)
record_serial = DateSerial(mid(myserial,5,2),
Left(Myserial,2),mid(myserial,3,2) )
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng


"tracktraining" wrote:

Hi Everyone,

I have a column that contains serial numbers in this format - mmddyy - ###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot get the
first 6 digit to convert into a date - sometimes the field may not be a
serial number and just some other ID number so it can't be converted into a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning


tracktraining

convert first 6 digits into date
 

I also tried this and also got an error:

error out at this line: recserial = Format(Left(SerialRng, 6), "@@/@@/@@")


my SerialRng is in this format when in the excel cell: 060308-001 (i.e.
mmddyy-###)



--- start code -----

dim recserial as date

With Worksheets("Complaint Log (2)")
Set SerialRng = .Range("D2", .cells(.Rows.count, "D").End(xlUp))
End With

For Each SerialRng In SerialRng.cells
recserial = Format(Left(SerialRng, 6), "@@/@@/@@")
If IsDate(recserial) Then
If recserial = ss And recserial <= es Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Sheets("Data").cells(Rows.count,
1).End(xlUp)(2).PasteSpecial Paste:=xlAll
End If
End If
Next SerialRng

---- end code


thanks for helping out thus far


--
Learning


"Rick Rothstein" wrote:

Here is another method you can use to convert your serial numbers into real
dates...

MySerial = Left(Format(SerialRng, "@@/@@/@@"), 8)

This code line requires MySerial to be Dim'med as a Date (so that VB will
convert the String value on the right side into a real date. If you want to
force this conversion (instead of allowing VB to do the conversion behind
the scenes), then use this...

MySerial = CDate(Left(Format(SerialRng, "@@/@@/@@"), 8))

--
Rick (MVP - Excel)


"tracktraining" wrote in message
...
Hi Everyone,

I have a column that contains serial numbers in this format - mmddyy - ###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot get
the
first 6 digit to convert into a date - sometimes the field may not be a
serial number and just some other ID number so it can't be converted into
a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning




Rick Rothstein

convert first 6 digits into date
 

Is recserial declared as a Date? If not, what is it declared as?

--
Rick (MVP - Excel)


"tracktraining" wrote in message
...
I also tried this and also got an error:

error out at this line: recserial = Format(Left(SerialRng, 6), "@@/@@/@@")


my SerialRng is in this format when in the excel cell: 060308-001 (i.e.
mmddyy-###)



--- start code -----

dim recserial as date

With Worksheets("Complaint Log (2)")
Set SerialRng = .Range("D2", .cells(.Rows.count, "D").End(xlUp))
End With

For Each SerialRng In SerialRng.cells
recserial = Format(Left(SerialRng, 6), "@@/@@/@@")
If IsDate(recserial) Then
If recserial = ss And recserial <= es Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Sheets("Data").cells(Rows.count,
1).End(xlUp)(2).PasteSpecial Paste:=xlAll
End If
End If
Next SerialRng

---- end code


thanks for helping out thus far


--
Learning


"Rick Rothstein" wrote:

Here is another method you can use to convert your serial numbers into
real
dates...

MySerial = Left(Format(SerialRng, "@@/@@/@@"), 8)

This code line requires MySerial to be Dim'med as a Date (so that VB will
convert the String value on the right side into a real date. If you want
to
force this conversion (instead of allowing VB to do the conversion behind
the scenes), then use this...

MySerial = CDate(Left(Format(SerialRng, "@@/@@/@@"), 8))

--
Rick (MVP - Excel)


"tracktraining" wrote in
message
...
Hi Everyone,

I have a column that contains serial numbers in this format - mmddyy -
###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot get
the
first 6 digit to convert into a date - sometimes the field may not be a
serial number and just some other ID number so it can't be converted
into
a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning





tracktraining

convert first 6 digits into date
 

maybe it would help if you see my whole code:

Sub Starting_SerialRng(d1 As Date, d2 As Date, ss As Date, es As Date, p As
String)
Dim SerialRng As Range
Dim myserial As String
Dim recserial As Date

Sheets("Complaint Log (2)").Select
Columns("A:O").Select
Selection.AutoFilter
Selection.AutoFilter Field:=9, Criteria1:="=" & d1 & "",
Operator:=xlAnd, Criteria2:="<=" & d2 & "", Operator:=xlAnd
Selection.AutoFilter Field:=5, Criteria1:="=*" & p & "*"

With Worksheets("Complaint Log (2)")
Set SerialRng = .Range("D2", .cells(.Rows.count, "D").End(xlUp))
End With

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.Offset(0, 3), 6)
recserial = Format(myserial, "@@/@@/@@")
'recserial = Format(Left(SerialRng, 6), "@@/@@/@@")
'recserial = DateSerial(Mid(myserial, 5, 2), Left(myserial, 2),
Mid(myserial, 3, 2))
If IsDate(recserial) Then
If recserial = ss And recserial <= es Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Sheets("Data").cells(Rows.count,
1).End(xlUp)(2).PasteSpecial Paste:=xlAll
End If
End If
Next SerialRng

End Sub

--
Learning


"Rick Rothstein" wrote:

Just to be clear, the Format function returns the String value "06/03/08"
and the assignment to the Date variable, or alternately wrapping it in the
CDate function, is what converts that String value into a Date value.

--
Rick (MVP - Excel)


"Mishell" wrote in message
...
Thank you Rick.

I did not know that the FORMAT function could do this, transform
060308 to 06/03/08

Mishell

"Rick Rothstein" wrote in message
...
'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

If you place the output from a **properly constructed** Format function
into a Date variable, you will have a Date that can be used in a
comparison with other dates, so a general warning about staying away from
the Format function may be too strong a statement. In my response to the
OP, I offered this code line...

MySerial = Left(Format(SerialRng, "@@/@@/@@"), 8)

which uses the Format statement as its basis and which works fine (as
long as MySerial is Dim'med as a Date). By the way, another way to write
this statement (so that it looks like a "true" Format statement) is this
way...

MySerial = Format(Left(SerialRng, 6), "@@/@@/@@")

and, as long as MySerial is Dim'med as a Date, it would work fine too. If
the OP wanted to do the comparisons directly, without using a variable
Dim'med as a Date, the you would simply wrap the output from the Format
function with a CDate function call. For example, something like this...

If CDateFormat(Left(SerialRng, 6), "@@/@@/@@")) = OtherDate Then

--
Rick (MVP - Excel)


"Mishell" wrote in message
...

Sub Final()

'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

Dim startserial As Date

Dim endserial As Date

startserial = CDate(Me.Start_Serial)
endserial = CDate(Me.End_Serial)


For Each SerialRng In SerialRng.Cells
myserial = Left(Cells(SerialRng.Row, 4), 6)
YY = Mid(myserial, 5, 2)
MM = Left(myserial, 2)
DD = Mid(myserial, 3, 2)
record_serial = DateSerial(YY, MM, DD)

'On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Cells(Rows.Count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

End Sub

Mishell

"tracktraining" wrote in
message ...
Hi Everyone,

I have a column that contains serial numbers in this format - mmddyy -
###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot get
the
first 6 digit to convert into a date - sometimes the field may not be a
serial number and just some other ID number so it can't be converted
into a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning








tracktraining

convert first 6 digits into date
 

as date...

please see my posting below.. i copied my whole sub into it .

Thanks!
--
Learning


"Rick Rothstein" wrote:

Is recserial declared as a Date? If not, what is it declared as?

--
Rick (MVP - Excel)


"tracktraining" wrote in message
...
I also tried this and also got an error:

error out at this line: recserial = Format(Left(SerialRng, 6), "@@/@@/@@")


my SerialRng is in this format when in the excel cell: 060308-001 (i.e.
mmddyy-###)



--- start code -----

dim recserial as date

With Worksheets("Complaint Log (2)")
Set SerialRng = .Range("D2", .cells(.Rows.count, "D").End(xlUp))
End With

For Each SerialRng In SerialRng.cells
recserial = Format(Left(SerialRng, 6), "@@/@@/@@")
If IsDate(recserial) Then
If recserial = ss And recserial <= es Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Sheets("Data").cells(Rows.count,
1).End(xlUp)(2).PasteSpecial Paste:=xlAll
End If
End If
Next SerialRng

---- end code


thanks for helping out thus far


--
Learning


"Rick Rothstein" wrote:

Here is another method you can use to convert your serial numbers into
real
dates...

MySerial = Left(Format(SerialRng, "@@/@@/@@"), 8)

This code line requires MySerial to be Dim'med as a Date (so that VB will
convert the String value on the right side into a real date. If you want
to
force this conversion (instead of allowing VB to do the conversion behind
the scenes), then use this...

MySerial = CDate(Left(Format(SerialRng, "@@/@@/@@"), 8))

--
Rick (MVP - Excel)


"tracktraining" wrote in
message
...
Hi Everyone,

I have a column that contains serial numbers in this format - mmddyy -
###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot get
the
first 6 digit to convert into a date - sometimes the field may not be a
serial number and just some other ID number so it can't be converted
into
a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning





Rick Rothstein

convert first 6 digits into date
 

Showing us your code is always helpful. Off the top of my head (and in my
tests), I don't see why you should be erroring out on this line...

recserial = Format(Left(SerialRng, 6), "@@/@@/@@")

The only thing I can think of is that the contents of the cell is not in the
form you showed us (######-###)... that is, I suspect either one or more
leading spaces OR the number in the cell is actually ######### and you have
it Custom Formatted as 000000-000. Is either of these the case? If so, tell
me which and I will adjust the code accordingly. If not, then tell us what
the exact error message that you are getting is.

--
Rick (MVP - Excel)


"tracktraining" wrote in message
...
maybe it would help if you see my whole code:

Sub Starting_SerialRng(d1 As Date, d2 As Date, ss As Date, es As Date, p
As
String)
Dim SerialRng As Range
Dim myserial As String
Dim recserial As Date

Sheets("Complaint Log (2)").Select
Columns("A:O").Select
Selection.AutoFilter
Selection.AutoFilter Field:=9, Criteria1:="=" & d1 & "",
Operator:=xlAnd, Criteria2:="<=" & d2 & "", Operator:=xlAnd
Selection.AutoFilter Field:=5, Criteria1:="=*" & p & "*"

With Worksheets("Complaint Log (2)")
Set SerialRng = .Range("D2", .cells(.Rows.count, "D").End(xlUp))
End With

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.Offset(0, 3), 6)
recserial = Format(myserial, "@@/@@/@@")
'recserial = Format(Left(SerialRng, 6), "@@/@@/@@")
'recserial = DateSerial(Mid(myserial, 5, 2), Left(myserial, 2),
Mid(myserial, 3, 2))
If IsDate(recserial) Then
If recserial = ss And recserial <= es Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Sheets("Data").cells(Rows.count,
1).End(xlUp)(2).PasteSpecial Paste:=xlAll
End If
End If
Next SerialRng

End Sub

--
Learning


"Rick Rothstein" wrote:

Just to be clear, the Format function returns the String value "06/03/08"
and the assignment to the Date variable, or alternately wrapping it in
the
CDate function, is what converts that String value into a Date value.

--
Rick (MVP - Excel)


"Mishell" wrote in message
...
Thank you Rick.

I did not know that the FORMAT function could do this, transform
060308 to 06/03/08

Mishell

"Rick Rothstein" wrote in message
...
'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

If you place the output from a **properly constructed** Format
function
into a Date variable, you will have a Date that can be used in a
comparison with other dates, so a general warning about staying away
from
the Format function may be too strong a statement. In my response to
the
OP, I offered this code line...

MySerial = Left(Format(SerialRng, "@@/@@/@@"), 8)

which uses the Format statement as its basis and which works fine (as
long as MySerial is Dim'med as a Date). By the way, another way to
write
this statement (so that it looks like a "true" Format statement) is
this
way...

MySerial = Format(Left(SerialRng, 6), "@@/@@/@@")

and, as long as MySerial is Dim'med as a Date, it would work fine too.
If
the OP wanted to do the comparisons directly, without using a variable
Dim'med as a Date, the you would simply wrap the output from the
Format
function with a CDate function call. For example, something like
this...

If CDateFormat(Left(SerialRng, 6), "@@/@@/@@")) = OtherDate Then

--
Rick (MVP - Excel)


"Mishell" wrote in message
...

Sub Final()

'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

Dim startserial As Date

Dim endserial As Date

startserial = CDate(Me.Start_Serial)
endserial = CDate(Me.End_Serial)


For Each SerialRng In SerialRng.Cells
myserial = Left(Cells(SerialRng.Row, 4), 6)
YY = Mid(myserial, 5, 2)
MM = Left(myserial, 2)
DD = Mid(myserial, 3, 2)
record_serial = DateSerial(YY, MM, DD)

'On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial
Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Cells(Rows.Count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

End Sub

Mishell

"tracktraining" wrote in
message ...
Hi Everyone,

I have a column that contains serial numbers in this format -
mmddyy -
###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a
date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial
Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot
get
the
first 6 digit to convert into a date - sometimes the field may not
be a
serial number and just some other ID number so it can't be converted
into a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning









tracktraining

convert first 6 digits into date
 

yes you are correct. Sometime the field is ######### (the amount of digit
varies)... i would like the code to skip over the field that is not in this
format ######-###.

Also, when i filter the data, the cells should now be consistent. for
example, if i filter it for a certain customer, then the serial number format
in the Serial Column should be ######-### or #######(digit varies). Right now
i am only looking at the serial number for ######-### (after filtering).

i hope that make sense.

--
Learning


"Rick Rothstein" wrote:

Showing us your code is always helpful. Off the top of my head (and in my
tests), I don't see why you should be erroring out on this line...

recserial = Format(Left(SerialRng, 6), "@@/@@/@@")

The only thing I can think of is that the contents of the cell is not in the
form you showed us (######-###)... that is, I suspect either one or more
leading spaces OR the number in the cell is actually ######### and you have
it Custom Formatted as 000000-000. Is either of these the case? If so, tell
me which and I will adjust the code accordingly. If not, then tell us what
the exact error message that you are getting is.

--
Rick (MVP - Excel)


"tracktraining" wrote in message
...
maybe it would help if you see my whole code:

Sub Starting_SerialRng(d1 As Date, d2 As Date, ss As Date, es As Date, p
As
String)
Dim SerialRng As Range
Dim myserial As String
Dim recserial As Date

Sheets("Complaint Log (2)").Select
Columns("A:O").Select
Selection.AutoFilter
Selection.AutoFilter Field:=9, Criteria1:="=" & d1 & "",
Operator:=xlAnd, Criteria2:="<=" & d2 & "", Operator:=xlAnd
Selection.AutoFilter Field:=5, Criteria1:="=*" & p & "*"

With Worksheets("Complaint Log (2)")
Set SerialRng = .Range("D2", .cells(.Rows.count, "D").End(xlUp))
End With

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.Offset(0, 3), 6)
recserial = Format(myserial, "@@/@@/@@")
'recserial = Format(Left(SerialRng, 6), "@@/@@/@@")
'recserial = DateSerial(Mid(myserial, 5, 2), Left(myserial, 2),
Mid(myserial, 3, 2))
If IsDate(recserial) Then
If recserial = ss And recserial <= es Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Sheets("Data").cells(Rows.count,
1).End(xlUp)(2).PasteSpecial Paste:=xlAll
End If
End If
Next SerialRng

End Sub

--
Learning


"Rick Rothstein" wrote:

Just to be clear, the Format function returns the String value "06/03/08"
and the assignment to the Date variable, or alternately wrapping it in
the
CDate function, is what converts that String value into a Date value.

--
Rick (MVP - Excel)


"Mishell" wrote in message
...
Thank you Rick.

I did not know that the FORMAT function could do this, transform
060308 to 06/03/08

Mishell

"Rick Rothstein" wrote in message
...
'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

If you place the output from a **properly constructed** Format
function
into a Date variable, you will have a Date that can be used in a
comparison with other dates, so a general warning about staying away
from
the Format function may be too strong a statement. In my response to
the
OP, I offered this code line...

MySerial = Left(Format(SerialRng, "@@/@@/@@"), 8)

which uses the Format statement as its basis and which works fine (as
long as MySerial is Dim'med as a Date). By the way, another way to
write
this statement (so that it looks like a "true" Format statement) is
this
way...

MySerial = Format(Left(SerialRng, 6), "@@/@@/@@")

and, as long as MySerial is Dim'med as a Date, it would work fine too.
If
the OP wanted to do the comparisons directly, without using a variable
Dim'med as a Date, the you would simply wrap the output from the
Format
function with a CDate function call. For example, something like
this...

If CDateFormat(Left(SerialRng, 6), "@@/@@/@@")) = OtherDate Then

--
Rick (MVP - Excel)


"Mishell" wrote in message
...

Sub Final()

'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

Dim startserial As Date

Dim endserial As Date

startserial = CDate(Me.Start_Serial)
endserial = CDate(Me.End_Serial)


For Each SerialRng In SerialRng.Cells
myserial = Left(Cells(SerialRng.Row, 4), 6)
YY = Mid(myserial, 5, 2)
MM = Left(myserial, 2)
DD = Mid(myserial, 3, 2)
record_serial = DateSerial(YY, MM, DD)

'On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial
Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Cells(Rows.Count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

End Sub

Mishell

"tracktraining" wrote in
message ...
Hi Everyone,

I have a column that contains serial numbers in this format -
mmddyy -
###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a
date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial
Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot
get
the
first 6 digit to convert into a date - sometimes the field may not
be a
serial number and just some other ID number so it can't be converted
into a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning










tracktraining

convert first 6 digits into date
 

Hi everyone,

I am still unable to figure this out. Were you able to figure out something?
or any sugguestions? Any help will do.

Thanks,
Tracktraining

--
Learning


"tracktraining" wrote:

yes you are correct. Sometime the field is ######### (the amount of digit
varies)... i would like the code to skip over the field that is not in this
format ######-###.

Also, when i filter the data, the cells should now be consistent. for
example, if i filter it for a certain customer, then the serial number format
in the Serial Column should be ######-### or #######(digit varies). Right now
i am only looking at the serial number for ######-### (after filtering).

i hope that make sense.

--
Learning


"Rick Rothstein" wrote:

Showing us your code is always helpful. Off the top of my head (and in my
tests), I don't see why you should be erroring out on this line...

recserial = Format(Left(SerialRng, 6), "@@/@@/@@")

The only thing I can think of is that the contents of the cell is not in the
form you showed us (######-###)... that is, I suspect either one or more
leading spaces OR the number in the cell is actually ######### and you have
it Custom Formatted as 000000-000. Is either of these the case? If so, tell
me which and I will adjust the code accordingly. If not, then tell us what
the exact error message that you are getting is.

--
Rick (MVP - Excel)


"tracktraining" wrote in message
...
maybe it would help if you see my whole code:

Sub Starting_SerialRng(d1 As Date, d2 As Date, ss As Date, es As Date, p
As
String)
Dim SerialRng As Range
Dim myserial As String
Dim recserial As Date

Sheets("Complaint Log (2)").Select
Columns("A:O").Select
Selection.AutoFilter
Selection.AutoFilter Field:=9, Criteria1:="=" & d1 & "",
Operator:=xlAnd, Criteria2:="<=" & d2 & "", Operator:=xlAnd
Selection.AutoFilter Field:=5, Criteria1:="=*" & p & "*"

With Worksheets("Complaint Log (2)")
Set SerialRng = .Range("D2", .cells(.Rows.count, "D").End(xlUp))
End With

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.Offset(0, 3), 6)
recserial = Format(myserial, "@@/@@/@@")
'recserial = Format(Left(SerialRng, 6), "@@/@@/@@")
'recserial = DateSerial(Mid(myserial, 5, 2), Left(myserial, 2),
Mid(myserial, 3, 2))
If IsDate(recserial) Then
If recserial = ss And recserial <= es Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Sheets("Data").cells(Rows.count,
1).End(xlUp)(2).PasteSpecial Paste:=xlAll
End If
End If
Next SerialRng

End Sub

--
Learning


"Rick Rothstein" wrote:

Just to be clear, the Format function returns the String value "06/03/08"
and the assignment to the Date variable, or alternately wrapping it in
the
CDate function, is what converts that String value into a Date value.

--
Rick (MVP - Excel)


"Mishell" wrote in message
...
Thank you Rick.

I did not know that the FORMAT function could do this, transform
060308 to 06/03/08

Mishell

"Rick Rothstein" wrote in message
...
'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

If you place the output from a **properly constructed** Format
function
into a Date variable, you will have a Date that can be used in a
comparison with other dates, so a general warning about staying away
from
the Format function may be too strong a statement. In my response to
the
OP, I offered this code line...

MySerial = Left(Format(SerialRng, "@@/@@/@@"), 8)

which uses the Format statement as its basis and which works fine (as
long as MySerial is Dim'med as a Date). By the way, another way to
write
this statement (so that it looks like a "true" Format statement) is
this
way...

MySerial = Format(Left(SerialRng, 6), "@@/@@/@@")

and, as long as MySerial is Dim'med as a Date, it would work fine too.
If
the OP wanted to do the comparisons directly, without using a variable
Dim'med as a Date, the you would simply wrap the output from the
Format
function with a CDate function call. For example, something like
this...

If CDateFormat(Left(SerialRng, 6), "@@/@@/@@")) = OtherDate Then

--
Rick (MVP - Excel)


"Mishell" wrote in message
...

Sub Final()

'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

Dim startserial As Date

Dim endserial As Date

startserial = CDate(Me.Start_Serial)
endserial = CDate(Me.End_Serial)


For Each SerialRng In SerialRng.Cells
myserial = Left(Cells(SerialRng.Row, 4), 6)
YY = Mid(myserial, 5, 2)
MM = Left(myserial, 2)
DD = Mid(myserial, 3, 2)
record_serial = DateSerial(YY, MM, DD)

'On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial
Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Cells(Rows.Count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

End Sub

Mishell

"tracktraining" wrote in
message ...
Hi Everyone,

I have a column that contains serial numbers in this format -
mmddyy -
###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it into a
date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <= endserial
Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if cannot
get
the
first 6 digit to convert into a date - sometimes the field may not
be a
serial number and just some other ID number so it can't be converted
into a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning










Patrick Molloy

convert first 6 digits into date
 

i thought this was all over.

The code below parses a selection of cells - you can easily adapt i t- and
where a cel's contents match the pattern ######-??? the date i sput into the
cell to it's right and the bit after the date is in the next cell

Option Explicit
Sub demo()
Dim cell As Range
For Each cell In Range("C4:C10")
Parse cell
Next
End Sub
Sub Parse(cell As Range)
Dim text As String
text = cell.Value
If text Like "######-???" Then
cell.Offset(, 1) = DateValue(Format$(Left(text, 6), "@@/@@/@@"))
cell.Offset(, 2) = Mid(text, 8)
End If
End Sub

"tracktraining" wrote in message
...
Hi everyone,

I am still unable to figure this out. Were you able to figure out
something?
or any sugguestions? Any help will do.

Thanks,
Tracktraining

--
Learning


"tracktraining" wrote:

yes you are correct. Sometime the field is ######### (the amount of digit
varies)... i would like the code to skip over the field that is not in
this
format ######-###.

Also, when i filter the data, the cells should now be consistent. for
example, if i filter it for a certain customer, then the serial number
format
in the Serial Column should be ######-### or #######(digit varies). Right
now
i am only looking at the serial number for ######-### (after filtering).

i hope that make sense.

--
Learning


"Rick Rothstein" wrote:

Showing us your code is always helpful. Off the top of my head (and in
my
tests), I don't see why you should be erroring out on this line...

recserial = Format(Left(SerialRng, 6), "@@/@@/@@")

The only thing I can think of is that the contents of the cell is not
in the
form you showed us (######-###)... that is, I suspect either one or
more
leading spaces OR the number in the cell is actually ######### and you
have
it Custom Formatted as 000000-000. Is either of these the case? If so,
tell
me which and I will adjust the code accordingly. If not, then tell us
what
the exact error message that you are getting is.

--
Rick (MVP - Excel)


"tracktraining" wrote in
message
...
maybe it would help if you see my whole code:

Sub Starting_SerialRng(d1 As Date, d2 As Date, ss As Date, es As
Date, p
As
String)
Dim SerialRng As Range
Dim myserial As String
Dim recserial As Date

Sheets("Complaint Log (2)").Select
Columns("A:O").Select
Selection.AutoFilter
Selection.AutoFilter Field:=9, Criteria1:="=" & d1 & "",
Operator:=xlAnd, Criteria2:="<=" & d2 & "", Operator:=xlAnd
Selection.AutoFilter Field:=5, Criteria1:="=*" & p & "*"

With Worksheets("Complaint Log (2)")
Set SerialRng = .Range("D2", .cells(.Rows.count,
"D").End(xlUp))
End With

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.Offset(0, 3), 6)
recserial = Format(myserial, "@@/@@/@@")
'recserial = Format(Left(SerialRng, 6), "@@/@@/@@")
'recserial = DateSerial(Mid(myserial, 5, 2), Left(myserial,
2),
Mid(myserial, 3, 2))
If IsDate(recserial) Then
If recserial = ss And recserial <= es Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Sheets("Data").cells(Rows.count,
1).End(xlUp)(2).PasteSpecial Paste:=xlAll
End If
End If
Next SerialRng

End Sub

--
Learning


"Rick Rothstein" wrote:

Just to be clear, the Format function returns the String value
"06/03/08"
and the assignment to the Date variable, or alternately wrapping it
in
the
CDate function, is what converts that String value into a Date
value.

--
Rick (MVP - Excel)


"Mishell" wrote in message
...
Thank you Rick.

I did not know that the FORMAT function could do this, transform
060308 to 06/03/08

Mishell

"Rick Rothstein" wrote in
message
...
'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

If you place the output from a **properly constructed** Format
function
into a Date variable, you will have a Date that can be used in a
comparison with other dates, so a general warning about staying
away
from
the Format function may be too strong a statement. In my response
to
the
OP, I offered this code line...

MySerial = Left(Format(SerialRng, "@@/@@/@@"), 8)

which uses the Format statement as its basis and which works fine
(as
long as MySerial is Dim'med as a Date). By the way, another way
to
write
this statement (so that it looks like a "true" Format statement)
is
this
way...

MySerial = Format(Left(SerialRng, 6), "@@/@@/@@")

and, as long as MySerial is Dim'med as a Date, it would work fine
too.
If
the OP wanted to do the comparisons directly, without using a
variable
Dim'med as a Date, the you would simply wrap the output from the
Format
function with a CDate function call. For example, something like
this...

If CDateFormat(Left(SerialRng, 6), "@@/@@/@@")) = OtherDate Then

--
Rick (MVP - Excel)


"Mishell" wrote in message
...

Sub Final()

'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

Dim startserial As Date

Dim endserial As Date

startserial = CDate(Me.Start_Serial)
endserial = CDate(Me.End_Serial)


For Each SerialRng In SerialRng.Cells
myserial = Left(Cells(SerialRng.Row, 4), 6)
YY = Mid(myserial, 5, 2)
MM = Left(myserial, 2)
DD = Mid(myserial, 3, 2)
record_serial = DateSerial(YY, MM, DD)

'On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <=
endserial
Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Cells(Rows.Count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

End Sub

Mishell

"tracktraining" wrote
in
message
...
Hi Everyone,

I have a column that contains serial numbers in this format -
mmddyy -
###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it
into a
date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <=
endserial
Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if
cannot
get
the
first 6 digit to convert into a date - sometimes the field may
not
be a
serial number and just some other ID number so it can't be
converted
into a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning










Patrick Molloy

convert first 6 digits into date
 

http://cid-b8e56c9a5f311cb7.skydrive...ng/Parsing.xls


"Patrick Molloy" wrote in message
...
i thought this was all over.

The code below parses a selection of cells - you can easily adapt i t- and
where a cel's contents match the pattern ######-??? the date i sput into
the cell to it's right and the bit after the date is in the next cell

Option Explicit
Sub demo()
Dim cell As Range
For Each cell In Range("C4:C10")
Parse cell
Next
End Sub
Sub Parse(cell As Range)
Dim text As String
text = cell.Value
If text Like "######-???" Then
cell.Offset(, 1) = DateValue(Format$(Left(text, 6), "@@/@@/@@"))
cell.Offset(, 2) = Mid(text, 8)
End If
End Sub

"tracktraining" wrote in message
...
Hi everyone,

I am still unable to figure this out. Were you able to figure out
something?
or any sugguestions? Any help will do.

Thanks,
Tracktraining

--
Learning


"tracktraining" wrote:

yes you are correct. Sometime the field is ######### (the amount of
digit
varies)... i would like the code to skip over the field that is not in
this
format ######-###.

Also, when i filter the data, the cells should now be consistent. for
example, if i filter it for a certain customer, then the serial number
format
in the Serial Column should be ######-### or #######(digit varies).
Right now
i am only looking at the serial number for ######-### (after filtering).

i hope that make sense.

--
Learning


"Rick Rothstein" wrote:

Showing us your code is always helpful. Off the top of my head (and in
my
tests), I don't see why you should be erroring out on this line...

recserial = Format(Left(SerialRng, 6), "@@/@@/@@")

The only thing I can think of is that the contents of the cell is not
in the
form you showed us (######-###)... that is, I suspect either one or
more
leading spaces OR the number in the cell is actually ######### and you
have
it Custom Formatted as 000000-000. Is either of these the case? If so,
tell
me which and I will adjust the code accordingly. If not, then tell us
what
the exact error message that you are getting is.

--
Rick (MVP - Excel)


"tracktraining" wrote in
message
...
maybe it would help if you see my whole code:

Sub Starting_SerialRng(d1 As Date, d2 As Date, ss As Date, es As
Date, p
As
String)
Dim SerialRng As Range
Dim myserial As String
Dim recserial As Date

Sheets("Complaint Log (2)").Select
Columns("A:O").Select
Selection.AutoFilter
Selection.AutoFilter Field:=9, Criteria1:="=" & d1 & "",
Operator:=xlAnd, Criteria2:="<=" & d2 & "", Operator:=xlAnd
Selection.AutoFilter Field:=5, Criteria1:="=*" & p & "*"

With Worksheets("Complaint Log (2)")
Set SerialRng = .Range("D2", .cells(.Rows.count,
"D").End(xlUp))
End With

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.Offset(0, 3), 6)
recserial = Format(myserial, "@@/@@/@@")
'recserial = Format(Left(SerialRng, 6), "@@/@@/@@")
'recserial = DateSerial(Mid(myserial, 5, 2), Left(myserial,
2),
Mid(myserial, 3, 2))
If IsDate(recserial) Then
If recserial = ss And recserial <= es Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Sheets("Data").cells(Rows.count,
1).End(xlUp)(2).PasteSpecial Paste:=xlAll
End If
End If
Next SerialRng

End Sub

--
Learning


"Rick Rothstein" wrote:

Just to be clear, the Format function returns the String value
"06/03/08"
and the assignment to the Date variable, or alternately wrapping it
in
the
CDate function, is what converts that String value into a Date
value.

--
Rick (MVP - Excel)


"Mishell" wrote in message
...
Thank you Rick.

I did not know that the FORMAT function could do this, transform
060308 to 06/03/08

Mishell

"Rick Rothstein" wrote in
message
...
'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

If you place the output from a **properly constructed** Format
function
into a Date variable, you will have a Date that can be used in a
comparison with other dates, so a general warning about staying
away
from
the Format function may be too strong a statement. In my
response to
the
OP, I offered this code line...

MySerial = Left(Format(SerialRng, "@@/@@/@@"), 8)

which uses the Format statement as its basis and which works
fine (as
long as MySerial is Dim'med as a Date). By the way, another way
to
write
this statement (so that it looks like a "true" Format statement)
is
this
way...

MySerial = Format(Left(SerialRng, 6), "@@/@@/@@")

and, as long as MySerial is Dim'med as a Date, it would work
fine too.
If
the OP wanted to do the comparisons directly, without using a
variable
Dim'med as a Date, the you would simply wrap the output from the
Format
function with a CDate function call. For example, something like
this...

If CDateFormat(Left(SerialRng, 6), "@@/@@/@@")) = OtherDate Then

--
Rick (MVP - Excel)


"Mishell" wrote in message
...

Sub Final()

'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

Dim startserial As Date

Dim endserial As Date

startserial = CDate(Me.Start_Serial)
endserial = CDate(Me.End_Serial)


For Each SerialRng In SerialRng.Cells
myserial = Left(Cells(SerialRng.Row, 4), 6)
YY = Mid(myserial, 5, 2)
MM = Left(myserial, 2)
DD = Mid(myserial, 3, 2)
record_serial = DateSerial(YY, MM, DD)

'On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <=
endserial
Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Cells(Rows.Count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

End Sub

Mishell

"tracktraining" wrote
in
message
...
Hi Everyone,

I have a column that contains serial numbers in this format -
mmddyy -
###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it
into a
date
(mm/dd/yy).
I tried to do this with the following code and it doesn't
work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <=
endserial
Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if
cannot
get
the
first 6 digit to convert into a date - sometimes the field may
not
be a
serial number and just some other ID number so it can't be
converted
into a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning










tracktraining

convert first 6 digits into date
 

thanks for the code below. works like magic!
--
Learning


"Patrick Molloy" wrote:

i thought this was all over.

The code below parses a selection of cells - you can easily adapt i t- and
where a cel's contents match the pattern ######-??? the date i sput into the
cell to it's right and the bit after the date is in the next cell

Option Explicit
Sub demo()
Dim cell As Range
For Each cell In Range("C4:C10")
Parse cell
Next
End Sub
Sub Parse(cell As Range)
Dim text As String
text = cell.Value
If text Like "######-???" Then
cell.Offset(, 1) = DateValue(Format$(Left(text, 6), "@@/@@/@@"))
cell.Offset(, 2) = Mid(text, 8)
End If
End Sub

"tracktraining" wrote in message
...
Hi everyone,

I am still unable to figure this out. Were you able to figure out
something?
or any sugguestions? Any help will do.

Thanks,
Tracktraining

--
Learning


"tracktraining" wrote:

yes you are correct. Sometime the field is ######### (the amount of digit
varies)... i would like the code to skip over the field that is not in
this
format ######-###.

Also, when i filter the data, the cells should now be consistent. for
example, if i filter it for a certain customer, then the serial number
format
in the Serial Column should be ######-### or #######(digit varies). Right
now
i am only looking at the serial number for ######-### (after filtering).

i hope that make sense.

--
Learning


"Rick Rothstein" wrote:

Showing us your code is always helpful. Off the top of my head (and in
my
tests), I don't see why you should be erroring out on this line...

recserial = Format(Left(SerialRng, 6), "@@/@@/@@")

The only thing I can think of is that the contents of the cell is not
in the
form you showed us (######-###)... that is, I suspect either one or
more
leading spaces OR the number in the cell is actually ######### and you
have
it Custom Formatted as 000000-000. Is either of these the case? If so,
tell
me which and I will adjust the code accordingly. If not, then tell us
what
the exact error message that you are getting is.

--
Rick (MVP - Excel)


"tracktraining" wrote in
message
...
maybe it would help if you see my whole code:

Sub Starting_SerialRng(d1 As Date, d2 As Date, ss As Date, es As
Date, p
As
String)
Dim SerialRng As Range
Dim myserial As String
Dim recserial As Date

Sheets("Complaint Log (2)").Select
Columns("A:O").Select
Selection.AutoFilter
Selection.AutoFilter Field:=9, Criteria1:="=" & d1 & "",
Operator:=xlAnd, Criteria2:="<=" & d2 & "", Operator:=xlAnd
Selection.AutoFilter Field:=5, Criteria1:="=*" & p & "*"

With Worksheets("Complaint Log (2)")
Set SerialRng = .Range("D2", .cells(.Rows.count,
"D").End(xlUp))
End With

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.Offset(0, 3), 6)
recserial = Format(myserial, "@@/@@/@@")
'recserial = Format(Left(SerialRng, 6), "@@/@@/@@")
'recserial = DateSerial(Mid(myserial, 5, 2), Left(myserial,
2),
Mid(myserial, 3, 2))
If IsDate(recserial) Then
If recserial = ss And recserial <= es Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Sheets("Data").cells(Rows.count,
1).End(xlUp)(2).PasteSpecial Paste:=xlAll
End If
End If
Next SerialRng

End Sub

--
Learning


"Rick Rothstein" wrote:

Just to be clear, the Format function returns the String value
"06/03/08"
and the assignment to the Date variable, or alternately wrapping it
in
the
CDate function, is what converts that String value into a Date
value.

--
Rick (MVP - Excel)


"Mishell" wrote in message
...
Thank you Rick.

I did not know that the FORMAT function could do this, transform
060308 to 06/03/08

Mishell

"Rick Rothstein" wrote in
message
...
'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

If you place the output from a **properly constructed** Format
function
into a Date variable, you will have a Date that can be used in a
comparison with other dates, so a general warning about staying
away
from
the Format function may be too strong a statement. In my response
to
the
OP, I offered this code line...

MySerial = Left(Format(SerialRng, "@@/@@/@@"), 8)

which uses the Format statement as its basis and which works fine
(as
long as MySerial is Dim'med as a Date). By the way, another way
to
write
this statement (so that it looks like a "true" Format statement)
is
this
way...

MySerial = Format(Left(SerialRng, 6), "@@/@@/@@")

and, as long as MySerial is Dim'med as a Date, it would work fine
too.
If
the OP wanted to do the comparisons directly, without using a
variable
Dim'med as a Date, the you would simply wrap the output from the
Format
function with a CDate function call. For example, something like
this...

If CDateFormat(Left(SerialRng, 6), "@@/@@/@@")) = OtherDate Then

--
Rick (MVP - Excel)


"Mishell" wrote in message
...

Sub Final()

'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

Dim startserial As Date

Dim endserial As Date

startserial = CDate(Me.Start_Serial)
endserial = CDate(Me.End_Serial)


For Each SerialRng In SerialRng.Cells
myserial = Left(Cells(SerialRng.Row, 4), 6)
YY = Mid(myserial, 5, 2)
MM = Left(myserial, 2)
DD = Mid(myserial, 3, 2)
record_serial = DateSerial(YY, MM, DD)

'On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <=
endserial
Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Cells(Rows.Count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

End Sub

Mishell

"tracktraining" wrote
in
message
...
Hi Everyone,

I have a column that contains serial numbers in this format -
mmddyy -
###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it
into a
date
(mm/dd/yy).
I tried to do this with the following code and it doesn't work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <=
endserial
Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if
cannot
get
the
first 6 digit to convert into a date - sometimes the field may
not
be a
serial number and just some other ID number so it can't be
converted
into a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning






Patrick Molloy

convert first 6 digits into date
 

great news!

thanks for the feedback

"tracktraining" wrote in message
...
thanks for the code below. works like magic!
--
Learning


"Patrick Molloy" wrote:

i thought this was all over.

The code below parses a selection of cells - you can easily adapt i t-
and
where a cel's contents match the pattern ######-??? the date i sput into
the
cell to it's right and the bit after the date is in the next cell

Option Explicit
Sub demo()
Dim cell As Range
For Each cell In Range("C4:C10")
Parse cell
Next
End Sub
Sub Parse(cell As Range)
Dim text As String
text = cell.Value
If text Like "######-???" Then
cell.Offset(, 1) = DateValue(Format$(Left(text, 6), "@@/@@/@@"))
cell.Offset(, 2) = Mid(text, 8)
End If
End Sub

"tracktraining" wrote in
message
...
Hi everyone,

I am still unable to figure this out. Were you able to figure out
something?
or any sugguestions? Any help will do.

Thanks,
Tracktraining

--
Learning


"tracktraining" wrote:

yes you are correct. Sometime the field is ######### (the amount of
digit
varies)... i would like the code to skip over the field that is not in
this
format ######-###.

Also, when i filter the data, the cells should now be consistent. for
example, if i filter it for a certain customer, then the serial number
format
in the Serial Column should be ######-### or #######(digit varies).
Right
now
i am only looking at the serial number for ######-### (after
filtering).

i hope that make sense.

--
Learning


"Rick Rothstein" wrote:

Showing us your code is always helpful. Off the top of my head (and
in
my
tests), I don't see why you should be erroring out on this line...

recserial = Format(Left(SerialRng, 6), "@@/@@/@@")

The only thing I can think of is that the contents of the cell is
not
in the
form you showed us (######-###)... that is, I suspect either one or
more
leading spaces OR the number in the cell is actually ######### and
you
have
it Custom Formatted as 000000-000. Is either of these the case? If
so,
tell
me which and I will adjust the code accordingly. If not, then tell
us
what
the exact error message that you are getting is.

--
Rick (MVP - Excel)


"tracktraining" wrote in
message
...
maybe it would help if you see my whole code:

Sub Starting_SerialRng(d1 As Date, d2 As Date, ss As Date, es As
Date, p
As
String)
Dim SerialRng As Range
Dim myserial As String
Dim recserial As Date

Sheets("Complaint Log (2)").Select
Columns("A:O").Select
Selection.AutoFilter
Selection.AutoFilter Field:=9, Criteria1:="=" & d1 & "",
Operator:=xlAnd, Criteria2:="<=" & d2 & "", Operator:=xlAnd
Selection.AutoFilter Field:=5, Criteria1:="=*" & p & "*"

With Worksheets("Complaint Log (2)")
Set SerialRng = .Range("D2", .cells(.Rows.count,
"D").End(xlUp))
End With

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.Offset(0, 3), 6)
recserial = Format(myserial, "@@/@@/@@")
'recserial = Format(Left(SerialRng, 6), "@@/@@/@@")
'recserial = DateSerial(Mid(myserial, 5, 2), Left(myserial,
2),
Mid(myserial, 3, 2))
If IsDate(recserial) Then
If recserial = ss And recserial <= es Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Sheets("Data").cells(Rows.count,
1).End(xlUp)(2).PasteSpecial Paste:=xlAll
End If
End If
Next SerialRng

End Sub

--
Learning


"Rick Rothstein" wrote:

Just to be clear, the Format function returns the String value
"06/03/08"
and the assignment to the Date variable, or alternately wrapping
it
in
the
CDate function, is what converts that String value into a Date
value.

--
Rick (MVP - Excel)


"Mishell" wrote in message
...
Thank you Rick.

I did not know that the FORMAT function could do this,
transform
060308 to 06/03/08

Mishell

"Rick Rothstein" wrote in
message
...
'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

If you place the output from a **properly constructed** Format
function
into a Date variable, you will have a Date that can be used in
a
comparison with other dates, so a general warning about
staying
away
from
the Format function may be too strong a statement. In my
response
to
the
OP, I offered this code line...

MySerial = Left(Format(SerialRng, "@@/@@/@@"), 8)

which uses the Format statement as its basis and which works
fine
(as
long as MySerial is Dim'med as a Date). By the way, another
way
to
write
this statement (so that it looks like a "true" Format
statement)
is
this
way...

MySerial = Format(Left(SerialRng, 6), "@@/@@/@@")

and, as long as MySerial is Dim'med as a Date, it would work
fine
too.
If
the OP wanted to do the comparisons directly, without using a
variable
Dim'med as a Date, the you would simply wrap the output from
the
Format
function with a CDate function call. For example, something
like
this...

If CDateFormat(Left(SerialRng, 6), "@@/@@/@@")) = OtherDate
Then

--
Rick (MVP - Excel)


"Mishell" wrote in message
...

Sub Final()

'You must compare Dates with Dates, not Dates with Strings
'So forget the Format function if you want to compare dates

Dim startserial As Date

Dim endserial As Date

startserial = CDate(Me.Start_Serial)
endserial = CDate(Me.End_Serial)


For Each SerialRng In SerialRng.Cells
myserial = Left(Cells(SerialRng.Row, 4), 6)
YY = Mid(myserial, 5, 2)
MM = Left(myserial, 2)
DD = Mid(myserial, 3, 2)
record_serial = DateSerial(YY, MM, DD)

'On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <=
endserial
Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
Cells(Rows.Count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

End Sub

Mishell

"tracktraining"
wrote
in
message
...
Hi Everyone,

I have a column that contains serial numbers in this
format -
mmddyy -
###
(i.e. 060308-001).
I would like to split out the first 6 digits and convert it
into a
date
(mm/dd/yy).
I tried to do this with the following code and it doesn't
work:

'------start code

startserial = Format(Me.Start_Serial, "mm/dd/yy")
endserial = Format(Me.End_Serial, "mm/dd/yy")

For Each SerialRng In SerialRng.cells
myserial = Left(SerialRng.cells(SerialRng.row, 4), 6)
record_serial = Format(myserial, "mm/dd/yy")
On Error Goto Next SerialRng ***(see note below)
If record_serial = startserial And record_serial <=
endserial
Then
SerialRng.EntireRow.Copy
Sheets("Data").Select
cells(Rows.count, 1).End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlAll
End If
Next SerialRng

'---- end code

***here I would like for it to skip to the next SerialRng if
cannot
get
the
first 6 digit to convert into a date - sometimes the field
may
not
be a
serial number and just some other ID number so it can't be
converted
into a
date.

Please help if possible.


Thank you!
tracktraining


--
Learning







All times are GMT +1. The time now is 05:29 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com