Сообщество - MS, Libreoffice & Google docs

MS, Libreoffice & Google docs

762 поста 14 934 подписчика

Популярные теги в сообществе:

72

Многоуровневая сортировка массивов в VBA: разбор примера

Для сортировки массивов в VBA можно писать собственные функции и процедуры основанные, например, на методах пузырьковой сортировки, сортировки подсчётом, сортировки Хоара и т.д. Тем не менее, подобные решения будут представлять из себя достаточно сложные макросы даже в том случае, если предназначаться они будут для сортировки лишь одномерных массивов.


В случае же многоуровневой сортировки массивов (например, сперва сортировка значений «x» по возрастанию, а затем сортировка значений «у» по убыванию) написание подобных процедур фактически почти теряет смысл, так как уровень сложности написания макросов для подобных целей возрастает экспоненциально и итоговые макросы при этом однозначно не будут оптимальными по производительности, так как самой производительным методом сортировки в VBA является сортировка средствами Excel.


Пример многоуровневой сортировки:

Многоуровневая сортировка массивов в VBA: разбор примера

Поэтому в этом посте хотелось бы представить подход к решению задачи, когда требуется программными средствами произвести сортировку массивов в VBA. Заключается он в:


1. Экспорте значений из массива на рабочий лист

2. Многоуровневой сортировке значений на рабочем листе средствами Excel

3. Обратном импорте уже просортированных значений в массив


Поскольку всё это детально описывать в одном посте будет слишком сложно, предлагаю посмотреть видео, в котором я подробно объяснил, как можно написать подобное решение (в котором, при этом, благодаря умным таблицам, все указания диапазонов являются абсолютно динамичными):

Показать полностью 1 1
4724

Если вы все еще с калькулятором проверяете Excel...

Из диалога в комментах с @oplkill, @Pavelashmed

"с экселем может быть запара с точками и запятыми. Поэтому некоторые бухгалтера пересчитывают в ручную..."

Итак, проблема: Имеем набор данных, среди которых притаились подлые засланцы

Как видите, итог явно не сходится с тем, что должно быть. Даже в 5 значениях найти все - сложно. А если их сотни?

Для данной проблемы существует элементарное решение (используем возможности форматирования ячеек), для этого выделяем область с числами и жмакаем вот сюда:

В открывшемся окне выбираем "все форматы", клацаем в произвольный и в строке "Тип:" рисуем следующее - 0,00;-0,00;0;[Красный]General

Жмакаем ОК, и видим:

Вот они, наши засланцы, которые эксель за числа не считает.

Есть чуть более простой метод (применять на небольших объемах чисел) - применить денежный формат - любой на выбор, но я рекомендую доллары или евро (т.к. их знак ПЕРЕД числом, т.е. более заметен)

Тогда наши данные примут такой вид (возле ошибок не будет символа валюты)

Минус - на большом объеме так искать тяжело, т.к. нет выделения цветом.


В общем - эксель вещь мощная, и многие рутинные вопросы в нем можно "автоматизировать"


P.S. А потом прогоняем числовые данные через CTRL-H (замена) . -> , ; З -> 3 и так далее, если ошибок много и лень править каждую ручками.

UPD #comment_191898784

Показать полностью 5
9

Комбинаторика и ексель. Нужна помощь

Всем привет. Пришлось столкнутся с такой задачей - необходимо создать таблицу полного расчета всех возможных вариантов перестановок с повторениями 9 чисел. То что нашёл в интернете почти не работает как надо, вешает машину, и есть ещё нюансы.. Как это можно решить? Я так понимаю что количество строк в листе может завалить за сотню тыщ, или ошибаюсь? 🤔 Спасибо за любую помощь!
UPD. Ряд чисел выглядит примерно таким образом : 0.3.4.5.3.7.1.2.9 . Каждый раз разный ряд. После расчета всех возможных комбинаций нужно вытащить результат с порядковым номером строки, к примеру - 45874, потом 16450, 24354 и т д.

109

Планировщик с показателем эффективности в гугл таблицах

У меня появилась потребность в планировщике с диаграммой эффективности, чтобы наглядно видеть сколько задач я выполнил, а сколько ещё осталось. Короче, сразу к делу.


Для столбца А. Жмём Вставка - Флажок. Не создавайте флажки на будущее. Это будет отражаться на диаграмме эффективности. Придумали 10 задач на день - 10 строк и создавайте.

Формат - Условное форматирование. Выставляем условия как на картинке.



Как вы видите я поставил условия для диапазона А1:С34. В приделах этой области должен находиться ваш планировщик чтобы выполненные задачи зачёркивались, закрашивались. Если форматировать ячейки по формуле "=$A:$A", то вам останется только выбрать цвет фона и зачёркивание.


Ищем место где будет находиться диаграмма эффективности. На её месте вбиваем 2 формулы как на картинке.

2 ячейки с формулами будут показывать 2 числа (Сколько зачёркнутых и не зачёркнутых строк). Выделяем их и создаём круговую диаграмму. Далее Изменить диаграмму - Дополнительно - Расположение - Не выбрано (чтобы исчезли проценты).

Показать полностью 2

Создание таблицы комбинации из нескольких нечисловых множеств

Добрый день! Уважаемые знатоки, помогите определиться с вопросом создания множества из набора различных параметров.

Допустим у нас есть параметры A, B, C, D и т.д. В каждом параметре может быть несколько вариантов типа А1, А2, А3...An; В1, В2, В3...Вn.

Конечный вид может быть в формате A1-B5-C7-D1

Нужна отсортированная таблица в виде:

A1-B1-C1-D1

A1-B2-C1-D1

A1-B3-C1-D1

A1-B4-C1-D1

A1-B5-C1-D1

A2-B1-C1-D1

A2-B2-C1-D1

A2-B3-C1-D1

A2-B4-C1-D1

A2-B5-C1-D1

A1-B1-C1-D1

A1-B1-C2-D1

A1-B1-C3-D1

A1-B1-C4-D1

A1-B1-C5-D1

И т.д.

Для большего понимания в параметрах А1-Аn, B1-Bn и т.д. могут быть такие значения:

А1 - 300х300

А2 - 350х350

...

В1 - T

B2 - G

B3 - S

...

C1 - 150

C2 - 200

C3 - 300

...

В каждом случае по 3-7 вариантов, не больше.


Как это выполнить? Не могу корректно сформулировать свой запрос в гугле, похожие комбинаторики находил, но с цифрами, а в моем случае в ячейке присутствуют текстовые данные.

Показать полностью
73

Поиск неправильных записей – Задача в Excel

Получил вот такой вопрос:

И хочу предложить один из вариантов решения этой задачи с помощью стандартных инструментов Excel (в следующих постах также рассмотрим решение отдельно с помощью Power Query и отдельно с помощью VBA).


Итак, из постановки задачи получается, что у нас есть столбец с фамилией, именем и отчеством и в соседнем столбце указывается номер паспорта. В этой таблице теперь надо найти те записи, в которых для одного и того же человека указываются разные номера паспортов.


Как я понимаю, речь скорее всего идёт об определенном списке, который со временем пополняется всё новыми записями и нужно найти те записи, в которых были неправильно внесены паспортные номера.


Так что, во-первых, я создал список с тридцатью воображаемыми лицами, каждому из которых присвоен рандомный номер, представим, что это и есть такой номер паспорта. Получается это и будет исходный список уникальных имён с правильными номерами паспортов, по которому мы в итоге и будем проверять правильность нашего решения:

Теперь я создам этот самый упомянутый в постановке задачи лист записи. То есть рандомно заполняю столбец ФИО лицами из нашей исходной таблички (добавляю около трёхсот строк), и в случае пяти строк преднамеренно вношу неправильный номер паспорта, симулируя ошибку.

Если также хочешь потренироваться  в решении этой задачи, то вот ссылка на скачивание файла, показанного выше:

https://drive.google.com/file/d/1-y1erQDwHdAMId-juqpJ0KGMtVF...


Итак, теперь собственно процесс поиска внесённых ошибок (естественно, представляем, что не знаем их).


В первую очередь статично пронумеруем все строки, кому-как удобно (формулой и вставкой в виде значений или автозаполнением):

Теперь будем удалять дубликаты по первым двум столбцам. Для этого выбираем одну из ячеек таблицы и идём во вкладку «Данные», где затем щелкаем по «Удалить дубликаты».

Здесь убираем галочку напротив столбца «Номер», так как он нам иначе помешает удалить правильные дубликаты записей и подтверждаем операцию. Итог будет следующий:

Уже у нас осталось 35 уникальных значений, что на 5 больше, чем в исходной таблице. Поэтому теперь делаем следующее.


Добавляем столбец «Подсчёт», и прописываем в нём функцию СЧЁТЕСЛИ. В первом аргументе указываем столбец со всеми ФИО, а во втором аргументе ссылаемся на ФИО текущей строки таблицы:

При этом я здесь работаю с умной таблицей, поэтому у меня были вставлены так называемые структурные ссылки ([ФИО], [@ФИО] и т.д.). Если тебе приходится проделывать эту операцию с обычным диапазоном на рабочем листе, то процесс имеет мельчайшее отличие (просто важно не забывать закреплять ссылки).


Вот что в итоге выходит в столбце «Подсчёт». Функция СЧЁТЕСЛИ считает, сколько раз встречается имя каждой текущей строки во всей таблице. Если имя встречается всего один раз, то из этого следует, что все записи с этим именем в таблице имели одинаковый номер паспорта. Там же где мы видим любое другое число нам становится понятно, сколько вариантов номера паспорта была внесено для одного и того же человека.

Так что всё что остаётся — это профильтровать значения. Убираю в фильтре столбца «Подсчёт» единицы, и мы получаем следующий результат:

Вот у нас и показаны лишь те записи, в которых для одних и тех же лиц были вписаны разные номера паспортов. По сути дела все, задача выполнена – теперь мы знаем, что в листе записи, нужно проверить строки с выведенными на картинке выше номерами.


Ну и конечно же можно еще сделать итоговый результат попривлекательнее (условное форматирование, сортировка и так далее):

Вот такое решение поставленной задачи с помощью стандартных инструментов Excel. Если хочешь более подробно узнать о всём, что было проделано в этом примере, предлагаю посмотреть следующее видео (в нём, помимо прочего, подробно рассказываю о примененном условном форматировании, о удалении дубликатов нескольких столбцов и т.д.):

Ну а в одном из следующих столбцов мы разберем более интересное и более оптимальное решение этой же задачи – с помощью Power Query!

Показать полностью 9 1

Почему Функия ВПР не выдает искомое значение?

Суть проблемы:

Имеется таблица из трёх столбцов, в одном столбце значения, среди которых будет производиться поиск (A), в другом столбце то, что должна выдать в результате выполнения функция ВПР (B), в третьем столбце искомое значение (H).

Формула выглядит следующим образом: =ВПР(H1;$A$2:$B$700;2;0)

Функция ищет необходимые значения выборочно, работает в целом некорректно. Например значение "22.22.1" не видит в упор. Помогите разобраться, в чем проблема. Возможно, есть более удобный вариант решения данной задачи, так как, если искомое значение повторяется, то ВПР выдаст только первый найденный результат.  Буду рад помощи.

Ссылка на таблицу:

Файл можно получить по ссылке:

ВПР (1).xlsx

https://yadi.sk/i/SXY40jy7jCJWEw

6

Посчитать количество символов в ячейке google tabs

Добрый день! Можете ли помочь, в гугл таблице неолбходимо посчитать количество числе в одной ячейке вида:

=66,7+2066,55+4234,3+4095,15+264,5+5702+808+1596

в данном случае результат должен быть 8

для экселя я нагуглил сложную формулу, но она не работает в гугл таблицах, а адаптировать её у меня ума не хватает (((

Отличная работа, все прочитано!