2008-11-25 13 views
3

J'utilise des macros dans Excel 2007 pour mon travail. Je travaille avec beaucoup de données et je dois additionner des données de 2 rangées ou plus dans la même colonne selon le même mois. Cependant, la colonne mois est exprimée en date.Comment faire une somme de données dans une colonne basée sur le même mois dans une autre colonne en utilisant des macros

par exemple, j'ai séries de données

A   B 
2/10/2008 2 
2/10/2008 3 
4/10/2008 3 
5/11/2008 4 
5/11/2008 5 

Je veux que le résultat soit affiché dans la colonne C et D comme suit

C   D 
Oct/08  8 
Nov/08  9 

Je suis très reconnaissant si quelqu'un peut me aider.

salutations,

Tifu

Répondre

0

Si vous n'êtes pas familier avec VBA, je commencer par l'enregistrement d'une macro tout en faisant ce que vous voulez faire en utilisant les sous-totaux fonctionnalité dans le menu données (par le biais d'Excel interface). Une fois la macro enregistrée, vous pouvez consulter le code VBA produit et l'adapter à vos besoins.

0

Cela devrait être possible de le faire en utilisant des formules Excel réguliers:

  • extrait le mois de la date (certains-fonction mois)
  • puis effectuez une somme conditionnelle (fonction sumwhen()?) Comme ceci:

    = SumWhen (A: B, ReferenceDate, B: B) (avec ReferenceDate = C2 C3 etc.)

(Tout ce que j'ai est un Excel allemand et les noms des fonctions ont été traduits aussi, donc mes noms de fonctions peuvent être désactivés. Peut-être que quelqu'un peut vérifier contre un anglais Excel et mettre à jour si nécessaire.)

4
A   B  C D  E  F 
1 10/ 1/2008 24106 1 Oct-08 24106 8 
2 10/31/2008 24106 7 Nov-08 24107 11 
3 11/ 1/2008 24107 8 Dec-08 24108 6 
4 11/30/2008 24107 3    
5 12/ 1/2008 24108 2    
6 12/ 2/2008 24108 4    

B1 =MONTH(A1)+YEAR(A1)*12 
E1 =MONTH(D1)+YEAR(D1)*12 
F1 =SUMIF(B$1:B$6,CONCATENATE("=",E1),C$1:C$6) 

J'ai dû surmonter deux problèmes pour résoudre ce problème. Premièrement, SUMIF ne peut effectuer qu'une comparaison directe, il ne peut pas exécuter une fonction sur l'emplacement source (sauf pour les fonctions de plage, ce qui n'est pas le cas des fonctions de date et d'heure), donc j'ai dû ajouter la colonne B. La colonne E est optionnelle, elle pourrait être implémentée en tant que partie de la formule en F, mais je l'ai laissée indépendante à des fins d'illustration. Deuxièmement, SUMIF prend un paramètre de chaîne décrivant la comparaison, donc j'ai construit la chaîne nécessaire (c'est "= 24106" pour F1) à la volée.

1

en utilisant des fonctions de tableau: C1:

=date(2008,small(month($A$1:$A$10),1),1) 

C2:

=date(2008,small(month($A$1:$A$10),2),1) 

clic droit sur ces cellules et les format que mmm/aa

D1:

=sum(if(month($C1)=month($A$1:$A$10),($B$1:$B$10),0)) 

assurez-vous d'appuyer sur ctrl-shift-enter lorsque vous avez fini d'écrire cette formule. puis copiez-le vers le bas si nécessaire.