Создать сортируемую таблицу из других таблиц в Excel - PullRequest
1 голос
/ 24 января 2020

У меня есть документ Excel с тремя разными листами. Первый и второй листы содержат одинаково отформатированные таблицы с различной информацией о каждом. Давайте назовем их списками покупок.

Лист 1: Вещи, которые мама хочет купить Содержит таблицу с предметом, количеством, лучшим местом для покупки и т. Д. c.

Лист 2: Вещи, которые хочет папа купить Содержит таблицу с пунктом, количеством, лучшим местом для покупки и т. д. c.

Я хочу, чтобы на третьем листе - «Все, что нам нужно купить» - была таблица, агрегированная из других два, содержащие все элементы в обоих списках (нам не нужно беспокоиться о дубликатах). Я бы предпочел, чтобы эта третья таблица была сортируемой, но, по крайней мере, я не хочу, чтобы в ней были строки с пробелами.

Как я могу выполнить sh это?

1 Ответ

1 голос
/ 25 января 2020

Краткий ответ: это зависит от того, как вы планируете использовать свой третий лист. Но вот одно решение, с которого вы можете начать, если у вас есть хотя бы один столбец в 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 вашу сводную таблицу каждый раз, когда изменяются данные, или настраивать макрос для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...