Як вказує Кайл, люди зазвичай просто використовують відносну адресацію, і його відповідь описує, як це зробити. Ви можете бачити, як прості формули стають.
Пояснення оригінальних формул
Зразкові формули, які ви включили до запитання, можливо, були зроблені таким чином, щоб виділити взаємозв'язок між адресами комірок. Поки структура не змінюється, цей стиль звернення фокусується на логіці фізичних взаємозв'язків комірок. Зауважте, що якщо структура електронної таблиці зміниться, все зруйнується, оскільки посилання прив’язані до вихідної структури.
Щоб зрозуміти, що вони роблять, ADDRESS будує текстовий опис посилання на клітинку. Це дозволяє використовувати обчислення, щоб визначити, куди має посилатися посилання. Тут хороша коротка демонстрація . INDIRECT перетворює текстовий опис посилання на клітинку у фактичне посилання.
Отже, якщо ви хочете отримати більш чисту альтернативу, найчистішим було б просто використовувати фактичні посилання на клітинки, як відповідь Кайла. Якщо у вас є ситуація, коли ви дійсно хочете зосередити увагу на структурі електронних таблиць, є ще кілька способів впорядкувати це.
Адресація R1C1
Існує форма адресації під назвою R1C1, яка виражає адреси як абсолютні чи відносні рядки та стовпці таким чином, що їх можна обчислити та використати безпосередньо, не потребуючи АДРЕСУ, РОЗУМУ та КОЛІННЯХ функцій.
Для абсолютної адреси використовуйте номер рядка та номер стовпця після міток 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)
Ви можете бачити, що це своєрідна стенограма для створення АДРЕСИ / РАДУ / КОЛИНИ.
ОФСЕТ
Типовий спосіб зробити це, хоча, коли вам потрібно зробити відносні стосунки очевидними, коротший за цей. Ви можете використовувати функцію 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)
indirect/address
? Схоже, ви можете просто використовувати стандартні посилання на комірки.