View Single Post
  #9   Report Post  
Posted to microsoft.public.excel.worksheet.functions
Rick Rothstein \(MVP - VB\)[_316_] Rick Rothstein \(MVP - VB\)[_316_] is offline
external usenet poster
 
Posts: 1
Default Reducing numbers by one in defined areas over several sheets

I don't think it will be hard to code once we understand what is controlling
it. What would need to be in a cell in order that decrementing it by one
would produce the last day of a month? What is in the cell initially? A
blank? Or, what is in the column and/or row that indicates a date should be
in the cell and, if that cell is blank, the date should be the last day of
the month? How will you know which month that is? In other words, right now,
you can look at your table and tell it needs to have the last date placed in
a cell... what is it about the layout of your data that lets you know to put
that last day of the month in what I am assuming is a blank cell?

Rick


"Colin Hayes" wrote in message
...

Hi Rick

Sorry for not mentioning that it is dates we are working on.

Thanks for getting back and for the new code. It works perfectly to remove
the erroneous date at the beginning of the month now.

The 'missing' last day of the month continues to be an issue. Due of
course to each date being reduced by one the final 31st of the month , for
example , is becoming the 30th , and the 31st is not being replaced. There
would have needed to have been a 32nd in the original sheet for this to
happen(!). This follows for all 12 sheets - the last date in each month is
missing after running the macro.

Complicating factor of course is the differing lengths of the months. It's
easily corrected manually , of course , and would be hard (I think)
programmatically to correct.

Thanks again for you expertise.

Best Wishes




In article , Rick Rothstein (MVP -
VB) writes
First off, you never mentioned dates in your original question. As a
matter
of fact, you specifically requested blanking out the cell if the "number"
became negative... a date can never be negative. Hence, the reason I and
Per
gave you the code we did.

Okay, now, as to your question given your latest posting... the code below
will blank out the cell if the date it contains is the first of the month;
however, I do not understand what you mean when you say the "last day of
the
month is missing altogether". If you are blanking out a cell when one is
subtracted from the first of the month, then there will be no date (only
an
empty cell) to subtract one from in order to get the last day of the
month;
and if you start with the end of the month, then my code (and I'm pretty
sure Per's code) will properly decrement it by one. So, can you clarify
what
you meant, or what you were looking to have happen, when you said that?

Sub DecreaseByOne()
Dim WS As Worksheet
Dim CL As Range
Application.ScreenUpdating = False
For Each WS In Worksheets
For Each CL In WS.Range("A3:N35")
If IsDate(CL.Value) Then
If Day(CL.Value) = 1 Then
CL = ""
Else
CL.Value = CL.Value - 1
End If
End If
Next
Next
Application.ScreenUpdating = True
End Sub

Rick



"Colin Hayes" wrote in message
...
In article , Rick Rothstein

(MVP -
VB) writes
Just out of curiosity, what anomalous results are you getting?

If you are running my code, it will leave you on the same sheet you call
the
macro from. However, if you to explicitly go to sheet #1, add this....

Worksheets(1).Select

at the end of the macro (probably before setting ScreenUpdating to True
would make the most sense).

Rick

Hi Rick

I'm applying the code to dates in each of the sheets. I had to change
the
IsNumeric element to IsDate , of course.

It works OK but the first day of the month , which should become 0 and
therefore be blanked out is actually reading 31. The last day of the
month
is missing altogether. This is repeated over all 12 sheets.

I can live with this and amend manually , although it would be nice if
it
did the whole job. I know dates can get complicated.

Best Wishes





"Colin Hayes" wrote in message
...


Hi guys

OK thanks - that's done the trick.

It does give a couple of anomalous results , I find , but I can work
them
out.

Thanks again.

B

TW Per , could you add a line to the end of the code you gave to select
the first sheet in the wb on completion of the macro?

^_^





In article , Rick Rothstein
(MVP -
VB) writes
Give this a try...

Sub DecreaseByOne()
Dim WS As Worksheet
Dim CL As Range
Application.ScreenUpdating = False
For Each WS In Worksheets
For Each CL In WS.Range("A3:N35")
If IsNumeric(CL.Value) Then CL.Value = CL.Value - 1
If CL.Value < 0 Then CL = ""
Next
Next
Application.ScreenUpdating = True
End Sub

Rick


"Colin Hayes" wrote in message
.. .

Hi

I need some help constructing a macro.

I have a workbook with 12 sheets , A - L.

In each sheet , range A3 - N35 contains a series of numbers , with
some
cells being blank.

I need a macro which will go through each sheet , reducing each
number
it
finds by 1.

Blank cells should be left blank. Where a cell becomes negative
after
subtracting 1 from it , this should be made blank too.

Can someone help?

Grateful for any assistance.



Best Wishes