Conseils pour jouer au golf dans Excel?


20

C'est étrange que je ne l'ai pas vu, car Excel semble être un langage valide pour jouer au code (bien que son «compilateur» ne soit pas gratuit).

Excel est un peu un joker dans le golf, étant bon dans les défis de golf de complexité moyenne, et parfois dans des défis plus simples également. Plus souvent qu'autrement, Excel est bon dans les défis avec la manipulation de chaînes et la manipulation mixte de nombres de chaînes.

Quels conseils généraux avez-vous pour jouer au golf dans Excel? Je cherche des idées qui peuvent être appliquées aux problèmes de golf de code en général qui sont au moins quelque peu spécifiques à Excel (PAS VBA). S'il vous plaît, un pourboire par réponse.


4
apparemment, les automates cellulaires ne sont pas liés à Excel ... :(

Je me demandais s'il était valide de créer un UDF avec VBA?
danieltakeshi

1
@danieltakeshi - non; eh bien, pas comme une réponse Excel - si vous utilisez plutôt Excel VBA et que vous l'appelez ensuite à partir de la fenêtre immédiate, de la feuille active ou d'un sous-programme, qu'il considérait généralement comme valide
Taylor Scott

Réponses:


11

Sténographie de référence:

Si votre programme doit prendre plusieurs entrées, vous souhaiterez peut-être les récupérer toutes en même temps. pour lire plusieurs cellules en tant que tableau, on pourrait faire comme l'exemple:

Exemple:
=len(A1)+Len(B1)+LEN(C1)
pourrait être
=SUM(LEN(A1:C1))

=SUM(LEN(A1:C1 A2:C2 A3:C3))
pourrait être
=SUM(LEN(A1:C3))

=SUM(LEN(A1:A1024))
pourrait être
=SUM(LEN(A:A))

=SUM(LEN(A:A B:B C:C))
pourrait être
=SUM(LEN(A:C))


1
Je sais que ce n'est pas un bon conseil, mais c'est suffisamment précis pour exceller que je pensais qu'il devrait être inclus.

9

Raccourci concaténé:

La CONCATENATEfonction peut être remplacée par le &symbole 100% du temps, tant que le premier argument est une chaîne ou une cellule.

exemple:
=CONCATENATE(A1,B1)
pourrait être raccourci à
=A1&B1


9

Vectorisation avec des tableaux

Chaque fois qu'une fonction prend un tableau comme argument au lieu d'un singleton, cette fonction affichera également un tableau avec la valeur de résultat dans les indecies correspondants.

Exemple:
=LEN(A1)+LEN(B2)+LEN(C3)
pourrait être remplacé par
=SUM(LEN({A1,B2,C3}))


1
Ce processus est généralement appelé "vectorisation" si ma mémoire est bonne.
Conor O'Brien

@ ConorO'Brien Merci! J'ai changé ma réponse!

2

Conversion d'un nombre en texte:

C'est une astuce très simple, mais elle peut néanmoins être utile à certains ...

  • Si vous devez convertir un nombre en texte à partir d'une formule, utilisez l'opérateur de concaténation pour joindre deux parties du nombre sous forme de chaîne (c'est-à-dire 1&23).
  • Si vous devez convertir un nombre en texte à utiliser par référence de cellule (c.-à-d. A1), Changez le format numérique de la cellule en texte pour éliminer le besoin d'octets supplémentaires.
  • Voir le tableau ci-dessous pour une comparaison des méthodes de numérotation en texte.

Tableau de référence rapide:

+-------------------------------------------------------------------------------------+
|   | A               | B        | C         | D                | E                   |
|-------------------------------------------------------------------------------------|
| 1 | Formula         | Bytes    | Result    | ISTEXT(cell)¹    | ISTEXT(formula)²    |
|-------------------------------------------------------------------------------------|
| 2 | =TEXT(123,0)    | 12       | 123       | TRUE             | TRUE                |
| 3 | ="123"          | 6        | 123       | TRUE             | TRUE                |
| 4 | =1&23           | 5        | 123       | TRUE             | TRUE                |
| 5 | '123            | 4        | 123       | TRUE             | NOT VALID           |
| 6 | 123             | 3        | 123       | TRUE             | FALSE               |
| 7 | 123             | 3        | 123       | FALSE            | FALSE               |
+-------------------------------------------------------------------------------------+

Note: The result for cell C6 has been formatted as text, whereas the result for C7 has not.

¹ Denotes =ISTEXT(C2), =ISTEXT(C3), =ISTEXT(C4), etc.
² Denotes =ISTEXT(TEXT(123,0)), =ISTEXT("123"), =ISTEXT(1&23), etc.

1

Vectorisation de tableaux de cellules:

L'astuce Vectorisation avec des tableaux Montre comment vous pouvez jouer une fonction avec un tableau en utilisant une mise en forme spécifique dans le tableau. Il est possible de faire la même chose avec les cellules et vous permettra d'économiser de nombreux octets à long terme. Disons que vous avez la feuille suivante:

feuille d'exemple

Et nous voulons trouver la durée de conservation la plus élevée d'un fruit.

Sans vectorisation, on pourrait utiliser les deux formules comme ceci: entrez la description de l'image ici

Et cela donne une réponse correcte, mais le score de ce golf n'est pas conventionnel et ne sera probablement pas accepté aussi largement. En plus de cela, cela utilise une fonction de glisser-déposer (Ew), ce qui rend la réponse confuse.

Au lieu de cela, nous pouvons placer la fonction dans la colonne D directement avec la formule dans E2. Pour ce faire, vous remplacez (dans ce cas B2 et C2) vos variables par des tableaux pour la plage que vous souhaitez tester. Ainsi, votre formule devient:
entrez la description de l'image ici

Cela vous permet d'économiser quelques octets et de rendre votre entrée correctement notable.


1

Sténographie booléenne:

Au lieu d'utiliser les fonctions =TRUE()et =FALSE(), utilisez =1=1et =1=2.


0

ISBLANK () Sténographie:

Au lieu d'utiliser =ISBLANK(A1), utilisez =A1=0pour déterminer si une cellule (c'est-à-dire A1) est vide.

Remarque: ce raccourci ne fonctionnera pas si la cellule A1 contient 0 . Dans ce cas, vous devrez utiliser =A1="" .


0

Raccourcir les noms des feuilles

Si vous renommez Sheet2pour Sensuite les références à Sheet2!a0devenir S!a0.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.