Excel: Как увеличить индекс строки ссылки на ячейку в формуле?

Вопрос или проблема

В моем листе есть несколько ячеек, содержащих разные ссылки на ячейки с одинаковым индексом строки.

Теперь я хочу ссылаться на эти несколько ячеек, но добавить фиксированный смещенный по строкам:

Скриншот

Таким образом, желаемый результат в этих ячейках – это информация, которая находится в ячейках “AG11”, “AH11”,….

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

Можно ли сделать что-то подобное с =AG&"6+5" или подобным синтаксисом?

Спасибо.

Прямой ответ на:

Можно ли сделать что-то подобное с =AG&”6+5″ или подобным синтаксисом?

будет:

=Indirect("ag"&6+5)

это не обновится, если вы удалите или добавите строки или столбцы

A столбец показывает формулу в B столбце
Пример 1


вы также можете использовать:

=Indirect(Address(Row(AG6)+5,Col(AG6)))

или

=INDIRECT(ADDRESS(6+5,33))

это последнее не обновится, если вы удалите или добавите строки или столбцы

Пример 2
эти примеры выше используют Google Sheets, но должны применяться и к Excel


Хотя если вы хотите одноразовое изменение большого количества ячеек, это было бы возможно через макрос или пользовательскую внешнюю программу, которая прочитает книгу и изменит соответствующие ссылки на ячейки, обе должны вернуть более красивые решения, если ваша конечная цель – просто иметь =AG11.

В качестве примера того, как это будет работать, в OpenOffice:

Sub Main
    Dim sheet As Object
    sheet = ThisComponent.CurrentController.ActiveSheet
    For i = 1 To 5
        Dim formula As String
        Dim address As New com.sun.star.table.CellAddress
        Dim cellName As String
        formula = sheet.getCellRangeByName("B" & i).Formula
        address = sheet.getCellRangeByName(Right(formula, Len(formula)-1)).getCellAddress()
        cellName = Chr(address.Column + 65) & (address.Row+2)
        sheet.getCellRangeByName("B" & i).Formula = "=" & cellName
        Next i
End Sub

Изменит:

A столбец показывает формулу в B столбце
до макроса

на:

после макроса

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

Ответ или решение

Вопрос, который вы подняли, касается того, как изменить индекс строки в ссылках на ячейки в Excel с применением фиксированного смещения. Давайте рассмотрим несколько способов, которые могут помочь вам в этом вопросе.

1. Использование функции INDIRECT

Функция INDIRECT позволяет динамически формировать ссылки на ячейки в зависимости от текстового ввода, что делает её идеальным инструментом для задачи, которую вы описали:

=INDIRECT("AG" & (6 + 5))

В этом примере вы создаете текстовую ссылку на ячейку AG11 (так как 6 + 5 = 11). Однако следует отметить, что эта формула не обновится автоматически, если вы удалите или добавите строки.

2. Использование сочетания функций ADDRESS, ROW и COLUMN

Еще один способ изменить индекс строки в ссылке — использовать комбинацию функций ADDRESS, ROW и COLUMN. Вот как это можно сделать:

=INDIRECT(ADDRESS(ROW(AG6) + 5, COLUMN(AG6)))

Эта формула сначала определяет номер строки исходной ячейки (AG6) и увеличивает его на 5, после чего формирует адрес новой ячейки и обращается к нему через INDIRECT.

3. Прямое указание номера строки

Если вы хотите дополнительно указать конкретное смещение, вы можете использовать следующую формулу:

=INDIRECT(ADDRESS(11, COLUMN(AG6)))

Здесь вам не нужно вычислять номер строки, если вы знаете его заранее.

4. Использование макросов для массового изменения

Если вам нужно провести массовые изменения и обновить несколько формул, вы можете воспользоваться макросами. Например, в OpenOffice можно написать макрос, который будет изменять ссылки в ваших ячейках. Пример кода для OpenOffice:

Sub Main
    Dim sheet As Object
    sheet = ThisComponent.CurrentController.ActiveSheet
    For i = 1 To 5
        Dim formula As String
        formula = sheet.getCellRangeByName("B" & i).Formula
        Dim cellName As String
        Dim address As New com.sun.star.table.CellAddress
        address = sheet.getCellRangeByName(Right(formula, Len(formula)-1)).getCellAddress()
        cellName = Chr(address.Column + 65) & (address.Row + 5) ' Увеличиваем индекс строки на 5
        sheet.getCellRangeByName("B" & i).Formula = "=" & cellName
    Next i
End Sub

Этот макрос обновит формулы в столбце B в зависимости от значений в столбце A.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...