Tipps zum Golfen in Excel?

20

Es ist seltsam, dass ich das nicht gesehen habe, da Excel eine gültige Sprache für das Code-Golfen zu sein scheint (obwohl sein 'Compiler' nicht frei ist).

Excel ist eine Art Joker beim Golfen, denn es kann Herausforderungen mittlerer Komplexität und manchmal auch einfachere Herausforderungen meistern. In den meisten Fällen kann Excel mit der Manipulation von Zeichenfolgen und der Manipulation von gemischten Zeichenfolgen gut umgehen.

Welche allgemeinen Tipps haben Sie zum Golfen in Excel? Ich bin auf der Suche nach Ideen, die allgemein auf Code-Golfprobleme angewendet werden können, die zumindest etwas Excel-spezifisch sind (NICHT VBA). Bitte einen Tipp pro Antwort.

Taylor Scott
quelle
4
anscheinend sind Handy-Automaten nichts, was mit Excel zu
Ich habe mich gefragt, ob es gültig ist, eine UDF mit VBA zu erstellen .
Danieltakeshi
1
@ danieltakeshi - nein; Nun, nicht als Excel-Antwort - wenn Sie stattdessen Excel VBA verwenden und es dann aus dem unmittelbaren Fenster, dem aktiven Arbeitsblatt oder einer Unterroutine aufrufen, die es allgemein als gültig erachtete
Taylor Scott

Antworten:

11

Referenzkürzel:

Wenn für Ihr Programm mehrere Eingaben erforderlich sind, möchten Sie möglicherweise alle auf einmal abrufen können. Um mehrere Zellen als Array zu lesen, könnte man folgendes tun:

Beispiel:
=len(A1)+Len(B1)+LEN(C1)
könnte sein
=SUM(LEN(A1:C1))

=SUM(LEN(A1:C1 A2:C2 A3:C3))
könnte sein
=SUM(LEN(A1:C3))

=SUM(LEN(A1:A1024))
könnte sein
=SUM(LEN(A:A))

=SUM(LEN(A:A B:B C:C))
könnte sein
=SUM(LEN(A:C))


quelle
1
Ich weiß, dass dies kein großartiger Tipp ist, aber er ist so spezifisch, dass ich dachte, er sollte einbezogen werden.
9

Verketten Sie die Kurzform:

Die CONCATENATEFunktion kann zu &100% durch das Symbol ersetzt werden, sofern das erste Argument eine Zeichenfolge oder eine Zelle ist.

Beispiel:
=CONCATENATE(A1,B1)
könnte auf gekürzt werden
=A1&B1


quelle
9

Vektorisierung mit Arrays

Wenn eine Funktion anstelle eines Singletons ein Array als Argument verwendet, gibt diese Funktion auch ein Array mit dem Ergebniswert an die entsprechenden Indecies aus.

Beispiel:
=LEN(A1)+LEN(B2)+LEN(C3)
könnte durch ersetzt werden
=SUM(LEN({A1,B2,C3}))


quelle
1
Dieser Vorgang wird normalerweise als "Vektorisierung" bezeichnet, wenn mein Gedächtnis mir gute Dienste leistet.
Conor O'Brien
@ ConorO'Brien Danke! Ich habe meine Antwort geändert!
2

Eine Zahl in Text umwandeln:

Dies ist ein sehr einfacher Tipp, der jedoch für manche nützlich sein kann ...

  • Wenn Sie eine Zahl aus einer Formel in Text konvertieren müssen, verwenden Sie den Verkettungsoperator, um zwei Teile der Zahl als Zeichenfolge (dh 1&23) zu verbinden.
  • Wenn Sie eine Nummer Text für die Verwendung von Zellbezug (dh konvertieren müssen A1), ändern Sie die Nummer Format der Zelle Text die Notwendigkeit für zusätzliches Bytes zu beseitigen.
  • In der folgenden Tabelle finden Sie einen Vergleich der Zahl-zu-Text-Methoden.

Kurzübersicht:

+-------------------------------------------------------------------------------------+
|   | 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.
Grant Miller
quelle
1

Vektorisierung von Arrays von Zellen:

Der Tipp Vektorisierung mit Arrays Zeigt, wie Sie eine Funktion mit einem Array unter Verwendung einer bestimmten Formatierung innerhalb des Arrays optimieren können. Es ist möglich, dasselbe mit Zellen zu tun und auf lange Sicht viele, viele Bytes zu sparen. Angenommen, Sie haben das folgende Blatt:

Beispielblatt

Und wir wollen die höchste Haltbarkeit einer Frucht finden.

Ohne Vektorisierung könnte man die beiden Formeln folgendermaßen verwenden: Bildbeschreibung hier eingeben

Und dies gibt eine korrekte Antwort, aber der Score für diesen Golf ist unkonventionell und wird wahrscheinlich nicht so weit verbreitet akzeptiert. Darüber hinaus wird eine Drag-Down-Funktion (Ew) verwendet, die für eine verwirrende Antwort sorgt.

Stattdessen können wir die Funktion in Spalte D direkt mit der Formel in E2 einfügen. Dazu ersetzen Sie (in diesem Fall B2 und C2) Ihre Variablen durch Arrays für den Bereich, den Sie testen möchten. So wird Ihre Formel:
Bildbeschreibung hier eingeben

Dies spart Ihnen ein paar Bytes und macht Ihren Eintrag richtig auswertbar.

Gemeinschaft
quelle
1

Boolesche Kurzform:

Anstatt die Funktionen =TRUE()und zu =FALSE()verwenden, verwenden Sie =1=1und =1=2.

Grant Miller
quelle
0

ISBLANK () Kurzform:

Anstelle der Verwendung =ISBLANK(A1), Verwendung=A1=0 zu bestimmen, ob eine Zelle (dh A1) leer ist.

Hinweis: Diese Verknüpfung funktioniert nicht, wenn die Zelle A1 enthält 0 . In diesem Fall müssen Sie verwenden =A1="" .

Grant Miller
quelle
0

Kürzen Sie die Blattnamen

Wenn Sie benennen , Sheet2um Sdann Verweise auf Sheet2!a0geworden S!a0.

Ceilingcat
quelle