web-dev-qa-db-fra.com

Comment boucler dans Excel sans VBA ni macros?

Est-il possible d'itérer (boucler) un groupe de lignes dans Excel sans VBA ni macros? Google n'a rien rapporté d'utile.

=IF('testsheet'!$C$1 <= 99,'testsheet'!$A$1,"") &
IF('testsheet'!$C$2 <= 99, 'testsheet'!$A$2,"") &
IF('testsheet'!$C$3 <= 99, 'testsheet'!$A$3,"") &
... and so on through !$C$40, !$A$40 ...

En l'état actuel, je devrai répéter le code ci-dessus 40 fois dans chaque cellule et j'ai plus de 200 cellules qui en ont besoin. renifler

Je suis assez bon avec PHP/SQL, mais je viens d'apprendre Excel.

36
Jeff

La façon d'obtenir les résultats de votre formule serait de commencer dans une nouvelle feuille. 

Dans la cellule A1, mettez la formule 

=IF('testsheet'!C1 <= 99,'testsheet'!A1,"") 

Copiez cette cellule à la ligne 40Dans la cellule B1, insérez la formule 

=A1

Dans la cellule B2, mettez la formule 

=B1 & A2

Copiez cette cellule à la ligne 40.

La valeur que vous voulez est maintenant dans cette colonne à la ligne 40.

Ce n’est pas vraiment la réponse que vous souhaitez, mais c’est le moyen le plus rapide d’exécuter vos tâches Excel sans créer de formule personnalisée qui prenne une plage et permet le calcul (ce qui serait plus amusant à faire).

17
Nat

Je cherchais simplement quelque chose de similaire:

Je veux résumer chaque colonne de rangée impaire. 

SUMIF a DEUX plages possibles, la plage de somme de et une plage de considérer les critères in.

SUMIF (B1: B1000,1, A1: A1000)

Cette fonction considérera si une cellule dans la plage B est "= 1", elle additionnera la cellule A correspondante uniquement si c'est le cas. 

Pour obtenir "= 1" pour revenir dans la plage B, je mets ceci dans B:

= MOD (ROWNUM (B1), 2)

Ensuite, remplissez automatiquement pour obtenir le module à remplir. Vous pouvez y mettre des critères calculables pour obtenir les conditions SUMIF ou SUMIFS dont vous avez besoin pour parcourir chaque cellule. 

Plus facile que ARRAY et cache le fond des boucles!

5
YAtreyu

Je vais y répondre moi-même (corrigez-moi si je me trompe):

Il n'est pas possible d'itérer sur un groupe de lignes (comme un tableau) dans Excel sans que VBA soit installé/les macros activées.

3
Jeff

Ajoutez plus de colonnes lorsque vous avez des boucles variables qui se répètent à des vitesses différentes. Je ne suis pas certain de ce que vous essayez de faire, mais je pense avoir fait quelque chose qui pourrait s'appliquer.

Créer une seule boucle dans Excel est très simple. En réalité, il fait le travail pour vous. Essayez ceci sur un nouveau classeur 

  1. Entrez "1" dans A1
  2. Entrez "= A1 + 1" en A2

A3 sera automatiquement "= A2 + 1" lorsque vous tirez vers le bas. Les premières étapes ne doivent pas nécessairement être explicites. Excel reconnaîtra automatiquement le motif et comptera si vous mettez juste "2" dans A2, mais si nous voulons que B1-B5 soit "100" et que B5-B10 soit "200" (en comptant de la même manière), vous pouvez voir pourquoi savoir comment le faire compte explicitement. Dans ce scénario, vous entrez simplement:

  1. "100" dans B1, faites glisser jusqu'à B5 et
  2. "= B1 + 100" dans B6

B7 sera automatiquement "= B2 + 100", etc. au fur et à mesure que vous faites glisser le curseur vers le bas, il augmente donc tous les 5 rangées indéfiniment. Pour créer une boucle de nombres 1 à 5 dans la colonne A:

  1. Entrez "= A1" dans la cellule A6. Lorsque vous faites glisser le curseur vers le bas, ce sera automatiquement "= A2" dans la cellule A7, etc., en raison de la manière dont Excel agit.

Nous avons donc maintenant la colonne A qui répète les nombres 1 à 5 alors que la colonne B augmente de 100 toutes les 5 cellules. Vous pouvez faire répéter la colonne B, par exemple les nombres 100 à 900 en utilisant la même méthode que vous avez utilisée avec la colonne A un moyen de produire, par exemple, chaque combinaison possible avec plusieurs variables. Faites glisser les colonnes et elles le feront à l'infini. Je ne traite pas explicitement du scénario donné, mais si vous suivez les étapes et les comprenez, le concept devrait vous donner une réponse au problème qui implique d'ajouter plus de colonnes et de les concactiner ou de les utiliser comme variables.

1
Manopolus

Vous pouvez créer un tableau quelque part sur une feuille de calcul qui effectue cette opération pour chaque paire de cellules et utiliser le remplissage automatique pour le remplir. 

Agrégez les résultats de cette table dans une cellule de résultats. 

Les 200 cellules qui référencent les résultats peuvent ensuite référencer la cellule contenant les résultats de l'agrégation. Dans les versions les plus récentes d'Excel, vous pouvez nommer la cellule de résultat et la référencer de cette façon, afin de faciliter la lecture.

1
blueberryfields

@Nat a donné une bonne réponse. Mais puisqu'il n'y a aucun moyen de raccourcir un code, pourquoi ne pas utiliser contatenate pour "générer" le code dont vous avez besoin. Cela fonctionne pour moi quand je suis paresseux (à taper tout le code dans la cellule).

Nous devons donc simplement identifier le modèle> utiliser Excel pour construire le modèle "structure"> ajouter "=" et le coller dans la cellule prévue. 

Par exemple, vous voulez atteindre (je veux dire, entrer dans la cellule):

=IF('testsheet'!$C$1 <= 99,'testsheet'!$A$1,"") &IF('testsheet'!$C$2 <= 99,'testsheet'!$A$2,"") &IF('testsheet'!$C$3 <= 99,'testsheet'!$A$3,"") &IF('testsheet'!$C$4 <= 99,'testsheet'!$A$4,"") &IF('testsheet'!$C$5 <= 99,'testsheet'!$A$5,"") &IF('testsheet'!$C$6 <= 99,'testsheet'!$A$6,"") &IF('testsheet'!$C$7 <= 99,'testsheet'!$A$7,"") &IF('testsheet'!$C$8 <= 99,'testsheet'!$A$8,"") &IF('testsheet'!$C$9 <= 99,'testsheet'!$A$9,"") &IF('testsheet'!$C$10 <= 99,'testsheet'!$A$10,"") &IF('testsheet'!$C$11 <= 99,'testsheet'!$A$11,"") &IF('testsheet'!$C$12 <= 99,'testsheet'!$A$12,"") &IF('testsheet'!$C$13 <= 99,'testsheet'!$A$13,"") &IF('testsheet'!$C$14 <= 99,'testsheet'!$A$14,"") &IF('testsheet'!$C$15 <= 99,'testsheet'!$A$15,"") &IF('testsheet'!$C$16 <= 99,'testsheet'!$A$16,"") &IF('testsheet'!$C$17 <= 99,'testsheet'!$A$17,"") &IF('testsheet'!$C$18 <= 99,'testsheet'!$A$18,"") &IF('testsheet'!$C$19 <= 99,'testsheet'!$A$19,"") &IF('testsheet'!$C$20 <= 99,'testsheet'!$A$20,"") &IF('testsheet'!$C$21 <= 99,'testsheet'!$A$21,"") &IF('testsheet'!$C$22 <= 99,'testsheet'!$A$22,"") &IF('testsheet'!$C$23 <= 99,'testsheet'!$A$23,"") &IF('testsheet'!$C$24 <= 99,'testsheet'!$A$24,"") &IF('testsheet'!$C$25 <= 99,'testsheet'!$A$25,"") &IF('testsheet'!$C$26 <= 99,'testsheet'!$A$26,"") &IF('testsheet'!$C$27 <= 99,'testsheet'!$A$27,"") &IF('testsheet'!$C$28 <= 99,'testsheet'!$A$28,"") &IF('testsheet'!$C$29 <= 99,'testsheet'!$A$29,"") &IF('testsheet'!$C$30 <= 99,'testsheet'!$A$30,"") &IF('testsheet'!$C$31 <= 99,'testsheet'!$A$31,"") &IF('testsheet'!$C$32 <= 99,'testsheet'!$A$32,"") &IF('testsheet'!$C$33 <= 99,'testsheet'!$A$33,"") &IF('testsheet'!$C$34 <= 99,'testsheet'!$A$34,"") &IF('testsheet'!$C$35 <= 99,'testsheet'!$A$35,"") &IF('testsheet'!$C$36 <= 99,'testsheet'!$A$36,"") &IF('testsheet'!$C$37 <= 99,'testsheet'!$A$37,"") &IF('testsheet'!$C$38 <= 99,'testsheet'!$A$38,"") &IF('testsheet'!$C$39 <= 99,'testsheet'!$A$39,"") &IF('testsheet'!$C$40 <= 99,'testsheet'!$A$40,"") 

Je ne l'ai pas tapé, j'ai simplement utilisé le symbole "&" pour combiner une cellule arrangée dans Excel (un autre fichier, pas le fichier sur lequel nous travaillons).

Remarquerez que : 

part1> IF('testsheet'!$C$

part2> 1 to 40

part3> <= 99,'testsheet'!$A$

part4> 1 to 40

part5> ,"") &

  • Entrez Part1 à A1, Part3 à C1, partie à E1.
  • Entrez "= A1" dans A2, "= C1" dans C2, "= E1" dans E2.
  • Entrez "= B1 + 1" dans B2, "= D1 + 1" dans D2.
  • Entrez "= A2 & B2 & C2 & D2 & E2" dans G2
  • Entrez "= I1 & G2" dans I2

Maintenant, sélectionnez A2: I2 et faites-le glisser vers le bas. Notez que le nombre incrémenté par ligne a été ajouté et que le texte généré est combiné, cellule par cellule et ligne par ligne.

  • Copier le contenu I41,
  • collez-le quelque part, ajoutez "=" devant, retirez le supplément et le dos.

Résultat = code comme vous le souhaitiez. 

J'ai utilisé Excel/OpenOfficeCalc pour m'aider à générer du code pour mes projets. Ça marche pour moi, espérons que ça aide pour les autres. (:

1
p._phidot_