
Я пытаюсь зеркально отразить столбец из одного листа Excel в другой в пределах одной книги Excel. Цель состоит в том, чтобы второй лист обновлялся при редактировании первого. По сути, когда я добавляю/удаляю строки на первом листе, то же самое автоматически происходит и на втором листе.
В моем столбце есть имена сотрудников, и по мере того, как люди приходят/уходят из офиса, я буду добавлять/удалять их соответственно. Мои листы отслеживают разные данные, но сотрудники все те же. Мой первый лист — основной, а остальные извлекают данные соответственно. Будет ли работать формула зеркалирования? Кроме того, как применить ее ко всему столбцу?
решение1
Вот идея без VBA: «смещение».
Допустим, ваши исходные данные находятся на "Листе1", и вы хотите отразить каждую ячейку на "Листе2". Для любой ячейки на Листе2 вы можете использовать:
=OFFSET(Sheet1!$A$1,Row(A1)-1,COLUMN(A1)-1,1,1)
Sheet1!$A$1
: ваша основная ссылочная ячейка. Это единственная ячейка, которую вы не можете переместить или удалить. Вы можете оставить Столбец 1 пустым и скрыть его, чтобы этого не произошло.Row(A1)-1
: «Строка(A1)» определит, в какой строке Листа2 вы находитесь. «-1» нейтрализует смещение (вы хотите прочитать ту же самую строку, в которой вы находитесь, а не следующую).COLUMN(A1)-1
: то же, что и выше, но для определения вашего столбца.,1,1)
: устанавливает размер диапазона в ячейку (1 на 2)
Я считаю, что если вы не удалите основную ссылочную ячейку (в данном примере — A1), то это должно работать, независимо от того, что вы делаете на Листе 1.
Вот несколько проблем, с которыми вы можете столкнуться при использовании этого метода:
- Если между данными есть пробелы (на Листе 1), может потребоваться форматирование или дополнительные формулы, чтобы избежать отображения большого количества нулей.
- Если вы попытаетесь использовать какую-либо формулу в качестве «counta» или «average», результаты могут быть изменены этими нулями (вы можете скрыть их, но они все равно повлияют на формулы).
решение2
это нельзя сделать с помощью простой формулы. Если вы добавляете или удаляете строки в Sheet1, формулы будет недостаточно для добавления или удаления строк в Sheet2. Для этого вам нужен другой подход.
Одним из вариантов является создание VBA, который управляет удалением и добавлением новых строк.
Другой способ — скрыть строки вместо их удаления. Добавьте столбец, в котором сотрудник отмечен как активный или неактивный. Затем отфильтруйте таблицу, чтобы скрыть неактивных сотрудников.
Формула может быть использована для извлечения имен из Sheet1 в Sheet2, а также для извлечения активных/неактивных значений для каждой строки. Например, если имя находится в столбце A в sheet1, то используйте его в Sheet2
=индекс(Лист1!$A:$A,строка())
Если статус (активный/неактивный) указан в столбце B, используйте =index(Sheet1!$A:$A,row())
другой столбец, а затем выполните фильтрацию по этому столбцу.
Однако есть одна большая неотъемлемая опасность: если порядок сотрудников изменится в Sheet1, то все данные в Sheet2 будут неверными. Порядок сотрудников по-прежнему будет соответствовать порядку в Sheet1, но остальные данные не будут перемещаться с новым порядком сортировки.
Подход с использованием VBA был бы более надежным.