2017-10-03 4 views
0

Il semble que, pour une raison ou pour une autre, les programmeurs Excel aient choisi d'omettre toutes les fonctionnalités vectorielles inter-produits.VBA pour les produits croisés dans Excel

En outre, en regardant en ligne, il n'y a pas vraiment beaucoup de demande pour cela. Bien qu'Excel soit un outil puissant pour faire de l'algèbre linéaire.

J'ai besoin d'un script VBA pour faire des Vector Cross Products. Et le seul que je pouvais trouver était d'ici:

EDIT:

  1. Pour ajouter un script VBA, appuyez sur Alt + F11
  2. Sous Projet, cliquez droit sur VBAProject et Insérer-> Module
  3. Enregistrer, cliquez sur Non pour enregistrer un classeur de macros-Activé
  4. Enregistrer sous forme de fichier .xlsm

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 
-------------------- 

utilisation est simple,

  1. sélection 3 cellules adjacentes horizontale, dans la formule
  2. =vCP(
  3. Sélectionner vecteur A (A x B) qui est soit 3 consécutive horizontale ou des cellules verticales
  4. type ,
  5. Sélectionnez le vecteur B, qui est soit 3 horizon consécutifs tal des cellules verticales
  6. Type )
  7. Appuyez sur Ctrl + Maj + Entrée

Je l'ai fait un tests de couple sur, et cela fonctionne, mais il émet un vecteur horizontal, et non verticale, la façon dont il est préféré pour l'algèbre linéaire.

Est-ce que quelqu'un sait comment changer ce script pour que les vecteurs 3D puissent être sortis verticalement à la place?

Existe-t-il un meilleur moyen d'obtenir un produit croisé dans Excel?

Merci, -D

Répondre

1

Utilisation 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 
+0

merci, je viens de trouver ce littéralement répondre à la seconde vous posté :) Je suppose que VB lit toujours comme piglin me – Mich