#excel #vba #sorting
#excel #vba #сортировка
Вопрос:
У меня есть столбец с ячейками, в которых вычисляется значение, представляющее объемы файлов в байтах, и функция, выводящая строку, преобразующуюся в соответствующие единицы (96949643551 -> «90.291 GiB»), которую я затем решил обернуть вокруг этого значения:
=Format_Filesize(B3-B3*Settings!$B$4/E3)
B3-B3*Settings!$B$4/E3
вычисляет разницу между исходным размером файла B3, используя исходный битрейт E3, и прогнозируемым размером файла, используя новый битрейт в настройках! $ B $ 4, и может привести к чему-то вроде 53954174.66Format_Filesize()
возвращает51,45 MiB
для этого примера
Это было довольно приятно, пока я не понял, что, возможно, захочу отсортировать этот столбец вместе с другими (используя функциональность «Данные -> Сортировка и фильтр -> Фильтр».
Есть ли способ либо
- Предоставить обработчик для оценки сортировки? Может быть, создать пользовательский класс с различными функциями получения или переопределения, например
onSort
? или для динамического определения того, что отображается в ячейке? Нравится:
123456;"Display Text"
сортировка с использованием всего значения, но отображение только «Отображаемого текста»?
nvm, сортировка Excel по алфавиту / Z-A не является естественной сортировкой
Мои мысли до сих пор:
- У меня может быть столбец для сортировки (вычисляемое число) и столбец для красивого отображения (
Format_Filesize()
числовой ячейки)
, который легко сделать, но некрасиво; в идеале я бы скрыл числовой столбец, но тогда я больше не мог бы легко сортировать с ним Я могу использовать=[NumericResult] amp; "; " amp; Fortmat_Filesize([NumericResult])
числовое значение впереди для сортировки и форматированную строку для чтения справа.
Нет, я не могу: функция сортировки фильтра будет сортировать строго по алфавиту (2> 100)- Я могу написать свою собственную функцию сортировки и вставить фигуру или элемент управления, привязанный к макросу сортировки, и щелкнуть по нему вместо использования функции сортировки фильтра для этого столбца
- вместо пользовательской функции для вывода форматированного строкового значения я мог бы использовать пользовательский числовой формат, например
[<1024]##0.00" B";[<1048576]##0.00," KB";##0.00,," MB"
Недостатки:
— Мне пришлось бы использовать базовые 10 единиц (КБ, МБ) вместо базовых 2 единиц (КБ, МБ)
— Возможно только максимум 2 условия, за которыми следует всеобъемлющее значение, что означает, что оно будет отображать 5,34 ТБ как 5340000 МБ
Я думаю, что 1 или 2 — довольно хорошие обходные пути, но меня бы очень заинтересовали любые лучшие решения, даже если они кажутся слишком сложными, чтобы их стоило внедрять — для развлечения и / или для полноты картины.
Комментарии:
1. Вы могли бы использовать пользовательский числовой формат для отображения форматированного значения и использовать необработанное число для значения ячейки, но я думаю, что есть ограничение на количество различных форматов, которые вы можете использовать в рабочей книге (200-250?)
2. @TimWilliams что именно вы имеете в виду? До сих пор я сталкивался с приближением единиц СИ (мой обходной # 4), использующим числовые пороговые значения для применения форматов, но условия превышают 2 ( 1) максимум. Вы думаете об отдельном формате для каждого возможного значения, и именно поэтому вы говорите о 100-х форматах? :O
3. Да — например, если значение ячейки равно 96949643551, то пользовательский формат представляет собой форматированное значение «90,291 гигабайт»
4. @TimWilliams Я вижу ^^ интересную идею, но я отчасти рад, что ее ограничение дисквалифицирует ее, потому что это был бы кошмар подхода, который заставляет вас чувствовать себя ужасно из-за его реализации, но я был бы вынужден попробовать ^^ __ Но спасибо, это хороший вклад 🙂
5. # 3 кажется лучшей альтернативой необходимости дополнительного столбца «неформатированного размера». Ваш макрос может переключить столбец на неформатированный размер, выполнить сортировку, а затем вернуться к форматированию.