Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.worksheet.functions
external usenet poster
 
Posts: 270
Default Code simplification

I have the following code which works fine. My question though is how can it
be simplified (which I am sure it can).

For Each mycell In Range("C31:K31,M31:U31")
If mycell.Offset(-25) = 3 And mycell.Offset(-5) - mycell.Offset(-23)
= 1 Then
mycell.Value = "Normal"
mycell.Offset(1).Value = 0
ElseIf mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23) = 2 Then
mycell.Value = "+1"
mycell.Offset(1).Value = 1
ElseIf mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23) = 3 Then
mycell.Value = "+2"
mycell.Offset(1).Value = 2

*******Etc********

ElseIf mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23) = 10 Then
mycell.Value = "+9"
mycell.Offset(1).Value = 9
ElseIf mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23) = 11 Then
mycell.Value = "Too High"
mycell.Offset(1).Value = 10

ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 1 Then
mycell.Value = "-1"
mycell.Offset(1).Value = -1
ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 2 Then
mycell.Value = "Nomal"
mycell.Offset(1).Value = 0
ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 3 Then
mycell.Value = "+1"
mycell.Offset(1).Value = 1

*******Etc********

ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 11 Then
mycell.Value = "+9"
mycell.Offset(1).Value = 9
ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 12 Then
mycell.Value = "Too High"
mycell.Offset(1).Value = 10

ElseIf mycell.Offset(-25) = 5 And mycell.Offset(-5) -
mycell.Offset(-23) = 1 Then
mycell.Value = "-2"
mycell.Offset(1).Value = -2
ElseIf mycell.Offset(-25) = 5 And mycell.Offset(-5) -
mycell.Offset(-23) = 2 Then
mycell.Value = "-1"
mycell.Offset(1).Value = -1
ElseIf mycell.Offset(-25) = 5 And mycell.Offset(-5) -
mycell.Offset(-23) = 3 Then
mycell.Value = "Normal"
mycell.Offset(1).Value = 0

*******Etc********

ElseIf mycell.Offset(-25) = 5 And mycell.Offset(-5) -
mycell.Offset(-23) = 13 Then
mycell.Value = "Too High"
mycell.Offset(1).Value = 10
End If
Next mycell

Thanks
Sandy


  #2   Report Post  
Posted to microsoft.public.excel.worksheet.functions
external usenet poster
 
Posts: 10,124
Default Code simplification

Using SELECT CASE would help a lot. See the vba help index

select case mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23)
case 1:x="normal"
'etc
case else
end select
msgbox x

--
Don Guillett
SalesAid Software

"Sandy" wrote in message
...
I have the following code which works fine. My question though is how can
it be simplified (which I am sure it can).

For Each mycell In Range("C31:K31,M31:U31")
If mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23) = 1 Then
mycell.Value = "Normal"
mycell.Offset(1).Value = 0
ElseIf mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23) = 2 Then
mycell.Value = "+1"
mycell.Offset(1).Value = 1
ElseIf mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23) = 3 Then
mycell.Value = "+2"
mycell.Offset(1).Value = 2

*******Etc********

ElseIf mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23) = 10 Then
mycell.Value = "+9"
mycell.Offset(1).Value = 9
ElseIf mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23) = 11 Then
mycell.Value = "Too High"
mycell.Offset(1).Value = 10

ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 1 Then
mycell.Value = "-1"
mycell.Offset(1).Value = -1
ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 2 Then
mycell.Value = "Nomal"
mycell.Offset(1).Value = 0
ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 3 Then
mycell.Value = "+1"
mycell.Offset(1).Value = 1

*******Etc********

ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 11 Then
mycell.Value = "+9"
mycell.Offset(1).Value = 9
ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 12 Then
mycell.Value = "Too High"
mycell.Offset(1).Value = 10

ElseIf mycell.Offset(-25) = 5 And mycell.Offset(-5) -
mycell.Offset(-23) = 1 Then
mycell.Value = "-2"
mycell.Offset(1).Value = -2
ElseIf mycell.Offset(-25) = 5 And mycell.Offset(-5) -
mycell.Offset(-23) = 2 Then
mycell.Value = "-1"
mycell.Offset(1).Value = -1
ElseIf mycell.Offset(-25) = 5 And mycell.Offset(-5) -
mycell.Offset(-23) = 3 Then
mycell.Value = "Normal"
mycell.Offset(1).Value = 0

*******Etc********

ElseIf mycell.Offset(-25) = 5 And mycell.Offset(-5) -
mycell.Offset(-23) = 13 Then
mycell.Value = "Too High"
mycell.Offset(1).Value = 10
End If
Next mycell

Thanks
Sandy


  #3   Report Post  
Posted to microsoft.public.excel.worksheet.functions
external usenet poster
 
Posts: 3,365
Default Code simplification

You could rewrite it usin Select Case to replace all of those ElseIf's and I
think it becomes more readable and probably a little more efficient. Check
out Excel's Help on Select Case for variations of the individual Case
evaluations available.

For Each mycell In Range("C31:K31,M31:U31")
Select Case mycell.Offset(-25)
Case Is = 3
Select Case mysell.Offset(-5) - _
mycell.Offset(-23)
Case Is = 1
mycell = "Normal"
mycell.Offset(1) = 0
Case Is = 2
mycell = "+1"
mycell.Offset(1) = 1
Case Is = 3
mycell = "+2"
mycell.Offset(1) = 2
'add more Case Is statements as needed
Case Else
'do nothing
End Select

Case Is = 4
Select Case mysell.Offset(-5) - _
mycell.Offset(-23)
Case Is = 1
mycell = "-1"
mycell.Offset(1) = -1
Case Is = 12
mycell = "Normal"
mycell.Offset(1) = 0
Case Is = 3
mycell = "+1"
mycell.Offset(1) = 1
'add more Case Is statements as needed
Case Is = 11
mycell = "+9"
mycell.Offset(1) = 9
Case Is = 12
mycell = "Too High"
mycell.Offset(1) = 10
Case Else
'do nothing
End Select

Case Is = 5
Select Case mysell.Offset(-5) - _
mycell.Offset(-23)
Case Is = 1
mycell = "-1"
mycell.Offset(1) = -1
Case Is = 2
mycell = "Normal"
mycell.Offset(1) = 0
Case Is = 3
mycell = "+1"
mycell.Offset(1) = 1
'add more Case Is statements as needed
Case Is = 13
mycell = "Too High"
mycell.Offset(1) = 10
Case Else
'do nothing
End Select

Case Else
'if .Offset(-25) value is not 3, 4 or 5, do nothing!
End Select
Next ' mycell loop end


"Sandy" wrote:

I have the following code which works fine. My question though is how can it
be simplified (which I am sure it can).

For Each mycell In Range("C31:K31,M31:U31")
If mycell.Offset(-25) = 3 And mycell.Offset(-5) - mycell.Offset(-23)
= 1 Then
mycell.Value = "Normal"
mycell.Offset(1).Value = 0
ElseIf mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23) = 2 Then
mycell.Value = "+1"
mycell.Offset(1).Value = 1
ElseIf mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23) = 3 Then
mycell.Value = "+2"
mycell.Offset(1).Value = 2

*******Etc********

ElseIf mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23) = 10 Then
mycell.Value = "+9"
mycell.Offset(1).Value = 9
ElseIf mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23) = 11 Then
mycell.Value = "Too High"
mycell.Offset(1).Value = 10

ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 1 Then
mycell.Value = "-1"
mycell.Offset(1).Value = -1
ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 2 Then
mycell.Value = "Nomal"
mycell.Offset(1).Value = 0
ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 3 Then
mycell.Value = "+1"
mycell.Offset(1).Value = 1

*******Etc********

ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 11 Then
mycell.Value = "+9"
mycell.Offset(1).Value = 9
ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 12 Then
mycell.Value = "Too High"
mycell.Offset(1).Value = 10

ElseIf mycell.Offset(-25) = 5 And mycell.Offset(-5) -
mycell.Offset(-23) = 1 Then
mycell.Value = "-2"
mycell.Offset(1).Value = -2
ElseIf mycell.Offset(-25) = 5 And mycell.Offset(-5) -
mycell.Offset(-23) = 2 Then
mycell.Value = "-1"
mycell.Offset(1).Value = -1
ElseIf mycell.Offset(-25) = 5 And mycell.Offset(-5) -
mycell.Offset(-23) = 3 Then
mycell.Value = "Normal"
mycell.Offset(1).Value = 0

*******Etc********

ElseIf mycell.Offset(-25) = 5 And mycell.Offset(-5) -
mycell.Offset(-23) = 13 Then
mycell.Value = "Too High"
mycell.Offset(1).Value = 10
End If
Next mycell

Thanks
Sandy



  #4   Report Post  
Posted to microsoft.public.excel.worksheet.functions
external usenet poster
 
Posts: 2,202
Default Code simplification

If I am not mistaken, I believe the entire For-Each block you posted can be
replaced with this one...

Dim mycell As Range

For Each mycell In Range("C31:K31,M31:U31")
With mycell
.Offset(1).Value = .Offset(-5) - .Offset(-23) - .Offset(-25) + 2
If .Offset(1).Value = 0 Then
.Value = "Normal"
ElseIf .Offset(1).Value = 10 Then
.Value = "Too High"
Else
.Value = Format$(.Offset(1).Value, "\""+0\"";\""-0\""")
End If
End With
Next

Rick



"Sandy" wrote in message
...
I have the following code which works fine. My question though is how can
it be simplified (which I am sure it can).

For Each mycell In Range("C31:K31,M31:U31")
If mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23) = 1 Then
mycell.Value = "Normal"
mycell.Offset(1).Value = 0
ElseIf mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23) = 2 Then
mycell.Value = "+1"
mycell.Offset(1).Value = 1
ElseIf mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23) = 3 Then
mycell.Value = "+2"
mycell.Offset(1).Value = 2

*******Etc********

ElseIf mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23) = 10 Then
mycell.Value = "+9"
mycell.Offset(1).Value = 9
ElseIf mycell.Offset(-25) = 3 And mycell.Offset(-5) -
mycell.Offset(-23) = 11 Then
mycell.Value = "Too High"
mycell.Offset(1).Value = 10

ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 1 Then
mycell.Value = "-1"
mycell.Offset(1).Value = -1
ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 2 Then
mycell.Value = "Nomal"
mycell.Offset(1).Value = 0
ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 3 Then
mycell.Value = "+1"
mycell.Offset(1).Value = 1

*******Etc********

ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 11 Then
mycell.Value = "+9"
mycell.Offset(1).Value = 9
ElseIf mycell.Offset(-25) = 4 And mycell.Offset(-5) -
mycell.Offset(-23) = 12 Then
mycell.Value = "Too High"
mycell.Offset(1).Value = 10

ElseIf mycell.Offset(-25) = 5 And mycell.Offset(-5) -
mycell.Offset(-23) = 1 Then
mycell.Value = "-2"
mycell.Offset(1).Value = -2
ElseIf mycell.Offset(-25) = 5 And mycell.Offset(-5) -
mycell.Offset(-23) = 2 Then
mycell.Value = "-1"
mycell.Offset(1).Value = -1
ElseIf mycell.Offset(-25) = 5 And mycell.Offset(-5) -
mycell.Offset(-23) = 3 Then
mycell.Value = "Normal"
mycell.Offset(1).Value = 0

*******Etc********

ElseIf mycell.Offset(-25) = 5 And mycell.Offset(-5) -
mycell.Offset(-23) = 13 Then
mycell.Value = "Too High"
mycell.Offset(1).Value = 10
End If
Next mycell

Thanks
Sandy


Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Convert a Number Code to a Text Code Traye Excel Discussion (Misc queries) 3 April 6th 07 09:54 PM
Simplification help Mike Smith NC Excel Worksheet Functions 3 July 12th 06 06:28 PM
Unprotect Code Module in Code Damien Excel Discussion (Misc queries) 2 April 18th 06 03:10 PM
copying vba code to a standard code module 1vagrowr Excel Discussion (Misc queries) 2 November 23rd 05 04:00 PM
formula simplification Todd Excel Worksheet Functions 2 October 28th 04 01:49 AM


All times are GMT +1. The time now is 03:41 AM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"