2010-02-04 5 views
1

(A) SUMPRODUCT (A1: A3, B1: B3) == A1 * B1 + A2 * B2 + A3 * B3lignes dans les formules d'inversion Excel

Au lieu de cela, ce que je suis après est-

(B) SommeProduit (A1: A3, Inverse (B1: B3)) == A1 * B3 + A2 * B2 + A3 * B1

Y a-t-il un moyen propre d'y parvenir dans Excel 2003/Excel 2007? L'ordre naturel de ces valeurs est A1-> A3 et B1-> B3, donc l'inversion des significations des cellules n'est pas satisfaisante; mais créer une copie inversée de B1: B3 ailleurs dans la feuille de calcul semble maladroit.

+3

Vous devriez accepter les réponses à vos questions. – SLaks

Répondre

1

Je ne vois pas une solution qui n'implique pas (a) des fonctions personnalisées en VBA (ou similaire) ou (b) une colonne supplémentaire avec partielle résultats.

Si vous n'aimez pas que la colonne C devienne une liste inversée (cachée), accepteriez-vous que la colonne C devienne une liste comme: A1 * B3, A2 * B2, A3 * B1, qui pourrait alors être additionnée? Il serait possible d'utiliser une formule similaire à celle mentionnée dans la réponse de @ e.tadeu pour l'obtenir (en utilisant les fonctions OFFET et ROW.)

+0

Je suis d'accord, comme le premier paragraphe est une variante de l'orthographe de "non, il ne peut pas être fait." – VoiceOfUnreason

3

Vérifiez le sujet « Transposer une liste de données » dans http://www.cpearson.com/EXCEL/lists.htm

+0

Cette solution crée une copie inversée ailleurs dans la feuille de calcul. – VoiceOfUnreason

+0

Cachez simplement la colonne avec la copie inversée de toute façon ... :) –

+1

La section pertinente est appelée "Inverser l'ordre d'une ligne". C'est une bonne trouvaille. Il a résolu ce que j'étais sur le point de suggérer, mais mieux. – Oddthinking

1

Je suis tombé sur cette question parce que j'essayais de trouver une réponse à cette question. question, en particulier une solution à utiliser avec SUMPRODUCT.

Le post précédent avec lien était utile, et ce qui suit a été conçu. Veuillez noter que pour des raisons de simplicité et de clarté, les références originales ont été modifiées pour faciliter la compréhension des formules de tableurs. Les modifications nécessaires peuvent être obtenues en utilisant le style de référence INDIRECT et R1C1 si l'inversion doit être appliquée aux colonnes (la documentation de fonction INDIRECT, COLUMN et COLUMNS s'avère utile).

Dans Excel (cochée dans Excel 2010), la formule qui SUMPRODUCTs un tableau dans A6: A8 avec le renversement du tableau B6: B8 (disons B8: B6) pourrait être

=SUMPRODUCT(A6:A8,N(OFFSET(B6:B8,ROWS(B6:B8)-ROW(INDIRECT("A1:A"& ROWS(B6:B8))),0))) 

Le inverser la partie pour Excel est N(OFFSET(B6:B8,ROWS(B6:B8)-ROW(INDIRECT("A1:A"& ROWS(B6:B8))),0)), il peut également être utilisé comme une formule de matrice multi-cellules (ctrl-shift-enter) n'importe où - le tableau à inverser est en B6: B8. Explication succincte: N() est nécessaire pour convertir les références renvoyées par OFFSET en un tableau de valeurs pouvant être utilisées dans SUMPRODUCT. (OFFSET sans N() rend la formule inopérante dans SUMPRODUCT, et convertit la plupart des non-nombres en 0, comme prévu il convertit TRUE en 1.)

OFFSET prend le tableau sur la feuille de calcul et place les valeurs dans l'ordre inverse. (Dans ce cas, offset original à 3-1 = 2 va nouvelle position de tableau 0, 3-2 = 1 va à 1, et finalement 3-3 = 0 va à 2.) ROW() crée un tableau de nombres consécutifs qui peut être soustraite de la longueur du tableau total [veuillez noter, pas de S final, et A1: A3 a été utilisé pour obtenir {1,2, ...}, jusqu'au nombre de lignes dans le tableau/la plage d'origine .]

Cette formule ne fonctionne PAS dans les tableurs OpenOffice/LibreOffice. Mais INDEX peut, avec une approche analogique, devenir encore plus flexible. OpenOffice/LibreOffice peut utiliser la même approche mais avec la fonction INDEX. La solution OpenOffice/LibreOffice ne fonctionne pas dans Excel car Excel n'accepte pas les tableaux dans le fichier row_num/col_num d'INDEX (tout tableau en tant qu'argument devient l'élément supérieur unique du tableau).

Dans OpenOffice/LibreOffice (vérifié dans Apache OpenOffice 4), la formule qui SUMPRODUCTs un tableau dans A6: A8 avec l'inversion de la matrice dans B6: B8 pourrait être

=SUMPRODUCT(A6:A8,INDEX(B6:B8,1+ROWS(B6:B8)-ROW(INDIRECT("A1:A"& ROWS(B6:B8))),0)) 

La partie d'inversion pour OpenOffice est INDEX(B6:B8,1+ROWS(B6:B8)-ROW(INDIRECT("A1:A"& ROWS(B6:B8))),0), il peut également être utilisé comme une formule matricielle multi-cellule (ctrl-shift-enter) n'importe où - le tableau à inverser est en B6: B8.

Excel version avec cette approche (grâce, XOR LX: see here) qui pourrait être très utile INDEX peut prendre des tableaux alors que OFFSET ne peut prendre des références à une feuille de calcul:

=SUMPRODUCT(A6:A8,INDEX(B6:B8,N(INDEX(1+ROWS(B6:B8)-ROW(INDIRECT("A1:A"& ROWS(B6:B8))),,)),0)) 

[Comme cela se produit avec d'Excel Version OFFSET ci-dessus, la formule avec la modification N (INDEX ([...] ,,)) ne fonctionne pas dans OpenOffice, la fonction d'encapsulation doit être supprimée si vous utilisez cette application.]

L'approche est analogue à celui utilisé dans Excel pour OFFSET. Tenez compte du fait que INDEX utilise des index commençant par 1 alors que OFFSET commence par 0. Comme dans le cas précédent, un tableau est créé dynamiquement à partir des numéros de ligne A1: A3 pour servir à la fois de matrice et de changement de position .

Cette réponse très en retard est peu susceptible d'aider l'affiche originale, mais elle pourrait faire gagner du temps aux futurs utilisateurs ayant une question similaire.

+0

De rien! :-) –

Questions connexes