Creating a MyIsEven function

  • Thread starter Horatio J. Bilge, Jr.
  • Start date
H

Horatio J. Bilge, Jr.

I have a workbook that uses the ISEVEN function. Since some people who use
the workbook may not have ATP installed, I decided to try writing my own
MyIsEven function. It gives the same result as ISEVEN on all of the test
entries I tried, except for numbers greater than 2,147,483,647.

Function MyIsEven(Num As Long) As Boolean
Select Case Right (Num, 1)
Case 0, 2, 4, 6, 8
MyIsEven = True
Case Else
MyIsEven = False
End Select
End Function

I thought of adding an If statement to deal with the large numbers, but it
didn't make any difference:
If Num > 2147483647 Then
Num = Num - 2147483646
End If

I also thought of using MyIsEven(Num As Double), but that introduces
different errors.

For my workbook, what I have will work fine, but I thought I would try to be
as thorough as possible.
 
G

Gary''s Student

Make the argument a string rather than a number:

Function MyIsEven(r As Range) As Boolean
Dim s As String
s = r.Value
Select Case Right(s, 1)
Case 0, 2, 4, 6, 8
MyIsEven = True
Case Else
MyIsEven = False
End Select
End Function
 
M

Mike H

To emulate the ATP ISEVEN then the value needs to be truncated

s = Int(r.Value)

Mike
 
H

Horatio J. Bilge, Jr.

That solves the problem of the big numbers, but it introduces other errors.
Here are some samples:

Value MyIsEven ISEVEN
1.2 TRUE FALSE
abc2 TRUE #VALUE!
two FALSE #VALUE!
[blank] FALSE TRUE
 
M

Mike H

Read my reply. The ISEVEN function truncates decimals before testing for even

Mike

Horatio J. Bilge said:
That solves the problem of the big numbers, but it introduces other errors.
Here are some samples:

Value MyIsEven ISEVEN
1.2 TRUE FALSE
abc2 TRUE #VALUE!
two FALSE #VALUE!
[blank] FALSE TRUE

Gary''s Student said:
Make the argument a string rather than a number:

Function MyIsEven(r As Range) As Boolean
Dim s As String
s = r.Value
Select Case Right(s, 1)
Case 0, 2, 4, 6, 8
MyIsEven = True
Case Else
MyIsEven = False
End Select
End Function
 
H

Horatio J. Bilge, Jr.

That works on all of my samples, except for negative decimals. I changed it to:
s = Fix(r.Value) and it seems to work great.

Thanks!
 
H

Horatio J. Bilge, Jr.

It worked great in my test workbook, but when I put in into the actual
workbook, I got an error. I think the error is because the value I am testing
is not a range.
=MyIsEven(COUNT(A1:G1)) --> gives #VALUE! error
=MyIsEven(2) --> also gives #VALUE! error
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top