Жизненая задача про мастера, ученика и производственный цех - VBA
Формулировка задачи:
Добрый день, уважаемые коллеги
В продолжение темы, про безразмерный массив в VBA, не могу решить задачу, кажется все просто, на практике не получается сделать.
Представьте: на предприятии 10 цехов, где работают мастера и ученики, в двух колонках указаны их табельные номера, в третьей колонке указано кто закончил работу http://screenshot.ru/upload/image/WoT2
Необходимо посчитать 2 вещи:
1. Сколько раз мастера попадали в статистику, например цеха №4. Необходимо, пробежаться по колонке номер четыре, и сложить количество повторов табельных номеров мастеров, например 343 - 5, 278 - 6, 889 - 1.. табельные всегда 3-х значное целочисленное. Результаты любым удобным способом в таблицу, на лист "таблица"
2. Сколько раз заканчивали работу, именно мастера. Пусть будет для примера цеха №4, для этого нужно пробежаться по колонке четыре, что бы это был 7 цех, и сложить количество повторов табельных номеров мастеров при условии, что закончил мастер, а не ученик (колонка номер три)
По идее, все бы сделал сам без проблем, если бы табельные номера были известны заранее и их было ограниченное адекватное количество, сложность задачи состоит в том, что бы сложить кол-во уникальных повторов табельных номеров.
По поводу словарей (VBA Dictionary), не понял как их переопределять каждый раз...
В прикрепленном файле, вариант решения через массив, для подобного случая, предложенный уважаемым
Michael99
Безразмерный массив в VBA Я так и не могу его применить к "более сложному" варианту задачи. Заранее благодарю за помощь!Решение задачи: «Жизненая задача про мастера, ученика и производственный цех»
textual
Листинг программы
Option Explicit Sub tt() Dim a, i&, t$ With CreateObject("scripting.dictionary"): .comparemode = 1 a = Sheets("Данные").[h1].CurrentRegion.Value For i = 2 To UBound(a) t = a(i, 4) & "|" & a(i, 1) '1. Сколько раз мастера попадали в статистику .Item(t) = .Item(t) + 1 t = a(i, 4) & "|" & a(i, 3) '2. Сколько раз заканчивали работу, именно мастера (но и ученики, но можно отфильтровать сразу или в конце) .Item(t) = .Item(t) + 1 Next Workbooks.Add(1).Sheets(1).[a1].Resize(.Count, 2) = Application.Transpose(Array(.keys, .items)) End With End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д