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

Вход

Регистрация

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

 

= Мир MS Excel/Прямоугольный массив в памяти вытянуть в столбец - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Прямоугольный массив в памяти вытянуть в столбец (Формулы/Formulas)
Прямоугольный массив в памяти вытянуть в столбец
tulskias Дата: Суббота, 19.03.2022, 23:16 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

А подскажите, пожалуйста, есть ли способ «вытянуть» в столбец (строку) двумерный массив из памяти, который не выделен диапазоном.
Например календарь «в памяти» можно создать формулой типа:

=СЧЁТ(СТРОКА(ДВССЫЛ(A1&":"&A2)))

При A1 = 01.01.21, и A2 = 31.12.21, формула =СУММПРОИЗВ(--(СЧЁТ(СТРОКА(ДВССЫЛ(L8&":"&L9))))) вернёт значение 365.

Хочу из него «вычесть» дни праздников для подсчёта отпусков. Отпуска считаются исходя из всего периода работы (а это может быть много лет). Так как, праздники повторяются каждый год, то слепил из списка праздников ДВУМЕРНЫЙ массив формулой по количеству лет:

=ДАТАЗНАЧ(Т(ТРАНСП(ДЕНЬ(Праздники)&"."&МЕСЯЦ(Праздники))&"."&(СТРОКА(ДВССЫЛ(2021&":"&2022)))))

01.01.2021 01.01.2022
02.01.2021 02.01.2022
03.01.2021 03.01.2022
04.01.2021 04.01.2022
... и т.д. ... и т.д.

Для дальнейшей обработки его надо «вытянуть» в столбец. Варианты со счётчиком, вроде СТРОКА(), соответственно, не подходят — массив-то формируется в памяти.

Соответствует ли моя хотелка возможностям Excel или разработчикам ещё надо поработать? :-)
К сообщению приложен файл: __.xlsx (16.3 Kb)
 
Ответить
СообщениеА подскажите, пожалуйста, есть ли способ «вытянуть» в столбец (строку) двумерный массив из памяти, который не выделен диапазоном.
Например календарь «в памяти» можно создать формулой типа:

=СЧЁТ(СТРОКА(ДВССЫЛ(A1&":"&A2)))

При A1 = 01.01.21, и A2 = 31.12.21, формула =СУММПРОИЗВ(--(СЧЁТ(СТРОКА(ДВССЫЛ(L8&":"&L9))))) вернёт значение 365.

Хочу из него «вычесть» дни праздников для подсчёта отпусков. Отпуска считаются исходя из всего периода работы (а это может быть много лет). Так как, праздники повторяются каждый год, то слепил из списка праздников ДВУМЕРНЫЙ массив формулой по количеству лет:

=ДАТАЗНАЧ(Т(ТРАНСП(ДЕНЬ(Праздники)&"."&МЕСЯЦ(Праздники))&"."&(СТРОКА(ДВССЫЛ(2021&":"&2022)))))

01.01.2021 01.01.2022
02.01.2021 02.01.2022
03.01.2021 03.01.2022
04.01.2021 04.01.2022
... и т.д. ... и т.д.

Для дальнейшей обработки его надо «вытянуть» в столбец. Варианты со счётчиком, вроде СТРОКА(), соответственно, не подходят — массив-то формируется в памяти.

Соответствует ли моя хотелка возможностям Excel или разработчикам ещё надо поработать? :-)

Автор - tulskias
Дата добавления - 19.03.2022 в 23:16
Egyptian Дата: Суббота, 19.03.2022, 23:57 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 184 ±
Замечаний: 0% ±

Excel 2013/2016
Если я правильно понял и вы хотите извлечь одну за другой все даты из полученного виртуального массива, то попробуйте обернуть вашу формулу функцией
Код
SMALL(ваша формула,счетчик)
 
Ответить
СообщениеЕсли я правильно понял и вы хотите извлечь одну за другой все даты из полученного виртуального массива, то попробуйте обернуть вашу формулу функцией
Код
SMALL(ваша формула,счетчик)

Автор - Egyptian
Дата добавления - 19.03.2022 в 23:57
прохожий2019 Дата: Воскресенье, 20.03.2022, 00:23 | Сообщение № 3
Группа: Проверенные
Ранг: Старожил
Сообщений: 1241
Репутация: 317 ±
Замечаний: 0% ±

365 Beta Channel
или разработчикам ещё надо поработать?
вполне уже поработали, только экселька вам потребуется 365-ый:
[vba]
Код
=LET(x;B4:B17;y;СЧЁТ(x);MAKEARRAY(y*(ГОД(D3)-ГОД(D2)+2);1;LAMBDA(r;c;ДАТАМЕС(ИНДЕКС(x;ОСТАТ(r-1;y)+1);12*ОТБР((r-1)/y)))))
[/vba]
К сообщению приложен файл: -1-.xlsx (18.8 Kb)
 
Ответить
Сообщение
или разработчикам ещё надо поработать?
вполне уже поработали, только экселька вам потребуется 365-ый:
[vba]
Код
=LET(x;B4:B17;y;СЧЁТ(x);MAKEARRAY(y*(ГОД(D3)-ГОД(D2)+2);1;LAMBDA(r;c;ДАТАМЕС(ИНДЕКС(x;ОСТАТ(r-1;y)+1);12*ОТБР((r-1)/y)))))
[/vba]

Автор - прохожий2019
Дата добавления - 20.03.2022 в 00:23
Gustav Дата: Воскресенье, 20.03.2022, 00:58 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2705
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
[offtop]
Цитата прохожий2019, 20.03.2022 в 00:23, в сообщении № 3 ()
только экселька вам потребуется 365-ый

А в таблицах Гугл, которые для простых людей пока явно доступнее, чем экселька 365 :) , достаточно обернуть исходную формулу в функцию FLATTEN:
[vba]
Код
=ArrayFormula(FLATTEN( ... ))
[/vba]
[vba]
Код
=ArrayFormula(FLATTEN(
ДАТАЗНАЧ(T(ТРАНСП(ДЕНЬ($B$4:$B$17)&"."&МЕСЯЦ($B$4:$B$17))&"."&(СТРОКА(ДВССЫЛ(ГОД(G2)&":"&ГОД(G3))))))
))
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение[offtop]
Цитата прохожий2019, 20.03.2022 в 00:23, в сообщении № 3 ()
только экселька вам потребуется 365-ый

А в таблицах Гугл, которые для простых людей пока явно доступнее, чем экселька 365 :) , достаточно обернуть исходную формулу в функцию FLATTEN:
[vba]
Код
=ArrayFormula(FLATTEN( ... ))
[/vba]
[vba]
Код
=ArrayFormula(FLATTEN(
ДАТАЗНАЧ(T(ТРАНСП(ДЕНЬ($B$4:$B$17)&"."&МЕСЯЦ($B$4:$B$17))&"."&(СТРОКА(ДВССЫЛ(ГОД(G2)&":"&ГОД(G3))))))
))
[/vba]

Автор - Gustav
Дата добавления - 20.03.2022 в 00:58
bmv98rus Дата: Воскресенье, 20.03.2022, 09:10 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4099
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
tulskias, Если вопрос теоретический то двумерный в одномерный массив развертываетя элементарно при размерности R, C Будет R*C элементов. при помощи простых мат операций из последовательности от 1 до R*C на основе кратности получается индекс элемента двумерного массива соответствующий индексу одномерного в зависимости от того что перебираем первым, строки или столбцы.
операции int((X-1)/R)+1 и Mod(X-1;R)+1 дадут пары 1,1; 1,2; 1,3 .... 2,1; 2,2; .... в #3
Эти значения просто нужно дополнительно обернуть в одну конструкцию и использовать в индекс
Код
=INDEX(ARR2D;N(INDEX(Mod(ARR1D-1;R)+1;));B(INDEX(int((ARR1D-1)/R)+1;)))

ARR2D - это двумерный массив, ARR1D - это 1 до R*C

Другое дело, нужно ли генерить сперва двумерный массив, или нужно путем сдвига дат по шаблону сразу получить одномерный с нужными датами. o32. Рядом просто проверка 1го и 15го элемента.
Код
=EDATE(INDEX(B4:B17;N(INDEX(MOD(ROW(A1:INDEX(A:A;ROWS(B4:B17)*(YEAR(G3)-YEAR(G2)+1)))-1;YEAR(G3)-YEAR(G2)+1)+1;)));12*INT((ROW(A1:INDEX(A:A;ROWS(B4:B17)*(YEAR(G3)-YEAR(G2)+1)))-1)/(YEAR(G3)-YEAR(G2)+1)))

[p.s.]рекомендую отказаться от летучих функций. Запись короче, но последствия могут быть очень плачевными.[/p.s.]
К сообщению приложен файл: example2625.xlsx (16.3 Kb)


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Воскресенье, 20.03.2022, 10:41
 
Ответить
Сообщениеtulskias, Если вопрос теоретический то двумерный в одномерный массив развертываетя элементарно при размерности R, C Будет R*C элементов. при помощи простых мат операций из последовательности от 1 до R*C на основе кратности получается индекс элемента двумерного массива соответствующий индексу одномерного в зависимости от того что перебираем первым, строки или столбцы.
операции int((X-1)/R)+1 и Mod(X-1;R)+1 дадут пары 1,1; 1,2; 1,3 .... 2,1; 2,2; .... в #3
Эти значения просто нужно дополнительно обернуть в одну конструкцию и использовать в индекс
Код
=INDEX(ARR2D;N(INDEX(Mod(ARR1D-1;R)+1;));B(INDEX(int((ARR1D-1)/R)+1;)))

ARR2D - это двумерный массив, ARR1D - это 1 до R*C

Другое дело, нужно ли генерить сперва двумерный массив, или нужно путем сдвига дат по шаблону сразу получить одномерный с нужными датами. o32. Рядом просто проверка 1го и 15го элемента.
Код
=EDATE(INDEX(B4:B17;N(INDEX(MOD(ROW(A1:INDEX(A:A;ROWS(B4:B17)*(YEAR(G3)-YEAR(G2)+1)))-1;YEAR(G3)-YEAR(G2)+1)+1;)));12*INT((ROW(A1:INDEX(A:A;ROWS(B4:B17)*(YEAR(G3)-YEAR(G2)+1)))-1)/(YEAR(G3)-YEAR(G2)+1)))

[p.s.]рекомендую отказаться от летучих функций. Запись короче, но последствия могут быть очень плачевными.[/p.s.]

Автор - bmv98rus
Дата добавления - 20.03.2022 в 09:10
tulskias Дата: Воскресенье, 20.03.2022, 21:00 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Благодарю всех, кто откликнулся!
Ближе всего к тому чего я хочу ответ bmv98rus (вторая часть), но, конечно же, надо его еще «разобрать по косточкам».
Еще раз, спасибо!
 
Ответить
СообщениеБлагодарю всех, кто откликнулся!
Ближе всего к тому чего я хочу ответ bmv98rus (вторая часть), но, конечно же, надо его еще «разобрать по косточкам».
Еще раз, спасибо!

Автор - tulskias
Дата добавления - 20.03.2022 в 21:00
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Прямоугольный массив в памяти вытянуть в столбец (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

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