Excelでのゴルフのヒント


20

Excelがコードゴルフの有効な言語のように思えるので、これを見たことがないのは奇妙です(「コンパイラ」は無料ではありませんが)。

Excelは、ゴルフではややワイルドカードであり、中程度の複雑さのゴルフチャレンジが得意であり、時にはよりシンプルなチャレンジでもあります。多くの場合、Excelは文字列操作および文字列と数字の混合操作に関する課題に適しています。

Excelでゴルフをするための一般的なヒントは何ですか?私は、少なくともゴルフに特有の(VBAではない)ゴルフ問題全般のコードに適用できるアイデアを探しています。回答ごとに1つのヒントをお願いします。


4
どうやらセルオートマトンはエクセルに関連したものではないようです... :(

VBAでUDFを作成することが有効かどうか疑問に思っていましたか?
ダニエルタケシ

1
@danieltakeshi-いいえ; まあ、いないExcelの答えとして-あなたの代わりにエクセルVBAを使用して、すぐに窓からそれを呼び出す場合、activesheetまたはサブルーチン、それは一般的に有効と考えていること
テイラー・スコット

回答:


11

参照の速記:

プログラムが複数の入力を取得する必要がある場合、それらを一度にすべてスクープできるようにしたい場合があります。複数のセルを配列として読み取るには、次の例のようにできます。

例:
=len(A1)+Len(B1)+LEN(C1)
可能性があり
=SUM(LEN(A1:C1))

=SUM(LEN(A1:C1 A2:C2 A3:C3))
になり得る
=SUM(LEN(A1:C3))

=SUM(LEN(A1:A1024))
になり得る
=SUM(LEN(A:A))

=SUM(LEN(A:A B:B C:C))
になり得る
=SUM(LEN(A:C))


1
これは素晴らしいヒントではないことは知っていますが、それを含めるべきだと思ったのに十分に優れています。

9

速記の連結:

CONCATENATE機能で置き換えることができる&限り、最初の引数が文字列、または細胞であるように、時間のシンボル100%。

例:
=CONCATENATE(A1,B1)
に短縮できます
=A1&B1


9

配列を使用したベクトル化

関数がシングルトンの代わりに引数として配列を取るときはいつでも、その関数は対応するインデックスに結果値を持つ配列も出力します。

例:
=LEN(A1)+LEN(B2)+LEN(C3)
に置き換えることができます
=SUM(LEN({A1,B2,C3}))


1
このプロセスは、記憶がうまく機能している場合、通常「ベクトル化」と呼ばれます。
コナーオブライエン

@ ConorO'Brienありがとう!答えを変えました!

2

数値をテキストに変換する:

これは非常に簡単なヒントですが、それでも一部の人にとっては役立つかもしれません...

  • 数式内から数値をテキストに変換する必要がある場合は、連結演算子を使用して、数値の2つの部分を文字列として結合します(例:)1&23
  • セル参照(つまりA1)で使用するために数値をテキストに変換する必要がある場合は、セルの数値形式テキストに変更して、余分なバイトを不要にします。
  • 数値からテキストへの変換方法の比較については、下の図をご覧ください。

クイックリファレンスチャート:

+-------------------------------------------------------------------------------------+
|   | 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

セルの配列のベクトル化:

ヒント配列によるベクトル化配列内の特定の書式設定を使用して、配列を使用して関数を操作する方法を示します。セルで同じことを行うことが可能であり、長期的には多くのバイトを節約できます。次のシートがあるとします。

サンプルシート

そして、私たちは果物の最高の貯蔵寿命を見つけたいです。

ベクトル化を使用しない場合、次のような2つの式を使用できます。 ここに画像の説明を入力してください

そしてこれは正しい答えを与えますが、このゴルフのスコアは型破りであり、おそらく広く受け入れられないでしょう。その上、これはドラッグダウン機能(Ew)を使用します。

代わりに、E2の式を使用して、列Dに関数を配置できます。これを行うには、テストする範囲の配列に変数を置き換えます(この場合はB2とC2)。したがって、式は次のようになります。
ここに画像の説明を入力してください

これにより、エントリを適切にスコアリング可能にするだけでなく、数バイトを節約できます。



0

ISBLANK()の短縮形:

を使用する代わりに、セル(つまり)が空かどうかを判断=ISBLANK(A1)する=A1=0ために使用しA1ます。

注:セルに A1 が含まれて いる場合、このショートカットは機能しません0その場合、を使用する必要があります =A1=""


0

シート名を短くする

名前Sheet2をに変更するとS、参照がにSheet2!a0なりS!a0ます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.