подскажите код пожалуйста, как можно из массива подсчитать кол-во одинаковых значений. Например в одномерном массиве от 1 до 31 содержащий символьный тип данных 1 - "В", 2-"Я", 3 "Я", 4 "Б" и тд. Вывести результат в переменные. Например, количество значений символа "В" в массиве - 8, "Я" - 20 и тд. И в коде указывать не явный символ для поиска, а автоматически определить значение из первого индекса, циклом подсчитать это значение в массиве, также из 2 до 31, 3 до 31. Наверно можно как то с помощью функций сделать код проще и более быстродействующим. Спасибо
Добрый день! Эта классическая задача наиболее просто решается через словари (Dictionary) в VBA (да и в любом другом языке программирования). Ключи в словаре всегда уникальны. На псевдокоде это может выглядеть так: для каждого элемента исходного массива проверяем, входит ли он в словарь. Если нет, то добавляем в словарь пару (где 1 - это значение, соответствующее ключу). Если да, увеличиваем значение, соответствующее ключу на 1. По итогу, у вас будет словарь, ключи которого - это уникальные значения из исходного массива. А соответствующие значения в словаре - это количество раз, которые каждый соответствующий ключ встречался в исходном массиве. Попробуйте этот способ сначала на бумаге, а потом в коде.
немного не понял, ключи в массиве тоже уникальны, а значения могут повторятся, в словаре ключи и значения элементов оба уникальны или нет? По логике в словаре должны и значения быть уникальными. А можете сделать видео на эту тему? Спасибо за ответ@@analyst_klondike
можно вместо словаря использовать тогда таблицу, где значения, которые в массиве - те же самые что и в таблице, эта таблица справочник у нее поле символа значения уникальны, ну немного стало доходить, проверяем первый символ из массива сравнивая его с таблицей справочником методом цикла (проходом), если совпадений нет, то 1 Далее также проверяем второй символ из массива. Нужно только в таблицу справочника символов добавить числовое поле для подсчета, перед началом процедуры это поле обновить 0 для всех записей (запросом). В итоге должно получится результат в самой таблице справочнике будут поля с символами и их кол-во в соответствии массива. Надо попробовать@@analyst_klondike
Интересно, но это не для новичков. Я после года изучения VBA только сейчас обратил внимание на массивы. Всегда без них обходился. Не знаю пока где их применить можно.
Да, материал несколько превосходит базовый уровень владения VBA, особенно в части динамических массивов. Однако, массивы - базовая структура данных, без которой не обходится ни один язык программирования, поэтому изучить их нужно.
Там, если есть очень много данных, очень круто использовать массивы + словари (Scripting.Dictionary). В своё время я ускорил свой проект в Excel где-то в 150 раз. Там, в отличие от коллекций, есть ключи и команда Exist. Если у тебя десятки тысяч строк, то несколько циклов для перебора использовать достаточно долго. Если научиться это использовать, то скорость вырастет во много раз. Кроме того, при работе с массивами и словарями важно правильно выбирать типы данных для хранения информации. Например, использование числовых типов данных вместо строковых может ускорить выполнение операций. Также стоит помнить о возможности оптимизации алгоритмов и использовании более эффективных методов обработки данных.
Для примера уточню: работал на крупном заводе в должности администратора. Мои обязанности включали распределение работы среди сотрудников, контроль за поступающим материалом из других отделений и отслеживание перемещения продукции в другие отделы. Все это можно было делать вручную, но это занимало слишком много времени. Ежедневно мне приходилось работать с большим количеством Excel-таблиц, и мне захотелось автоматизировать этот процесс. Учитывая, что компания была крупной, IT-специалисты были заняты другими задачами, а система была закрытой, я решил выполнить автоматизацию с помощью Excel. Постепенно я начал создавать функции с переменными, затем перешел к массивам, словарям, кнопкам и формам. Далее я настроил взаимодействие с операционной системой Windows, папками и файлами, автоматическое создание, удаление, заполнение и форматирование цветами целых книг и сводных таблиц. Также я разработал кнопки, отвечающие за различные действия. Все это происходило постепенно, но каждый новый шаг ускорял процесс работы. Я использовал Debug.Print, чтобы проверять время выполнения различных действий. Благодаря этому удалось сократить время работы программы с 30 минут до 12 секунд. Кроме того, я смог сократить время обработки другого большого проекта с нескольких часов до 7 минут. VBA для Excel - очень мощный инструмент для обработки данных.
@@BogachevCHANELочень интересный кейс, сталкиваюсь в данный момент со схожей монотонной работой в экселе в компании, не мог бы подсказать где черпал информацию для обучения , не то честно говоря глаза разбегаются каждый раз когда собираюсь учить vba
Понимаю, что происходит, но не понимаю зачем? Озвучивание примера, как это используется на практике, существенно поможет в понимании процессов. С другой стороны, не исключаю, что программисты на VBA и так всё понимают. Я не программист, а достаточно опытный юзер excel, но макросы использовал мало, только как создание кнопок в отдельных проектах, и мне более актуален в работе power query.
Что-то непонятно? Объясним! Переходи по ссылке, оставляй вопрос:
t.me/analyst_klondike
Лучше один раз увидеть, чем 100 раз услышать.
подскажите код пожалуйста, как можно из массива подсчитать кол-во одинаковых значений. Например в одномерном массиве от 1 до 31 содержащий символьный тип данных 1 - "В", 2-"Я", 3 "Я", 4 "Б" и тд. Вывести результат в переменные. Например, количество значений символа "В" в массиве - 8, "Я" - 20 и тд. И в коде указывать не явный символ для поиска, а автоматически определить значение из первого индекса, циклом подсчитать это значение в массиве, также из 2 до 31, 3 до 31. Наверно можно как то с помощью функций сделать код проще и более быстродействующим. Спасибо
Добрый день! Эта классическая задача наиболее просто решается через словари (Dictionary) в VBA (да и в любом другом языке программирования). Ключи в словаре всегда уникальны. На псевдокоде это может выглядеть так: для каждого элемента исходного массива проверяем, входит ли он в словарь. Если нет, то добавляем в словарь пару (где 1 - это значение, соответствующее ключу). Если да, увеличиваем значение, соответствующее ключу на 1. По итогу, у вас будет словарь, ключи которого - это уникальные значения из исходного массива. А соответствующие значения в словаре - это количество раз, которые каждый соответствующий ключ встречался в исходном массиве. Попробуйте этот способ сначала на бумаге, а потом в коде.
немного не понял, ключи в массиве тоже уникальны, а значения могут повторятся, в словаре ключи и значения элементов оба уникальны или нет? По логике в словаре должны и значения быть уникальными. А можете сделать видео на эту тему? Спасибо за ответ@@analyst_klondike
можно вместо словаря использовать тогда таблицу, где значения, которые в массиве - те же самые что и в таблице, эта таблица справочник у нее поле символа значения уникальны, ну немного стало доходить, проверяем первый символ из массива сравнивая его с таблицей справочником методом цикла (проходом), если совпадений нет, то 1 Далее также проверяем второй символ из массива. Нужно только в таблицу справочника символов добавить числовое поле для подсчета, перед началом процедуры это поле обновить 0 для всех записей (запросом). В итоге должно получится результат в самой таблице справочнике будут поля с символами и их кол-во в соответствии массива. Надо попробовать@@analyst_klondike
Интересно, но это не для новичков. Я после года изучения VBA только сейчас обратил внимание на массивы. Всегда без них обходился. Не знаю пока где их применить можно.
Да, материал несколько превосходит базовый уровень владения VBA, особенно в части динамических массивов. Однако, массивы - базовая структура данных, без которой не обходится ни один язык программирования, поэтому изучить их нужно.
Там, если есть очень много данных, очень круто использовать массивы + словари (Scripting.Dictionary). В своё время я ускорил свой проект в Excel где-то в 150 раз. Там, в отличие от коллекций, есть ключи и команда Exist. Если у тебя десятки тысяч строк, то несколько циклов для перебора использовать достаточно долго. Если научиться это использовать, то скорость вырастет во много раз.
Кроме того, при работе с массивами и словарями важно правильно выбирать типы данных для хранения информации. Например, использование числовых типов данных вместо строковых может ускорить выполнение операций. Также стоит помнить о возможности оптимизации алгоритмов и использовании более эффективных методов обработки данных.
Для примера уточню: работал на крупном заводе в должности администратора. Мои обязанности включали распределение работы среди сотрудников, контроль за поступающим материалом из других отделений и отслеживание перемещения продукции в другие отделы. Все это можно было делать вручную, но это занимало слишком много времени. Ежедневно мне приходилось работать с большим количеством Excel-таблиц, и мне захотелось автоматизировать этот процесс. Учитывая, что компания была крупной, IT-специалисты были заняты другими задачами, а система была закрытой, я решил выполнить автоматизацию с помощью Excel.
Постепенно я начал создавать функции с переменными, затем перешел к массивам, словарям, кнопкам и формам. Далее я настроил взаимодействие с операционной системой Windows, папками и файлами, автоматическое создание, удаление, заполнение и форматирование цветами целых книг и сводных таблиц. Также я разработал кнопки, отвечающие за различные действия. Все это происходило постепенно, но каждый новый шаг ускорял процесс работы.
Я использовал Debug.Print, чтобы проверять время выполнения различных действий. Благодаря этому удалось сократить время работы программы с 30 минут до 12 секунд. Кроме того, я смог сократить время обработки другого большого проекта с нескольких часов до 7 минут. VBA для Excel - очень мощный инструмент для обработки данных.
Молодец!
@@BogachevCHANELочень интересный кейс, сталкиваюсь в данный момент со схожей монотонной работой в экселе в компании, не мог бы подсказать где черпал информацию для обучения , не то честно говоря глаза разбегаются каждый раз когда собираюсь учить vba
Понимаю, что происходит, но не понимаю зачем?
Озвучивание примера, как это используется на практике, существенно поможет в понимании процессов.
С другой стороны, не исключаю, что программисты на VBA и так всё понимают.
Я не программист, а достаточно опытный юзер excel, но макросы использовал мало, только как создание кнопок в отдельных проектах, и мне более актуален в работе power query.