ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Filtering daily data (https://www.excelbanter.com/excel-programming/352302-filtering-daily-data.html)

[email protected]

Filtering daily data
 
Hello all,

I am stumped on the best way to handle this situation. I'll explain it
the best I can.

I have a macro that reads data from some log files. Every day at 12AM,
a new log file is created that will contain all of the data for that
day, from 12AM to 11:59:59PM.

This log file contains lines of data. Each line has a sequential
number. The numbering resets itself to 1 at the start of the
production day. This can be anywhere between 5AM and 6AM.

So, to get all of the numbers for one full production day, you have to
read data from two different log files. For instance, if you wanted
all of the data that relates to yesterday's production day, you would
need to start at yesterday's number 1 entry (which happened around 6AM
or so) and include the rest of the data after that entry, and you would
everything that happened before today's number 1 entry, not including
today's number one entry.

It is important to note that the times in which the numbers roll back
to number 1 to start the day are random.

Currently, I load the data file into Excel and do a filter based on
time. This is close, but doesn't always work, for the reasons stated
above.

What I really need is to find a way to say, "In yesterday's file, find
the #1 entry and delete everything that happened before it. Then, in
today's file, find the #1 entry and delete it, and everything that
happened after it."

I cannot seem to make this work. Can anyone help point me into the
right direction?

If you need more info, just ask.

Here is the data I have available:

Date / Time (military style) / Sequence number / Serial number
/ Product Type

Thanks!
Tim


Bernie Deitrick

Filtering daily data
 
Dim myCell As Range

'Open First File
Set myCell = Range("A:A").Find(1, , , xlWhole)
' Clear above that cell
Range("A1", myCell(0, 1)).EntireRow.Delete

'Open second file then
Set myCell = Range("A:A").Find(1, , , xlWhole)
'Clear that cell and below
Range(myCell, "E65536").EntireRow.Delete


HTH,
Bernie
MS Excel MVP


wrote in message
oups.com...
Hello all,

I am stumped on the best way to handle this situation. I'll explain it
the best I can.

I have a macro that reads data from some log files. Every day at 12AM,
a new log file is created that will contain all of the data for that
day, from 12AM to 11:59:59PM.

This log file contains lines of data. Each line has a sequential
number. The numbering resets itself to 1 at the start of the
production day. This can be anywhere between 5AM and 6AM.

So, to get all of the numbers for one full production day, you have to
read data from two different log files. For instance, if you wanted
all of the data that relates to yesterday's production day, you would
need to start at yesterday's number 1 entry (which happened around 6AM
or so) and include the rest of the data after that entry, and you would
everything that happened before today's number 1 entry, not including
today's number one entry.

It is important to note that the times in which the numbers roll back
to number 1 to start the day are random.

Currently, I load the data file into Excel and do a filter based on
time. This is close, but doesn't always work, for the reasons stated
above.

What I really need is to find a way to say, "In yesterday's file, find
the #1 entry and delete everything that happened before it. Then, in
today's file, find the #1 entry and delete it, and everything that
happened after it."

I cannot seem to make this work. Can anyone help point me into the
right direction?

If you need more info, just ask.

Here is the data I have available:

Date / Time (military style) / Sequence number / Serial number
/ Product Type

Thanks!
Tim




Bernie Deitrick

Filtering daily data
 
D'Oh!

Range(myCell, "E65536").EntireRow.Delete

Should have been

Range(myCell, "A65536").EntireRow.Delete

Not that it _really_ matters, but just for consistency....

HTH,
Bernie
MS Excel MVP


"Bernie Deitrick" <deitbe @ consumer dot org wrote in message
...
Dim myCell As Range

'Open First File
Set myCell = Range("A:A").Find(1, , , xlWhole)
' Clear above that cell
Range("A1", myCell(0, 1)).EntireRow.Delete

'Open second file then
Set myCell = Range("A:A").Find(1, , , xlWhole)
'Clear that cell and below
Range(myCell, "E65536").EntireRow.Delete


HTH,
Bernie
MS Excel MVP


wrote in message
oups.com...
Hello all,

I am stumped on the best way to handle this situation. I'll explain it
the best I can.

I have a macro that reads data from some log files. Every day at 12AM,
a new log file is created that will contain all of the data for that
day, from 12AM to 11:59:59PM.

This log file contains lines of data. Each line has a sequential
number. The numbering resets itself to 1 at the start of the
production day. This can be anywhere between 5AM and 6AM.

So, to get all of the numbers for one full production day, you have to
read data from two different log files. For instance, if you wanted
all of the data that relates to yesterday's production day, you would
need to start at yesterday's number 1 entry (which happened around 6AM
or so) and include the rest of the data after that entry, and you would
everything that happened before today's number 1 entry, not including
today's number one entry.

It is important to note that the times in which the numbers roll back
to number 1 to start the day are random.

Currently, I load the data file into Excel and do a filter based on
time. This is close, but doesn't always work, for the reasons stated
above.

What I really need is to find a way to say, "In yesterday's file, find
the #1 entry and delete everything that happened before it. Then, in
today's file, find the #1 entry and delete it, and everything that
happened after it."

I cannot seem to make this work. Can anyone help point me into the
right direction?

If you need more info, just ask.

Here is the data I have available:

Date / Time (military style) / Sequence number / Serial number
/ Product Type

Thanks!
Tim






[email protected]

Filtering daily data
 
Bernie,

Thank you for the help! It seems to work great!

I did discover a problem though. It seems that there is an odd case
where the data didn't start at "1". Is there a way to find the lowest
number in the column and use that as the basis to delete either up or
down depending on the day?

TIm


Bernie Deitrick

Filtering daily data
 
Use this instead, in both cases:

Set myCell = Range("A:A").Find(Application.Min(Range("A:A")), , , xlWhole)

HTH,
Bernie
MS Excel MVP


wrote in message
ups.com...
Bernie,

Thank you for the help! It seems to work great!

I did discover a problem though. It seems that there is an odd case
where the data didn't start at "1". Is there a way to find the lowest
number in the column and use that as the basis to delete either up or
down depending on the day?

TIm




[email protected]

Filtering daily data
 
Bernie, this worked GREAT!

However,

Slight change of plans. I cannot delete the entire row, or else I will
impact other data on the sheet. So, I need to use this method of
finding the 1 in a range of columns, say A:G, and then delete the rows
in THOSE COLUMNS either above the 1, or after and including the 1,
based on the day.

I know this must be an easy adjustment, but I can not for the life of
me figure it out.

Thanks Berniw!
Tim


Bernie Deitrick

Filtering daily data
 
Deleting can affect a lot of things - how about we just clear the contents?

' Clear above that cell
Range("A1", myCell(0, 1)).Resize(, 7).ClearContents


'Clear that cell and below
Range(myCell, "E65536").)).Resize(,7).ClearContents


HTH,
Bernie
MS Excel MVP


wrote in message
oups.com...
Bernie, this worked GREAT!

However,

Slight change of plans. I cannot delete the entire row, or else I will
impact other data on the sheet. So, I need to use this method of
finding the 1 in a range of columns, say A:G, and then delete the rows
in THOSE COLUMNS either above the 1, or after and including the 1,
based on the day.

I know this must be an easy adjustment, but I can not for the life of
me figure it out.

Thanks Berniw!
Tim




Bernie Deitrick

Filtering daily data
 
Ooops, this

Range(myCell, "E65536").)).Resize(,7).ClearContents

should have been

Range(myCell, "E65536").Resize(,7).ClearContents

Sloppy copy and paste. Sorry.

HTH,
Bernie
MS Excel MVP


"Bernie Deitrick" <deitbe @ consumer dot org wrote in message
...
Deleting can affect a lot of things - how about we just clear the contents?

' Clear above that cell
Range("A1", myCell(0, 1)).Resize(, 7).ClearContents


'Clear that cell and below
Range(myCell, "E65536").)).Resize(,7).ClearContents


HTH,
Bernie
MS Excel MVP


wrote in message
oups.com...
Bernie, this worked GREAT!

However,

Slight change of plans. I cannot delete the entire row, or else I will
impact other data on the sheet. So, I need to use this method of
finding the 1 in a range of columns, say A:G, and then delete the rows
in THOSE COLUMNS either above the 1, or after and including the 1,
based on the day.

I know this must be an easy adjustment, but I can not for the life of
me figure it out.

Thanks Berniw!
Tim






[email protected]

Filtering daily data
 
Bernie,

Thank you for all your help on this. I ended going with a delete,
where you delete the selected range and shift the cells up:

Set myCell = Range("A:H").Find(1, , , xlWhole)
Range(myCell, "A65536").Resize(, 8).Delete Shift:=xlUp

I have another problem that just manifested itself today.

The problem is that the logs are generated every day, whether there is
production or not. So, when I ran the report today for Friday and
Saturday, there was no "1" in Saturday's log to key off of. This
caused an error and the macro halted. The error is "Run-time error
'1004': Method 'Range' of object '_Global' failed. The line that it
wants me to debug is:

Range(myCell, "A65536").Resize(, 8).Delete Shift:=xlUp

I am assuming that I get the error because myCell has no value because
there wasn't a "1" to find in the previous line of code (see above
posts).

Is there a way to integrate some error handling for this?

Tim


Bernie Deitrick

Filtering daily data
 
Tim,

Did you try this variant, when there wasn't a 1 to be found?

Set myCell = Range("A:A").Find(Application.Min(Range("A:A")), , , xlWhole)

Otherwise, you need to check after the find:

'Find the 1
Set myCell = Range("A:H").Find(1, , , xlWhole)

'If a 1 is found, myCell is a range
'If it isn't found, it is Nothing
If Not myCell Is Nothing Then
Range(myCell, "A65536").Resize(, 8).Delete Shift:=xlUp
End If

HTH,
Bernie
MS Excel MVP


wrote in message
oups.com...
Bernie,

Thank you for all your help on this. I ended going with a delete,
where you delete the selected range and shift the cells up:

Set myCell = Range("A:H").Find(1, , , xlWhole)
Range(myCell, "A65536").Resize(, 8).Delete Shift:=xlUp

I have another problem that just manifested itself today.

The problem is that the logs are generated every day, whether there is
production or not. So, when I ran the report today for Friday and
Saturday, there was no "1" in Saturday's log to key off of. This
caused an error and the macro halted. The error is "Run-time error
'1004': Method 'Range' of object '_Global' failed. The line that it
wants me to debug is:

Range(myCell, "A65536").Resize(, 8).Delete Shift:=xlUp

I am assuming that I get the error because myCell has no value because
there wasn't a "1" to find in the previous line of code (see above
posts).

Is there a way to integrate some error handling for this?

Tim





All times are GMT +1. The time now is 01:38 AM.

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