Excel中的跨产品VBA

时间:2017-10-03 18:21:58

标签: excel vector cross-product

似乎由于某种原因,Excel程序员选择省略任何矢量交叉产品功能。

此外,在网上看,对它的要求并不高。虽然excel是一个强大的线性代数工具。

我需要一个VBA脚本来执行Vector Cross Products。而我唯一能找到的就是来自这里:

编辑:

  1. 要添加VBA脚本,请按Alt + F11
  2. 在Project下,右键单击VBAProject和Insert-> Module
  3. 保存,单击否以保存为启用宏的工作簿
  4. 另存为.xlsm文件
  5. https://www.excelbanter.com/excel-worksheet-functions/209233-how-do-you-use-visual-basic-find-cross-product-two-vectors.html

    --------------------
    Function vCP(v1 As Variant, v2 As Variant) As Variant
    vCP = Array(v1(2) * v2(3) - v1(3) * v2(2), _
    v1(3) * v2(1) - v1(1) * v2(3), _
    v1(1) * v2(2) - v1(2) * v2(1))
    End Function
    --------------------
    

    使用它很简单,

    1. 选择3个水平相邻单元格,输入公式
    2. =vCP(
    3. 选择矢量A(在A x B中),它位于3个连续的水平或垂直单元格中
    4. 输入,
    5. 选择矢量B,它是3个连续水平的垂直单元格
    6. 输入)
    7. 按Ctrl + Shift + Enter
    8. 我对它进行了几次测试,但它确实有效,但它输出的是水平向量,而不是垂直向量,它是线性代数首选的方式。

      有谁知道如何更改此脚本,以便可以垂直输出3D矢量?

      有没有更好的方法在Excel中获取跨产品?

      谢谢, -D

2 个答案:

答案 0 :(得分:1)

使用Application.Transpose:

Function vCP(v1 As Variant, v2 As Variant) As Variant

vCP = Application.Transpose(Array(v1(2) * v2(3) - v1(3) * v2(2), _
v1(3) * v2(1) - v1(1) * v2(3), _
v1(1) * v2(2) - v1(2) * v2(1)))
End Function

答案 1 :(得分:0)

我尝试使用功能码为vCP2的上述代码生成转置,但生成了REF#!错误。

经过多次试验,我意识到原始的Function vCP(保留在模块中)和转置版本vCP2之间存在名称冲突。我终于通过重命名转置版本CPv解决了该问题。我不知道名字冲突是怎么产生的。