UDF: how to get value of the argument's adjacent cell?

A

Andrew

Hi
I need to write a function which will use two arguments, e.g. vala and
valb (not adjacent) as input values. This function should refer
adjacent cells of vala and valb to calculate result for example:

A B
1 adj_vala vala

2

3 adj_valb valb

4 adj_vala + adj_valb

So UDF to calculate B4, as I see it, will lool like (I don't know how
to get adj_vala and adj_valb in the UDF below):

Function Result(vala As Long, valb As Long) As Long

Dim adj_vala As Long
Dim adj_valb As Long


' get value of the left adjacent cell of vala
adj_vala = ???

' get value of the left adjacent cell of valb
adj_valb = ???

Result = adj_vala + adj_valb

End Function


The example above describes simplifed version of more complex logic I
have to implement, but idea will be the same...

Thanks a lot,
Andrew
 
V

Vasant Nanavati

One way:

Function Result(vala As Range, valb As Range) As Long
Result = vala.Offset(, -1) + valb.Offset(, -1)
End Function

The problem is that you say you want to use values as arguments but you are
using the ranges that the values are in to calculate the results. The above
takes care of that disconnect.
 
T

Tim Williams

Change your function definition to take range parameters instead of
longs

Function Result(rng1 As Range, rng2 As Range) As Long

Dim adj_vala As Long
Dim adj_valb As Long

' get value of the left adjacent cell of vala
adj_vala = rng1.offset(0,-1).value
adj_valb = rng2.offset(0,-1).value
Result = adj_vala + adj_valb

End Function

Tim.
 
T

Tim Zych

You got solid advice.
Just to add, I think you will have to change your function name from
"Result" to something else.
Excel doesn't seem to like it as a UDF name.
 
N

Niek Otten

Hi Andrew,

Be aware that your function might not recalculate when expected.
Excel will recalc when (one of) the arguments change, not cells adjacent to
the arguments.
--

Kind Regards,

Niek Otten

Microsoft MVP - Excel
 
D

David Prout

Add the function below into a module

Function Res(ValA, ValB)
Res = ValA * ValB
End Function


in cell B4 (or anywhere) type

=res(A1,A3)

DavidP
 
B

Bob Phillips

I may be missing something, but surely you would pass the 2 cells to be
worked upon as arguments to that function and use them.

Thus if you wanted to work on B4 and B5 you would cal.l
=myFunction(B4,B5)

To use
=myFun ction(B3,B4)
and offset them seems pervers to me.

--

HTH

Bob Phillips
... looking out across Poole Harbour to the Purbecks
(remove nothere from the email address if mailing direct)
 
A

Andrew

David Prout said:
Add the function below into a module

Function Res(ValA, ValB)
Res = ValA * ValB
End Function


in cell B4 (or anywhere) type

=res(A1,A3)

DavidP

Hi David, thanks for your reply but I need to get values of A1 and A3
inside my function, and my function shouldn't use A1 and A3 value as
arguments, arguments are B1 and B3, not A1 and A3!!! As I said this is
a simplified logic I am going to use, complete solution will scan
adjacent cell untill a condition will be met. In order to implement
this I have to somehow get A1 and A3 values in my function.
 
A

Andrew

Can you please refer to other solutions, I wasn't able to find anything.
How can I find cell of the UDF argiment?
Thanks,
Andrew
 

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