2010-07-26 15 views
1

Les trois premières colonnes existent. J'essaye de créer une formule pour le quatrième (HH_ANALYSIS_FLAG).Excel - recherche sur une colonne, résultat de la deuxième colonne

ACCOUNT_NUMBER HOUSEHOLD_NUMBER ACCOUNT_ANALYSIS_FLAG HH_ANALYSIS_FLAG 
1001    1     1      0 
1002    2     0      0 
1003    3     1      0 
1004    3     0      0 
1005    3     0      0 
1006    2     0      0 
1007    4     0      0 
1008    1     1      0 

J'ai 50 000 comptes. Ils sont marqués comme étant en cours d'analyse avec la colonne ACCOUNT_ANALYSIS_FLAG (0,1). Tous les comptes appartiennent à un ménage. Plusieurs comptes peuvent appartenir au même ménage. J'ai besoin de la colonne HH_ANALYSIS_FLAG pour évaluer vrai ou faux (0,1) si un compte dans le même ménage est en cours d'analyse. Donc, avec les données ci-dessus et une formule de travail, ma feuille de calcul ressemblerait à ceci:

ACCOUNT_NUMBER HOUSEHOLD_NUMBER ACCOUNT_ANALYSIS_FLAG HH_ANALYSIS_FLAG 
1001    1     1      1 
1002    2     0      0 
1003    3     1      1 
1004    3     0      1 
1005    3     0      1 
1006    2     0      0 
1007    4     0      0 
1008    1     1      1 

Répondre

4

La formule suivante devrait faire l'affaire. En fait, cela vous donnera le nombre total de comptes analysés par ménage.

A  B  C     D 
1 ACC_NUM HH_NUM ACC_ANALYSIS_FLAG HH_ANALYSIS_FLAG  
2 1001  1  1     =SUMIF(B$2:B$50001, B2, C$2:c$50001) 
3 1002  2  0     =SUMIF(B$2:B$50001, B3, C$2:c$50001) 
4 1003  3  1     =SUMIF(B$2:B$50001, B4, C$2:c$50001) 

Pour chaque ligne cela prend sélectionne l'ensemble de lignes qui partagent la valeur dans la colonne ACC_NUM (sur la base de la ligne conaining la formule) et additionne ensemble les valeurs dans les colonnes de ACC_ANALYSIS_FLAG correspondantes. Cela vous donne le nombre total de comptes en cours d'analyse pour le ménage donné. Comparez le résultat à 0 si vous avez seulement besoin de l'utiliser comme valeur booléenne.

EDIT:

Apparemment, la performance de c'est pas à la hauteur. Cependant, en supposant que les numéros des ménages sont tous colocalisés, il devrait être possible d'accélérer les choses de manière significative en changeant quelque chose comme ceci.

2 1001  1  1     =SUMIF(B2:B5, B2, C2:C5) 
3 1002  2  0     =SUMIF(B2:B6, B3, C2:C6) 
4 1003  2  0     =SUMIF(B2:B7, B3, C2:C7) 
5 1004  2  0     =SUMIF(B2:B8, B3, C2:C8) 
6 1005  2  0     =SUMIF(B3:B9, B3, C3:C9) 
7 1006  2  0     =SUMIF(B4:B10, B3, C4:C10) 
8 1007  2  0     =SUMIF(B5:B11, B3, C5:C11) 
9 1008  2  0     =SUMIF(B6:B12, B3, C6:C12) 
10 1009  2  0     =SUMIF(B7:B13, B3, C7:C13) 

Cela suppose qu'il y ait au plus 4 comptes par ménage, et limite donc la portée du SUMIF à la cellule actuelle +/- 3 lignes.

Pour éviter le référencement de cellules invalides, les première et dernière lignes doivent être traitées comme des cas spéciaux. Si vous avez besoin de générer un seul forum pour toutes ces cellules, je pense qu'il devrait être possible d'utiliser le OFFSET en combinaison avec MAX, MIN et ROW pour générer les plages appropriées avec juste un peu d'arithmétique.

+0

Je l'accepte avec hésitation qu'il en a été le premier qui a effectué ce que je avais besoin. Je ne peux pas vraiment l'utiliser, car la performance est trop mauvaise. Merci à tous pour votre aide, cependant! – Kenneth

+0

@Kenneth: Je ne sais pas, mais vous pourriez probablement accélérer les choses. Edité ci-dessus pour suggérer comment. – torak

+0

Malheureusement pas. Avec ce nombre d'enregistrements, je n'ai aucun moyen de connaître la quantité ou l'emplacement des HHNUM uniques. Merci quand même. – Kenneth

0

Insérez une autre colonne D (vous pouvez le cacher plus tard), qui est égal au nombre de ménages si elle est en cours d'analyse, et zéro si ce n'est pas le cas. La formule pour D2 peut être =B2*C2. Remplissez la colonne D avec cette formule.

Ensuite, pour votre colonne HH_ANALYSIS_FLAG, vous pouvez compter le nombre de valeurs dans la colonne D qui correspondent au ménage dans la colonne B. La formule serait comme IF(COUNTIF(D:D,"="&B2)>0,1,0).

Je ne suis pas sûr que cette approche soit assez rapide pour les 50 000 comptes, cependant.

  A    B     C     D     E 
1 ACCOUNT_NUMBER HOUSEHOLD_NUMBER ACCOUNT_ANALYSIS_FLAG HH_UNDER_ANALYSIS HH_ANALYSIS_FLAG 
2 1001   1     1      1 (=B2*C2)  =IF(COUNTIF(D:D,"="&B2)>0,1,0) 
3 1002   2     0      0 (=B3*C3)  =IF(COUNTIF(D:D,"="&B3)>0,1,0) 
4 1003   3     1      3 (=B4*C4)  =IF(COUNTIF(D:D,"="&B4)>0,1,0)   
0

présumant votre colonne HOUSEHOLD_NUMBER est la colonne B:

=IF(SUMIF(B:B,C:C)>0,1,0) 

devrait le faire.

0

Kenneth!Essayez celui-ci:

= IF (VLOOKUP (B2, $ B $ 2: $ C 9,2,0 $) = 1,1,0)

En supposant que votre table commence à partir de A1, ce qui signifie Account_Number est cellule A1 et votre colonne cible « HH_ANALYSIS_FLAG » est dans la colonne D.

Espérez il est utile

Questions connexes