Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Слияние 2-х таблиц GS - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Слияние 2-х таблиц GS
yaotomp Дата: Пятница, 29.09.2023, 14:12 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

2019
Здравствуйте всем

такой момент: делаю объединение из 2-х таблиц в одну с помощью QUERY

Пишу формулу:
Код
query({'LETO'!C2:L;'ZIMA'!C2:L};"select * where Col1 is not null")

И данные успешно вставляются, но при добавлении данных в таблицы LETO и ZIMA в обще таблице сначала отображаются данные из таблицы LETO, а потом ZIMA

Подскажите пожалуйста как сделать так, чтобы можно сделать их чередование и общей таблице данные вносились именно по порядку введения данных в таблицы LETO и ZIMA

Заранее спасибо


Сообщение отредактировал Serge_007 - Пятница, 29.09.2023, 15:41
 
Ответить
СообщениеЗдравствуйте всем

такой момент: делаю объединение из 2-х таблиц в одну с помощью QUERY

Пишу формулу:
Код
query({'LETO'!C2:L;'ZIMA'!C2:L};"select * where Col1 is not null")

И данные успешно вставляются, но при добавлении данных в таблицы LETO и ZIMA в обще таблице сначала отображаются данные из таблицы LETO, а потом ZIMA

Подскажите пожалуйста как сделать так, чтобы можно сделать их чередование и общей таблице данные вносились именно по порядку введения данных в таблицы LETO и ZIMA

Заранее спасибо

Автор - yaotomp
Дата добавления - 29.09.2023 в 14:12
Gustav Дата: Пятница, 29.09.2023, 21:17 | Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2808
Репутация: 1183 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
как сделать так, чтобы можно сделать их чередование и общей таблице данные вносились именно по порядку введения данных в таблицы LETO и ZIMA

Чтобы задать порядок записей, о котором Вы говорите, а именно (если правильно понял), "1-я запись из LETO, 1-я запись из ZIMA, 2-я запись из LETO, 2-я запись из ZIMA и т.д.", надо на лету организовать подходящую нумерацию записей обеих таблиц, а затем отсортировать все записи по этим вспомогательным номерам внутри общей таблицы. Для нумерации записей привлечем функцию SEQUENCE (в дополнительном виртуальном столбце), а внутри совпадающих номеров "разведем" записи обеих таблиц, добавив к каждому номеру небольшой десятичный "довесок": 0,1 для таблицы LETO и 0,2 для таблицы ZIMA. После выполнения сортировки вернем пользователю только первоначальные столбцы диапазона C2:L, скрыв виртуальный столбец с нумерацией.

С учетом вышесказанного формула на базе QUERY может выглядеть так:
[vba]
Код
=QUERY(
ARRAY_CONSTRAIN(
SORT({
{LETO!C2:L \ ArrayFormula(SEQUENCE(ROWS(LETO!C2:L))+0,1)};
{ZIMA!C2:L \ ArrayFormula(SEQUENCE(ROWS(ZIMA!C2:L))+0,2)}
}; COLUMNS(LETO!C2:L)+1; TRUE);
ROWS(LETO!C2:L)+ROWS(ZIMA!C2:L); COLUMNS(LETO!C2:L));
"select * where Col1 is not null")
[/vba]

Можно обойтись без QUERY, заменив условие "Col1 is not null" на NOT(ISBLANK(...!C2:C)) при использовании функции FILTER:
[vba]
Код
=ARRAY_CONSTRAIN(
SORT({
FILTER({LETO!C2:L \ ArrayFormula(SEQUENCE(ROWS(LETO!C2:L))+0,1)}; NOT(ISBLANK(LETO!C2:C)));
FILTER({ZIMA!C2:L \ ArrayFormula(SEQUENCE(ROWS(ZIMA!C2:L))+0,2)}; NOT(ISBLANK(ZIMA!C2:C)))
}; COLUMNS(LETO!C2:L)+1; TRUE);
ROWS(LETO!C2:L)+ROWS(ZIMA!C2:L); COLUMNS(LETO!C2:L))
[/vba]

Количество строк, возвращаемое функцией ARRAY_CONSTRAIN, можно без опаски задать с избытком - в этом случае будут выведены только актуальные записи, имеющиеся в выборке. Поэтому, не мудрствуя лукаво, зададим это количество максимально возможной суммой количеств строк в обеих таблицах:
[vba]
Код
ROWS(LETO!C2:L)+ROWS(ZIMA!C2:L)
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
как сделать так, чтобы можно сделать их чередование и общей таблице данные вносились именно по порядку введения данных в таблицы LETO и ZIMA

Чтобы задать порядок записей, о котором Вы говорите, а именно (если правильно понял), "1-я запись из LETO, 1-я запись из ZIMA, 2-я запись из LETO, 2-я запись из ZIMA и т.д.", надо на лету организовать подходящую нумерацию записей обеих таблиц, а затем отсортировать все записи по этим вспомогательным номерам внутри общей таблицы. Для нумерации записей привлечем функцию SEQUENCE (в дополнительном виртуальном столбце), а внутри совпадающих номеров "разведем" записи обеих таблиц, добавив к каждому номеру небольшой десятичный "довесок": 0,1 для таблицы LETO и 0,2 для таблицы ZIMA. После выполнения сортировки вернем пользователю только первоначальные столбцы диапазона C2:L, скрыв виртуальный столбец с нумерацией.

С учетом вышесказанного формула на базе QUERY может выглядеть так:
[vba]
Код
=QUERY(
ARRAY_CONSTRAIN(
SORT({
{LETO!C2:L \ ArrayFormula(SEQUENCE(ROWS(LETO!C2:L))+0,1)};
{ZIMA!C2:L \ ArrayFormula(SEQUENCE(ROWS(ZIMA!C2:L))+0,2)}
}; COLUMNS(LETO!C2:L)+1; TRUE);
ROWS(LETO!C2:L)+ROWS(ZIMA!C2:L); COLUMNS(LETO!C2:L));
"select * where Col1 is not null")
[/vba]

Можно обойтись без QUERY, заменив условие "Col1 is not null" на NOT(ISBLANK(...!C2:C)) при использовании функции FILTER:
[vba]
Код
=ARRAY_CONSTRAIN(
SORT({
FILTER({LETO!C2:L \ ArrayFormula(SEQUENCE(ROWS(LETO!C2:L))+0,1)}; NOT(ISBLANK(LETO!C2:C)));
FILTER({ZIMA!C2:L \ ArrayFormula(SEQUENCE(ROWS(ZIMA!C2:L))+0,2)}; NOT(ISBLANK(ZIMA!C2:C)))
}; COLUMNS(LETO!C2:L)+1; TRUE);
ROWS(LETO!C2:L)+ROWS(ZIMA!C2:L); COLUMNS(LETO!C2:L))
[/vba]

Количество строк, возвращаемое функцией ARRAY_CONSTRAIN, можно без опаски задать с избытком - в этом случае будут выведены только актуальные записи, имеющиеся в выборке. Поэтому, не мудрствуя лукаво, зададим это количество максимально возможной суммой количеств строк в обеих таблицах:
[vba]
Код
ROWS(LETO!C2:L)+ROWS(ZIMA!C2:L)
[/vba]

Автор - Gustav
Дата добавления - 29.09.2023 в 21:17
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!