
Мне бы хотелось узнать, есть ли функция или формула Excel, которую можно использовать для сортировки цифр в ячейке.
Например, если значение A1 равно , 6193254807
а B1 имеет нашу формулу с параметрами, установленными для сортировки по возрастанию, то B1 должно быть равно 0123456789
(включая начальный ноль). Конечно, если параметры были установлены так, чтобы сортировка производилась по убыванию, то B1 должно быть равно 9876543210
.
Есть ли способ сделать это, не прибегая к VBScript, макросам или чему-то столь же экзотическому?
решение1
Это возможно с формулой массива. Предполагая, что исходное число находится вА1, введите любой из следующих символов в пустую ячейку и зафиксируйте его с помощью Ctrl+ Shift+ Enter:
Восходящий:
=REPT(0,LEN(A1)-LEN(SUBSTITUTE(A1,0,"")))&
SUM(POWER(10,ROW(INDIRECT("1:"&LEN(SUBSTITUTE(A1,0,""))))-1)*
LARGE(INT(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)),
ROW(INDIRECT("1:"&LEN(SUBSTITUTE(A1,0,""))))))
По убыванию:
=SUM(POWER(10,ROW(INDIRECT("1:"&LEN(SUBSTITUTE(A1,0,""))))-1)*
SMALL(INT(MID(SUBSTITUTE(A1,0,""),ROW(INDIRECT("1:"&LEN(SUBSTITUTE(A1,0,"")))),1)),
ROW(INDIRECT("1:"&LEN(SUBSTITUTE(A1,0,""))))))
&REPT(0,LEN(A1)-LEN(SUBSTITUTE(A1,0,"")))
Пример:
Каждая формула принимаетнth наибольшее или наименьшее число в ячейке и умножает его на степень 10 в соответствии с его "рангом" (т. е. присваивает ему новое разрядное значение), которые затем суммируются для получения "переставленного" числа. Например, если наше исходное число - это 231
общие шаги расчета для первой формулы будут следующими:
=sum(1*power(10,2), 2*power(10,1), 3*power(10,0))
=sum(100,20,3)
=123
В этом REPT()
сегменте формулы учитываются все начальные и конечные нули.
Результат будет в текстовом формате.. Я подумал, что это будет хорошей идеей, поскольку существует ограничение на количество цифр, которые можно ввести в ячейку (рекомендую прочитатьэтот вопрос Суперпользователя).
Если вы хотите выполнить какие-либо вычисления с результатом, просто вставьте его 0+
в начало формулы, чтобы превратить результат в число.