Поради щодо гольфу в Excel?


20

Дивно, що я цього не бачив, оскільки здається, що Excel є дійсною мовою для кодування в гольф (незважаючи на те, що його "компілятор" не є безкоштовним).

Excel є дещо незамінною карткою в гольфі, тому що він хороший в гольфних викликах середньої складності, а іноді і в більш простих завданнях. Частіше Excel добре справляється із завданнями з маніпуляцією з рядками та змішаною маніпуляцією з рядками.

Які загальні поради щодо гольфу в Excel? Я шукаю ідеї, які можна застосувати для кодування проблем із гольфом взагалі, які принаймні дещо специфічні для Excel (НЕ VBA). Будь ласка, одна порада на відповідь.


4
мабуть, стільникові автомати не є чимось, що пов'язано з excel ... :(

Мені було цікаво, чи справедливо створити UDF з VBA?
danieltakeshi

1
@danieltakeshi - ні; ну, не як відповідь Excel - якщо ви замість цього використовуєте Excel VBA, а потім зателефонуєте йому з прямого вікна, активної таблиці або підпрограми, яку вона взагалі вважає дійсною
Тейлор Скотт

Відповіді:


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
Цей процес зазвичай називають "векторизацією", якщо моя пам'ять мені добре служить.
Conor O'Brien

@ ConorO'Brien Дякую! Я змінив свою відповідь!

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

Векторизація масивів комірок:

Порада Векторизація з масивами Показує, як можна збити функцію масиву за допомогою конкретного форматування в масиві. Можна зробити те ж саме з клітинками, і ви збережете багато багато байтів у довгостроковій перспективі. Скажіть, у вас є такий лист:

приклад аркуша

І ми хочемо знайти найвищий термін зберігання плоду.

Без векторизації можна використовувати дві такі формули: введіть тут опис зображення

І це дає правильну відповідь, але оцінка цього гольфу є нетрадиційною, і, ймовірно, не буде сприйнята настільки широко. Крім цього, для цього використовується функція перетягування вниз (Ew), яка створює заплутану відповідь.

Натомість ми можемо розмістити функцію у стовпці D прямо у формулі у E2. Для цього ви замінюєте (у цьому випадку B2 та C2) свої змінні масивами для діапазону, який ви хочете перевірити. Таким чином, ваша формула стає:
введіть тут опис зображення

Це заощаджує кілька байт, а також робить ваш запис належним чином.


1

Булева стенограма:

Замість використання функцій =TRUE()та =FALSE(), використовуйте =1=1і =1=2.


0

Стенограма ISBLANK ()

Замість використання =ISBLANK(A1)використовуйте =A1=0для визначення, чи клітинка (тобто A1) порожня.

Примітка: Цей ярлик не працюватиме, якщо комірка A1 містить 0 . У такому випадку вам потрібно буде скористатися =A1="" .


0

Скоротіть назви аркушів

Якщо ви перейменовуєтесь Sheet2на Sпосилання, щоб Sheet2!a0стати S!a0.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.