Excel / Calc INDIRECT + АДРЕС + ROW + COLUMN чистая альтернатива

1

Я не обычный пользователь Excel / Calc, но в настоящее время я использую LibreOffice Calc, чтобы записывать некоторые входы и выходы денег. Мои две функции ниже работают нормально, как и предполагалось, но все же я хотел бы узнать о более чистой альтернативе; особенно для первого.

Это рассчитывает ежедневный доход,

= ДВССЫЛ (АДРЕС (СТРОКА (), Column () - 2)) - ЕСЛИ (ЕЧИСЛО (ДВССЫЛ (АДРЕС (СТРОКА () - 1, колонка () - 2))), ДВССЫЛ (АДРЕС (СТРОКА () - 1, COLUMN () - 2)), 0) -INDIRECT (АДРЕС (СТРОКА (), Column () - 1))

и это рассчитывает чистый доход,

= СУММ (ДВССЫЛ (АДРЕС (2, колонка () - 1) & ":" & АДРЕС (СТРОКА (), Column () - 1)))
MinjaeKim
источник
Почему ты так используешь indirect/address? Похоже, вы могли бы просто использовать стандартные ссылки на ячейки.
Кайл
@Kyle Я только что посмотрел в Интернете, и вот как он, кажется, получил текущий номер строки / столбца и использовал его в других функциях. Но я почти ничего не знаю об этих программах для работы с электронными таблицами.
MinjaeKim

Ответы:

2

Вы можете достичь того же самого результата намного легче с помощью стандартных ссылок на ячейки. Ваша первая формула использует только относительные ссылки. Предполагая, что формула введена в ячейку D3, она может быть записана как:

=B3-IF(ISNUMBER(B2),B2,0)-C3

Ваша вторая формула использует как абсолютные, так и относительные ссылки. На этот раз, предполагая, что мы находимся в ячейке E3, это можно записать как:

=SUM(D$2:D3)

Обратите внимание на $ in D$2. Это абсолютная ссылка, означающая, что при перетаскивании формулы вниз верхняя граница остается неизменной, а нижняя граница расширяется вниз.

рукав моря
источник
1

Как указывает Кайл, люди обычно просто используют относительную адресацию, и его ответ описывает, как это сделать. Вы можете увидеть, насколько простыми становятся формулы.

Объяснение оригинальных формул

Примеры формул, которые вы включили в вопрос, возможно, были сделаны таким образом, чтобы подчеркнуть связь между адресами ячеек. Пока структура не меняется, этот стиль адресации фокусируется на логике физических отношений ячеек. Однако обратите внимание, что если структура электронной таблицы изменится, все сломается, потому что ссылки привязаны к исходной структуре.

Чтобы понять, что они делают, ADDRESS создает текстовое описание ссылки на ячейку. Это позволяет вам использовать вычисления, чтобы выяснить, куда должна указывать ссылка. Хорошая, короткая демонстрация здесь . INDIRECT преобразует текстовое описание ссылки на ячейку в фактическую ссылку.

Поэтому, если вам нужна более чистая альтернатива, самым чистым было бы просто использовать фактические ссылки на ячейки, как ответ Кайла. Если вы находитесь в ситуации, когда вам действительно нужно сосредоточиться на структуре электронных таблиц, есть еще несколько способов упростить это.

R1C1 адресация

Существует форма адресации под названием R1C1, которая выражает адреса как абсолютные или относительные строки и столбцы таким образом, что их можно вычислить и использовать напрямую, без необходимости использования функций ADDRESS, ROW и COLUMN.

Для абсолютного адреса используйте номер строки и номер столбца после меток R и C. Так A3бы и было R3C1.

Для относительной адресации оставьте номер, указывающий на текущую строку или столбец, или укажите соответствующий номер в квадратных скобках. Таким образом, ячейка в той же строке и двух столбцах слева будет указана как RC[-2].

И в Excel, и в Calc есть возможность изменить стиль адреса на R1C1, который будет применяться ко всему. Однако вы можете использовать его в определенных формулах, не делая этого, сделав его текстовой строкой и используя INDIRECT (для которого необязательный параметр стиля адресации должен быть установлен в ноль для распознавания стиля R1C1). Итак, первая формула:

=INDIRECT(ADDRESS(ROW(),COLUMN()-2))-IF(ISNUMBER(INDIRECT(ADDRESS(ROW()-1,COLUMN()-2))), 
 INDIRECT(ADDRESS(ROW()-1,COLUMN()-2)),0)-INDIRECT(ADDRESS(ROW(),COLUMN()-1))

станет:

=INDIRECT("RC[-2]",0)-IF(ISNUMBER(INDIRECT("R[-1]C[-2]",0)), 
 INDIRECT("R[-1]C[-2]",0),0)-INDIRECT("RC[-1]",0)

Вы можете видеть, что это своего рода сокращение для конструкции ADDRESS / ROW / COLUMN.

OFFSET

Типичный способ сделать это, хотя, когда вам нужно сделать относительные отношения очевидными, короче этого. Вы можете использовать функцию OFFSET. Краткая форма для ссылки на одну ячейку OFFSET(reference,rows,columns). Вы указываете начальную точку, а затем количество строк и столбцов от нее.

В ваших примерах формула определяет текущую ячейку, и вы можете сделать это в OFFSET, но, как правило, в этом нет необходимости. Фактическая ссылка на ячейку обычно используется. Как и в ответе Кайла, он будет нормально переведен, если вы скопируете формулу в другую ячейку. OFFSET - это способ сделать отношение местоположения явным. Итак, если бы ваша первая формула была в ячейке C5, она бы выглядела так:

=OFFSET(C5,0,-2)-IF(ISNUMBER(OFFSET(C5,-1,-2)), 
 OFFSET(C5,-1,-2),0)-OFFSET(C5,0,-1)
fixer1234
источник