![]() |
what's wrong with custom function?
Function RsGlaso(gama, API, T, Pb)
' Application.Volatile False Dim Rs As Double, KorekcioniPb As Double 'gama = gas gravity - input testData=0.732 'API = ro [API] - input testData=38 'T - [F] - input testData=180 'Pb - [psi] - input testData=3811 KorekcioniPb = 10 ^ (2.8869 - (14.1811 - 3.3093 * Log(Pb)) ^ 0.5) 'Rs = gama * (((API ^ 0.989) / (T ^ 0.172)) * KorekcioniPb) ^ 1.2255 Rs = gama * (((API ^ 0.989) / (T ^ 0.172)) * KorekcioniPb) ^ 1.2255 RsGlaso = 5 End Function It works if I type formulas into spreadsheet, but if I defined it as custom function it returns #VALUE |
what's wrong with custom function?
It appears to me that you will get a value error when taking the square root
of a negative number. KorekcioniPb = 10 ^ (2.8869 - (14.1811 - 3.3093 * Log(Pb)) ^ 0.5) Perhaps re-written as: KorekcioniPb = 10^((28869 - 100*Sqr(141811 - 33093*Log(Pb))) / 10000) I think you should get a Value error when Pb is at your test value of 3811 because this causes a negative square root. Looks to me that Pb should be in the range of 0 - 72.619... -- Dana DeLouis Using Windows XP & Office XP = = = = = = = = = = = = = = = = = "Juggernnath" wrote in message ... Function RsGlaso(gama, API, T, Pb) ' Application.Volatile False Dim Rs As Double, KorekcioniPb As Double 'gama = gas gravity - input testData=0.732 'API = ro [API] - input testData=38 'T - [F] - input testData=180 'Pb - [psi] - input testData=3811 KorekcioniPb = 10 ^ (2.8869 - (14.1811 - 3.3093 * Log(Pb)) ^ 0.5) 'Rs = gama * (((API ^ 0.989) / (T ^ 0.172)) * KorekcioniPb) ^ 1.2255 Rs = gama * (((API ^ 0.989) / (T ^ 0.172)) * KorekcioniPb) ^ 1.2255 RsGlaso = 5 End Function It works if I type formulas into spreadsheet, but if I defined it as custom function it returns #VALUE |
what's wrong with custom function?
I don't get the #VALUE error unless
API < 0: API ^ 0.989 fails, T = 0: division by 0 in the Rs= line, Pb <= 0: Log(Pb) fails, or Pb about 72.5: (14.1811 - 3.3093 * Log(Pb)) ^ 0.5 fails. On the other hand, since you put RsGlaso = 5, the function will, if it doesn't error, always return 5. That can't be right... In article , "Juggernnath" wrote: Function RsGlaso(gama, API, T, Pb) ' Application.Volatile False Dim Rs As Double, KorekcioniPb As Double 'gama = gas gravity - input testData=0.732 'API = ro [API] - input testData=38 'T - [F] - input testData=180 'Pb - [psi] - input testData=3811 KorekcioniPb = 10 ^ (2.8869 - (14.1811 - 3.3093 * Log(Pb)) ^ 0.5) 'Rs = gama * (((API ^ 0.989) / (T ^ 0.172)) * KorekcioniPb) ^ 1.2255 Rs = gama * (((API ^ 0.989) / (T ^ 0.172)) * KorekcioniPb) ^ 1.2255 RsGlaso = 5 End Function It works if I type formulas into spreadsheet, but if I defined it as custom function it returns #VALUE |
what's wrong with custom function?
LOG(3811)=3.5810389
*3.3093=11.850732 14.811-11.850732=2.9602678 SQR(2.9602678 0) = 1.72 I didn't understand if you made calculating mistake or tried to say something else... ================================================== ============== "Dana DeLouis" wrote in message ... It appears to me that you will get a value error when taking the square root of a negative number. KorekcioniPb = 10 ^ (2.8869 - (14.1811 - 3.3093 * Log(Pb)) ^ 0.5) Perhaps re-written as: KorekcioniPb = 10^((28869 - 100*Sqr(141811 - 33093*Log(Pb))) / 10000) I think you should get a Value error when Pb is at your test value of 3811 because this causes a negative square root. Looks to me that Pb should be in the range of 0 - 72.619... -- Dana DeLouis Using Windows XP & Office XP = = = = = = = = = = = = = = = = = "Juggernnath" wrote in message ... Function RsGlaso(gama, API, T, Pb) ' Application.Volatile False Dim Rs As Double, KorekcioniPb As Double 'gama = gas gravity - input testData=0.732 'API = ro [API] - input testData=38 'T - [F] - input testData=180 'Pb - [psi] - input testData=3811 KorekcioniPb = 10 ^ (2.8869 - (14.1811 - 3.3093 * Log(Pb)) ^ 0.5) 'Rs = gama * (((API ^ 0.989) / (T ^ 0.172)) * KorekcioniPb) ^ 1.2255 Rs = gama * (((API ^ 0.989) / (T ^ 0.172)) * KorekcioniPb) ^ 1.2255 RsGlaso = 5 End Function It works if I type formulas into spreadsheet, but if I defined it as custom function it returns #VALUE |
what's wrong with custom function?
In VBA, LOG() is the natural log function. In XL, LOG(x) is the log
to base x, with the default being base 10. If you want log base 10 in VBA, use Log(x)/Log(10) ?Log(3811)/Log(10) 3.58103894877217 In article , "Juggernnath" wrote: LOG(3811)=3.5810389 *3.3093=11.850732 14.811-11.850732=2.9602678 SQR(2.9602678 0) = 1.72 I didn't understand if you made calculating mistake or tried to say something else... |
what's wrong with custom function?
Hi. Looks like J.E. caught the problem here. :) Here are some
additional ideas for consideration: Sub Demo() 'VBA Debug.Print Log(3811) Worksheet Function Debug.Print WorksheetFunction.Log(3811, 10) Debug.Print WorksheetFunction.Log10(3811) End Sub returns... 8.24564690087386 3.58103894877217 3.58103894877217 -- Dana DeLouis Using Windows XP & Office XP = = = = = = = = = = = = = = = = = "Juggernnath" wrote in message ... LOG(3811)=3.5810389 *3.3093=11.850732 14.811-11.850732=2.9602678 SQR(2.9602678 0) = 1.72 <snip |
what's wrong with custom function?
Sorry, I thought of something like that, but I was stupid and quickly
checked the function in Worksheet. I didn't know that Log isn't the same function in Sheet and in VBA. "Dana DeLouis" wrote in message ... Hi. Looks like J.E. caught the problem here. :) Here are some additional ideas for consideration: Sub Demo() 'VBA Debug.Print Log(3811) Worksheet Function Debug.Print WorksheetFunction.Log(3811, 10) Debug.Print WorksheetFunction.Log10(3811) End Sub returns... 8.24564690087386 3.58103894877217 3.58103894877217 -- Dana DeLouis Using Windows XP & Office XP = = = = = = = = = = = = = = = = = "Juggernnath" wrote in message ... LOG(3811)=3.5810389 *3.3093=11.850732 14.811-11.850732=2.9602678 SQR(2.9602678 0) = 1.72 <snip |
what's wrong with custom function?
Thanks, I didn't know that Log isn't the same function in Sheet and in VBA.
"J.E. McGimpsey" wrote in message ... In VBA, LOG() is the natural log function. In XL, LOG(x) is the log to base x, with the default being base 10. If you want log base 10 in VBA, use Log(x)/Log(10) ?Log(3811)/Log(10) 3.58103894877217 In article , "Juggernnath" wrote: LOG(3811)=3.5810389 *3.3093=11.850732 14.811-11.850732=2.9602678 SQR(2.9602678 0) = 1.72 I didn't understand if you made calculating mistake or tried to say something else... |
All times are GMT +1. The time now is 11:56 PM. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com