Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.excel.misc
|
|||
|
|||
Creating a MyIsEven function
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. |
#2
Posted to microsoft.public.excel.misc
|
|||
|
|||
Creating a MyIsEven function
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 -- Gary''s Student - gsnu200908 "Horatio J. Bilge, Jr." wrote: 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. |
#3
Posted to microsoft.public.excel.misc
|
|||
|
|||
Creating a MyIsEven function
To emulate the ATP ISEVEN then the value needs to be truncated
s = Int(r.Value) Mike "Gary''s Student" wrote: 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 -- Gary''s Student - gsnu200908 "Horatio J. Bilge, Jr." wrote: 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. |
#4
Posted to microsoft.public.excel.misc
|
|||
|
|||
Creating a MyIsEven function
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" wrote: 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 -- Gary''s Student - gsnu200908 "Horatio J. Bilge, Jr." wrote: 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. |
#5
Posted to microsoft.public.excel.misc
|
|||
|
|||
Creating a MyIsEven function
Read my reply. The ISEVEN function truncates decimals before testing for even
Mike "Horatio J. Bilge, Jr." wrote: 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" wrote: 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 -- Gary''s Student - gsnu200908 "Horatio J. Bilge, Jr." wrote: 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. |
#6
Posted to microsoft.public.excel.misc
|
|||
|
|||
Creating a MyIsEven function
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! "Mike H" wrote: To emulate the ATP ISEVEN then the value needs to be truncated s = Int(r.Value) Mike "Gary''s Student" wrote: 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 -- Gary''s Student - gsnu200908 "Horatio J. Bilge, Jr." wrote: 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. |
#7
Posted to microsoft.public.excel.misc
|
|||
|
|||
Creating a MyIsEven function
Good point, INT rounds the 'wrong' way for your purposes
Mike "Horatio J. Bilge, Jr." wrote: 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! "Mike H" wrote: To emulate the ATP ISEVEN then the value needs to be truncated s = Int(r.Value) Mike "Gary''s Student" wrote: 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 -- Gary''s Student - gsnu200908 "Horatio J. Bilge, Jr." wrote: 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. |
#8
Posted to microsoft.public.excel.misc
|
|||
|
|||
Creating a MyIsEven function
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 "Mike H" wrote: Good point, INT rounds the 'wrong' way for your purposes Mike "Horatio J. Bilge, Jr." wrote: 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! "Mike H" wrote: To emulate the ATP ISEVEN then the value needs to be truncated s = Int(r.Value) Mike "Gary''s Student" wrote: 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 -- Gary''s Student - gsnu200908 "Horatio J. Bilge, Jr." wrote: 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. |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
Help with creating a function | Excel Worksheet Functions | |||
Need help creating a function | Excel Worksheet Functions | |||
Creating a Function | Excel Worksheet Functions | |||
Creating a function | Excel Worksheet Functions | |||
creating a function | Excel Discussion (Misc queries) |