Краткий ответ: это зависит от того, как вы планируете использовать свой третий лист. Но вот одно решение, с которого вы можете начать, если у вас есть хотя бы один столбец в Sheet 1
, который гарантированно будет содержать значения для каждой строки. Для целей моего примера мы будем предполагать, что столбец равен Sheet1!$B:$B
.
Наша формула будет go в Sheet3!A2
, прямо под заголовком столбца, затем будет заполнена вправо и вниз.
Сначала вы захотите получить содержимое Sheet1
. Это просто: =Sheet1!A2
. Относительная ссылка скопирует всю таблицу.
В какой-то момент вам нужно переключиться на Sheet2
. Как вы (или, вернее, формула) знаете, когда? Мы можем подсчитать количество строк в Sheet1
следующим образом: =COUNTA(Sheet1:$B:$B)
- обратите внимание, что мы используем столбец, который гарантированно будет иметь значения для каждой строки. Это подсчет непустых ячеек в этом столбце.
Используя этот счетчик строк, мы можем сравнить текущую (Sheet3
) строку с счетчиком Sheet1
, чтобы определить, пора ли переключаться. Вы можете получить текущую строку с помощью =ROW()
(не забудьте вычесть 1 для строки заголовка).
Если мы сложим это вместе, мы получим нашу проверку переключения:
=IF((ROW()-1)<COUNTA(Sheet1!$B:$B),Sheet1!A2,[switch-over formula])
Как нам сказать, к какой ячейке go, поскольку мы не можем использовать тот же метод, что и для Sheet1
? Мы смещаем относительную ссылку того же типа (то есть Sheet2!A2
), вычитая количество строк Sheet1
, затем добавляя 1 (опять же, для заголовков).
=IF((ROW()-1)<COUNTA(Sheet1!$B:$B),Sheet1!A2,OFFSET(Sheet2!A2,-COUNTA(Sheet1!$B:$B)+1,0))
Это будет добавьте таблицы без пробелов.
Задачи:
0s
Если вы заполните формулу за длину обеих таблиц - и вы, вероятно, захотите, так если вы добавляете строки, вам не нужно обновлять Sheet3
- вы получите 0 в ячейках. Чтобы предотвратить это, вы можете проверить количество элементов в формуле Sheet2
и добавить пустую строку, если текущая строка больше, чем сумма элементов в обоих листах.
=IF((ROW()-1)<COUNTA(Sheet1!$B:$B),Sheet1!A2,IF((ROW()+1)>(COUNTA(Sheet1!$B:$B)+COUNTA(Sheet2!$B:$B)),"",OFFSET(Sheet2!A2,-COUNTA(Sheet1!$B:$B)+1,0)))
Производительность
Если у вас менее 10000 предметов, вам, вероятно, не нужно беспокоиться о производительности. Но если этот список станет действительно большим, постоянные проверки на счетчиках листов увязнут в этом листе. Чтобы обойти это, создайте другой лист, в котором вы используете две ячейки для вычисления значений для Sheet1
и Sheet2
, а затем укажите их по вашей формуле в Sheet3
. Они будут вычисляться по одному разу, когда Excel обновляет дерево зависимостей.
Сортировка
Сортировка по Sheet3
технически возможна с использованием функции SMALL
, но, вероятно, это того не стоит. Если вы действительно хотите, чтобы это было отсортировано, используйте сводную таблицу для столбцов с Sheet3
. Единственный недостаток: вам нужно будет обновлять sh вашу сводную таблицу каждый раз, когда изменяются данные, или настраивать макрос для вас.