Генерация ячеек из сложения слов из других ячеек.

Автор Mric, 2 апреля 2021, 13:30

0 Пользователи и 1 гость просматривают эту тему.

Mric

Всем привет. Такой вопрос возник, как соединяя ячейки формировать новые ячейки? Условно есть ячейка A1, в ней написано abc, и есть ячейки в столбце B, где идут, условно названия городов, по городу в каждой ячейке. Как можно приплюсовать, сделать так, чтобы в столбце C выводило сращение этих слов. Т.е. abcaustin, abcboston и т.д.

И еще отдельный вопрос, как можно генерировать строки с 3-6 символами из алфавита английского? Т.е. они будут генерировать все возможные комбинации букв, там abcd, aabd и так до полной генерации всех комбинаций. Возможно ли как-то это сделать в Calc?

kompilainenn

в ячейке С1 пишем

=A1&B1

Цитата: Mric от  2 апреля 2021, 13:30И еще отдельный вопрос, как можно генерировать строки с 3-6 символами из алфавита английского? Т.е. они будут генерировать все возможные комбинации букв, там abcd, aabd и так до полной генерации всех комбинаций. Возможно ли как-то это сделать в Calc?

макросом
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

sokol92

#2
 Первый вопрос. Занесите в ячейку C1

=$A$1 & B1

и тяните вниз.

Второй вопрос. Занестите в ячейку A1 (английские имена функций)

=CHAR(CODE("a")+MOD(INT((ROW(A1)+26*26*26-1)/26/26/26)-1;26)) & CHAR(CODE("a")+MOD(INT((ROW(A1)+26*26-1)/26/26)-1;26)) & CHAR(CODE("a")+MOD(INT((ROW(A1)+25)/26)-1;26)) & CHAR(CODE("a")+MOD(ROW(A1)-1;26))

и тяните вниз (до строки 456976 ;D ). Или сразу выделите A1:A456976 (наберите A1:A456976 в строке имен), занесите формулу (в строку формул) и нажмите Alt+Enter. Секунд 30 придется подождать. Контроль: в ячейке A456976 должно быть значение "zzzz".


Владимир.

Mric

Цитата: sokol92 от  2 апреля 2021, 14:04
Первый вопрос. Занесите в ячейку C1

=$A$1 & B1

и тяните вниз.

Второй вопрос. Занестите в ячейку A1 (английские имена функций)

=CHAR(CODE("a")+MOD(INT((ROW(A1)+26*26*26-1)/26/26/26)-1;26)) & CHAR(CODE("a")+MOD(INT((ROW(A1)+26*26-1)/26/26)-1;26)) & CHAR(CODE("a")+MOD(INT((ROW(A1)+25)/26)-1;26)) & CHAR(CODE("a")+MOD(ROW(A1)-1;26))

и тяните вниз (до строки 456976 ;D ). Или сразу выделите A1:A456976 (наберите A1:A456976 в строке имен), занесите формулу (в строку формул) и нажмите Alt+Enter. Секунд 30 придется подождать. Контроль: в ячейке A456976 должно быть значение "zzzz".




Спасибо, все работает! =)

Mric

Цитата: sokol92 от  2 апреля 2021, 14:04
Первый вопрос. Занесите в ячейку C1

=$A$1 & B1

и тяните вниз.

Второй вопрос. Занестите в ячейку A1 (английские имена функций)

=CHAR(CODE("a")+MOD(INT((ROW(A1)+26*26*26-1)/26/26/26)-1;26)) & CHAR(CODE("a")+MOD(INT((ROW(A1)+26*26-1)/26/26)-1;26)) & CHAR(CODE("a")+MOD(INT((ROW(A1)+25)/26)-1;26)) & CHAR(CODE("a")+MOD(ROW(A1)-1;26))

и тяните вниз (до строки 456976 ;D ). Или сразу выделите A1:A456976 (наберите A1:A456976 в строке имен), занесите формулу (в строку формул) и нажмите Alt+Enter. Секунд 30 придется подождать. Контроль: в ячейке A456976 должно быть значение "zzzz".




А как сделать для 3х символов тоже самое, я про второй вопрос?

sokol92

#5
Обрезать первую часть формулы:  :)

=CHAR(CODE("a")+MOD(INT((ROW(A1)+26*26-1)/26/26)-1;26)) & CHAR(CODE("a")+MOD(INT((ROW(A1)+25)/26)-1;26)) & CHAR(CODE("a")+MOD(ROW(A1)-1;26))

"Тянуть" до строки 17576 (26*26*26), затем значения начнут повторяться.
Владимир.

Mric

Цитата: sokol92 от 14 апреля 2021, 15:36
Обрезать первую часть формулы:  :)

=CHAR(CODE("a")+MOD(INT((ROW(A1)+26*26-1)/26/26)-1;26)) & CHAR(CODE("a")+MOD(INT((ROW(A1)+25)/26)-1;26)) & CHAR(CODE("a")+MOD(ROW(A1)-1;26))

"Тянуть" до строки 17576 (26*26*26), затем значения начнут повторяться.

Спасибо!

Mric

Цитата: sokol92 от  2 апреля 2021, 14:04Второй вопрос. Занестите в ячейку A1 (английские имена функций)

=CHAR(CODE("a")+MOD(INT((ROW(A1)+26*26*26-1)/26/26/26)-1;26)) & CHAR(CODE("a")+MOD(INT((ROW(A1)+26*26-1)/26/26)-1;26)) & CHAR(CODE("a")+MOD(INT((ROW(A1)+25)/26)-1;26)) & CHAR(CODE("a")+MOD(ROW(A1)-1;26))

и тяните вниз (до строки 456976 Смеющийся ). Или сразу выделите A1:A456976 (наберите A1:A456976 в строке имен), занесите формулу (в строку формул) и нажмите Alt+Enter. Секунд 30 придется подождать. Контроль: в ячейке A456976 должно быть значение "zzzz".

А можете скинуть для 5 символов такое, чего-то я логику понять не могу?

bigor

Цитата: Mric от  3 июля 2021, 14:40для 5 символов

=CHAR(CODE("a")+MOD(INT((ROW(B1)+26*26*26*26-1)/26/26/26/26)-1;26))&CHAR(CODE("a")+MOD(INT((ROW(B1)+26*26*26-1)/26/26/26)-1;26)) & CHAR(CODE("a")+MOD(INT((ROW(B1)+26*26-1)/26/26)-1;26)) & CHAR(CODE("a")+MOD(INT((ROW(B1)+25)/26)-1;26)) & CHAR(CODE("a")+MOD(ROW(B1)-1;26))

только у calc строк не хватит все комбинации вывести
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

sokol92

Цитата: Mric от  3 июля 2021, 14:40чего-то я логику понять не могу
Начните с 2 символов (остальное - аналогично).
Один из способов занумеровать все двухсимвольные комбинации строчных латинских букв такой:
aa, ab, ..., az (26 строк)
ba, bb, ..., bz (26 строк)
...
za, zb, ..., zz (26 строк)

Общее число строк: 26 * 26 (=676).

При таком способе нумерации значение второго символа повторяется через каждые 26 строк, то есть зависит от отстатка от деления номера строки (листа документа Calc) на 26.
Значение первого символа одинаково для каждой последовательной группы из 26 строк (считая с первой). Если бы строки нумеровались от 0, то для  достижения такого поведения необходимо было бы взять целую часть от деления номера строки на 26 и от этого числа взять остаток от деления на 26.

Владимир.

Mric

Цитата: Bigor от  3 июля 2021, 15:50
Цитата: Mric от  3 июля 2021, 14:40для 5 символов

=CHAR(CODE("a")+MOD(INT((ROW(B1)+26*26*26*26-1)/26/26/26/26)-1;26))&CHAR(CODE("a")+MOD(INT((ROW(B1)+26*26*26-1)/26/26/26)-1;26)) & CHAR(CODE("a")+MOD(INT((ROW(B1)+26*26-1)/26/26)-1;26)) & CHAR(CODE("a")+MOD(INT((ROW(B1)+25)/26)-1;26)) & CHAR(CODE("a")+MOD(ROW(B1)-1;26))

только у calc строк не хватит все комбинации вывести

Большое спасибо, ничего, я все строки и не переберу=)

mikekaganski

#11
Цитата: Bigor от  3 июля 2021, 15:50только у calc строк не хватит все комбинации вывести
Строк хватит (если включить поддержку очень больших листов в последних версиях - нужно 11 881 376, а доступно 16 000 000), но уж на 6 и больше точно не хватит; да и на 5, я думаю, оно или займёт слишком много времени, либо упадёт.

Хотя нет, проверил - не упадёт, и займёт даже меньше часа ;)
С уважением,
Михаил Каганский

bigor

Т.е. со стабильностью при включенной поддержке больших листов у LO все нормально стало?
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

kompilainenn

Цитата: Bigor от  5 июля 2021, 13:29
Т.е. со стабильностью при включенной поддержке больших листов у LO все нормально стало?
нет, просто данный конкретный кейс отработал=) повезло

Вот список уже имеющихся проблем

https://bugs.documentfoundation.org/showdependencytree.cgi?id=133764&hide_resolved=1

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут