Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 167
Default User Defined Array Function

I would like to write a function that calculates the cross product of two 3D
vectors (that is, x1,y1,z1 and x2,y2,z2) The output of a cross product is
also a vector (that is, x3,y3,z3).

The math is simple enough, but I would like to export each variable to a
separate cell. That is, I select three linear cells in a row, type
"=CROSS(A1:A3)", hit CSE, and the value appears in each cell.

Could someone please advise on how to distribute the results to each cell?
The code to calculate x3,y3, z3 is below:

x3 = y1 * z2 - z1 * y2
y3 = z1 * x2 - x1 * z2
z3 = x1 * y2 - y1 * x2

The call line should be:

Function Cross(x1, y1, z1, x2, y2, z2) as Double

The inputs should not be set to a type since the user should be allowed to
enter either ranges or numbers.

Thanks,
Pflugs
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,939
Default User Defined Array Function

A UDF can only modify the value of the cell that it is in. It can not modify
the values of other cells, nor can it manipulate the formats of any cells
inlcuding the one that it is in. If not called as a UDF from within a sheet
then it can manipulate other cells including the value and the format... But
NOT as a UDF.
--
HTH...

Jim Thomlinson


"Pflugs" wrote:

I would like to write a function that calculates the cross product of two 3D
vectors (that is, x1,y1,z1 and x2,y2,z2) The output of a cross product is
also a vector (that is, x3,y3,z3).

The math is simple enough, but I would like to export each variable to a
separate cell. That is, I select three linear cells in a row, type
"=CROSS(A1:A3)", hit CSE, and the value appears in each cell.

Could someone please advise on how to distribute the results to each cell?
The code to calculate x3,y3, z3 is below:

x3 = y1 * z2 - z1 * y2
y3 = z1 * x2 - x1 * z2
z3 = x1 * y2 - y1 * x2

The call line should be:

Function Cross(x1, y1, z1, x2, y2, z2) as Double

The inputs should not be set to a type since the user should be allowed to
enter either ranges or numbers.

Thanks,
Pflugs

  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,441
Default User Defined Array Function

Pflugs,

Function Cross( _
x1 As Double, _
y1 As Double, _
z1 As Double, _
x2 As Double, _
y2 As Double, _
z2 As Double) As Variant
Dim myArray(1 To 3) As Double
myArray(1) = y1 * z2 - z1 * y2
myArray(2) = z1 * x2 - x1 * z2
myArray(3) = x1 * y2 - y1 * x2
If Application.Caller.Rows.Count = 1 Then
Cross = myArray
Else
Cross = Application.Transpose(myArray)
End If

End Function

Called like

=Cross(1,2,3,4,5,6)

entered using Ctrl-Shift-Enter after selecting 3 cells.

HTH,
Bernie
MS Excel MVP


"Pflugs" wrote in message
...
I would like to write a function that calculates the cross product of two
3D
vectors (that is, x1,y1,z1 and x2,y2,z2) The output of a cross product is
also a vector (that is, x3,y3,z3).

The math is simple enough, but I would like to export each variable to a
separate cell. That is, I select three linear cells in a row, type
"=CROSS(A1:A3)", hit CSE, and the value appears in each cell.

Could someone please advise on how to distribute the results to each cell?
The code to calculate x3,y3, z3 is below:

x3 = y1 * z2 - z1 * y2
y3 = z1 * x2 - x1 * z2
z3 = x1 * y2 - y1 * x2

The call line should be:

Function Cross(x1, y1, z1, x2, y2, z2) as Double

The inputs should not be set to a type since the user should be allowed to
enter either ranges or numbers.

Thanks,
Pflugs



  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 167
Default User Defined Array Function

Oh yeah. I forgot about that. Shoot.

Well, that's another drawback to UDFs, then.

Thanks,
Pflugs

"Jim Thomlinson" wrote:

A UDF can only modify the value of the cell that it is in. It can not modify
the values of other cells, nor can it manipulate the formats of any cells
inlcuding the one that it is in. If not called as a UDF from within a sheet
then it can manipulate other cells including the value and the format... But
NOT as a UDF.
--
HTH...

Jim Thomlinson


"Pflugs" wrote:

I would like to write a function that calculates the cross product of two 3D
vectors (that is, x1,y1,z1 and x2,y2,z2) The output of a cross product is
also a vector (that is, x3,y3,z3).

The math is simple enough, but I would like to export each variable to a
separate cell. That is, I select three linear cells in a row, type
"=CROSS(A1:A3)", hit CSE, and the value appears in each cell.

Could someone please advise on how to distribute the results to each cell?
The code to calculate x3,y3, z3 is below:

x3 = y1 * z2 - z1 * y2
y3 = z1 * x2 - x1 * z2
z3 = x1 * y2 - y1 * x2

The call line should be:

Function Cross(x1, y1, z1, x2, y2, z2) as Double

The inputs should not be set to a type since the user should be allowed to
enter either ranges or numbers.

Thanks,
Pflugs

  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 167
Default User Defined Array Function

Bernie,

Thank you so unbelievably much. The ability to program UDFs as UDAFs opens
an lot of doors for me. I will be using them to create multiple vector
functions in 3D.

What awesome syntax. Thanks again for your help.
Pflugs

"Bernie Deitrick" wrote:

Pflugs,

Function Cross( _
x1 As Double, _
y1 As Double, _
z1 As Double, _
x2 As Double, _
y2 As Double, _
z2 As Double) As Variant
Dim myArray(1 To 3) As Double
myArray(1) = y1 * z2 - z1 * y2
myArray(2) = z1 * x2 - x1 * z2
myArray(3) = x1 * y2 - y1 * x2
If Application.Caller.Rows.Count = 1 Then
Cross = myArray
Else
Cross = Application.Transpose(myArray)
End If

End Function

Called like

=Cross(1,2,3,4,5,6)

entered using Ctrl-Shift-Enter after selecting 3 cells.

HTH,
Bernie
MS Excel MVP


"Pflugs" wrote in message
...
I would like to write a function that calculates the cross product of two
3D
vectors (that is, x1,y1,z1 and x2,y2,z2) The output of a cross product is
also a vector (that is, x3,y3,z3).

The math is simple enough, but I would like to export each variable to a
separate cell. That is, I select three linear cells in a row, type
"=CROSS(A1:A3)", hit CSE, and the value appears in each cell.

Could someone please advise on how to distribute the results to each cell?
The code to calculate x3,y3, z3 is below:

x3 = y1 * z2 - z1 * y2
y3 = z1 * x2 - x1 * z2
z3 = x1 * y2 - y1 * x2

The call line should be:

Function Cross(x1, y1, z1, x2, y2, z2) as Double

The inputs should not be set to a type since the user should be allowed to
enter either ranges or numbers.

Thanks,
Pflugs






  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 947
Default User Defined Array Function

Hi. I added Bernie's excellent code to my library, but modified it slightly
so that it can be called from vba as well.

Function Cross( _
x1 As Double, _
y1 As Double, _
z1 As Double, _
x2 As Double, _
y2 As Double, _
z2 As Double) As Variant

Cross = Array(y1*z2-z1*y2,z1*x2-x1*z2,x1*y2-y1*x2)

If TypeName(Application.Caller) = "Range" Then
If Application.Caller.Rows.Count 1 Then _
Cross = WorksheetFunction.Transpose(Cross)
End If

End Function

Sub TestIt()
Dim v
v = Cross(1, 2, 3, 4, 5, 6)
End Sub

--
Dana DeLouis

"Pflugs" wrote in message
...
Bernie,

Thank you so unbelievably much. The ability to program UDFs as UDAFs
opens
an lot of doors for me. I will be using them to create multiple vector
functions in 3D.

What awesome syntax. Thanks again for your help.
Pflugs

"Bernie Deitrick" wrote:

Pflugs,

Function Cross( _
x1 As Double, _
y1 As Double, _
z1 As Double, _
x2 As Double, _
y2 As Double, _
z2 As Double) As Variant
Dim myArray(1 To 3) As Double
myArray(1) = y1 * z2 - z1 * y2
myArray(2) = z1 * x2 - x1 * z2
myArray(3) = x1 * y2 - y1 * x2
If Application.Caller.Rows.Count = 1 Then
Cross = myArray
Else
Cross = Application.Transpose(myArray)
End If

End Function

Called like

=Cross(1,2,3,4,5,6)

entered using Ctrl-Shift-Enter after selecting 3 cells.

HTH,
Bernie
MS Excel MVP


"Pflugs" wrote in message
...
I would like to write a function that calculates the cross product of
two
3D
vectors (that is, x1,y1,z1 and x2,y2,z2) The output of a cross product
is
also a vector (that is, x3,y3,z3).

The math is simple enough, but I would like to export each variable to
a
separate cell. That is, I select three linear cells in a row, type
"=CROSS(A1:A3)", hit CSE, and the value appears in each cell.

Could someone please advise on how to distribute the results to each
cell?
The code to calculate x3,y3, z3 is below:

x3 = y1 * z2 - z1 * y2
y3 = z1 * x2 - x1 * z2
z3 = x1 * y2 - y1 * x2

The call line should be:

Function Cross(x1, y1, z1, x2, y2, z2) as Double

The inputs should not be set to a type since the user should be allowed
to
enter either ranges or numbers.

Thanks,
Pflugs






  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 947
Default User Defined Array Function

Here's another general idea:

Function Cross(ParamArray v()) As Variant
'// 6 inputs only..
If UBound(v) + 1 < 6 Then
Cross = CVErr(xlErrRef)
Exit Function
End If

Cross = Array( _
v(1)*v(5)-v(2)*v(4), _
v(2)*v(3)-v(0)* v(5), _
v(0)*v(4)-v(1)*v(3))

If TypeName(Application.Caller) = "Range" Then
If Application.Caller.Rows.Count 1 Then
Cross = WorksheetFunction.Transpose(Cross)
End If
End If
End Function

--
Dana DeLouis

<snip


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
Passing an array in a user defined function Peter M Excel Programming 5 June 27th 08 10:45 PM
Creating a User Defined Array Function Jeff Mason Excel Programming 6 November 24th 04 07:43 PM
Array of 100X250 as return of a user defined function? Andersson Excel Programming 6 May 29th 04 07:06 AM
Find size of array passed to user-defined function Cliff[_2_] Excel Programming 2 October 21st 03 02:09 AM
Passing an Array of User-Defined Type to an Argument of a Function Tushar Mehta[_6_] Excel Programming 0 August 17th 03 06:43 PM


All times are GMT +1. The time now is 10:42 AM.

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

About Us

"It's about Microsoft Excel"