VBA Tableau de multiplication, elementwise sans boucle
Salut tout le monde: à la Suite de liitle question:
Option Base 1
Sub Test()
Dim aa() As Integer
Dim bb() As Integer
ReDim aa(3)
ReDim bb(3)
For j = 1 To 3
aa(j) = j * 2
bb(j) = j * 3
Next j
End Sub
Maintenant, la seule petite chose que je veux faire, c'est de multiplier les deux dimensions des tableaux elementwise sans boucle, puis à décharger cette new array (6,24,54) dans une gamme. Je suis sûr que cela doit être facilement possible. Une solution que je vois est de créer une matrice diagonale (tableau), puis à utiliser le mmult, mais je suis sûr que c'est faisable en une manière très simple. Merci pour l'aide.
C'est donc dans Excel?
La boucle est la seule façon - mmult en boucle ses matrices en interne - ce qui est à l'objection de le faire dans votre routine?
Eh bien, j'ai un couple de valeurs dans une ligne dans une feuille, un couple de valeurs dans une colonne d'une autre feuille, à l'aide de vba je tiens à les multiplier elementwise et les décharger dans une troisième feuille....Je suis habitué à Matlab / R, alors j'ai pensé que le moyen le plus efficace de le faire est de lire les valeurs dans des tableaux et ensuite d'effectuer elementwise multiplication...je vais donc faire une boucle dans ce cas. Mais savez-vous c'est plus rapide à appliquer les multiplications sur la Gamme de classe ou est-il advisible d'abord charger les données dans des tableaux, effectuer des calculs et de les repousser à une plage?
La boucle est la seule façon - mmult en boucle ses matrices en interne - ce qui est à l'objection de le faire dans votre routine?
Eh bien, j'ai un couple de valeurs dans une ligne dans une feuille, un couple de valeurs dans une colonne d'une autre feuille, à l'aide de vba je tiens à les multiplier elementwise et les décharger dans une troisième feuille....Je suis habitué à Matlab / R, alors j'ai pensé que le moyen le plus efficace de le faire est de lire les valeurs dans des tableaux et ensuite d'effectuer elementwise multiplication...je vais donc faire une boucle dans ce cas. Mais savez-vous c'est plus rapide à appliquer les multiplications sur la Gamme de classe ou est-il advisible d'abord charger les données dans des tableaux, effectuer des calculs et de les repousser à une plage?
OriginalL'auteur Eva | 2012-03-10
Vous devez vous connecter pour publier un commentaire.
Il n'y a aucun moyen de la multiplication sur chaque élément du tableau sans boucle. Certaines langues ont des méthodes qui semblent le faire, mais sous le capot, ils sont le bouclage.
Comme vous l'avez mentionné dans vos commentaires, vous avez 2 choix:
Tout dépend de vos données, mais presque toujours, vous trouverez que le dumping d'une plage dans un tableau de type variant, faire votre travail, et à cracher du retour sera beaucoup plus rapide que la boucle dans une plage de cellules. Comment vous faire un dump de retour dans une gamme affecte également la vitesse, vous l'esprit.
Vous pouvez utiliser la transposition de la feuille de calcul méthode sur un tableau pour le dump de retour en un seul mouvement.
la transposition de la feuille de calcul méthode?
Application.WorksheetFunction.Transpose()
merci pour votre aide
OriginalL'auteur aevanko
Il est possible de multiplier les plages sans explicite en boucle, par exemple, essayez:
Même logique que dans:
=sumproduct(a1:A3-b1:b3;a1:A3-b1:b3)
OriginalL'auteur Poisson
Je ne suis pas entièrement sûr que c'est possible dans n'importe quelle langue (avec l'exception possible de quelques langages fonctionnels). Peut-être que si tu nous disais pourquoi tu voulais faire ce que nous pourrions vous aider plus?
OriginalL'auteur Dale Myers