Здравствуйте ! Подскажи пожалуйста , как сделать макрос , чтоб на втором листе отображались фамилии и рядом количество сделанных изделий за определенный месяц.
Пример списка в файле
Спасибо!!!
Здравствуйте ! Подскажи пожалуйста , как сделать макрос , чтоб на втором листе отображались фамилии и рядом количество сделанных изделий за определенный месяц.
Добрый день! Без файла угадать сложно, что требуется. Сделал, как понял. Код: [vba]
Код
Sub select_() Dim d As Object, arr, title, item As String, key As String, s Dim i As Long, j, lr As Long
Set d = CreateObject("Scripting.Dictionary")
With Worksheets("Лист1") ' имя Лист1 поменять на имя листа с исходными данными title = .Cells(1, 1).CurrentRegion.Rows(1).Value ' массив заголовка arr = .Cells(1, 1).CurrentRegion.Value ' основной массив
For i = 2 To UBound(arr, 1) key = Format(arr(i, 1), "mm.yyyy") & ":" & arr(i, 2) ' сцепляем 2 первых столбца для словаря If d.exists(key) Then ' если месяц и фамилия уже есть в словаре, то d(key) = d(key) + arr(i, 3) ' прибавляем значение Else ' иначе d(key) = arr(i, 3) ' записываем значение из 3 столбца End If Next i End With
With Worksheets("tmp") ' имя tmp поменять на имя листа с результатом .Cells.Clear ' очищаем ячейки на листе .Cells(1, 1).Resize(1, UBound(title, 2)) = title ' выгружаем в первую строку заголовок lr = 2 ' последняя заполненная строка For Each j In d.keys() ' цикл по ключам словаря s = Split(j, ":") ' разбиваем ключ с месяцем и ФИО по разделителю : .Cells(lr, 1).Resize(1, UBound(s) + 1) = s ' выгружаем в значение s первые 2 столбца .Cells(lr, 3) = d(j) ' выгружаем сумму lr = lr + 1 ' прибавляем 1 к последней заполненной строке Next j End With End Sub
[/vba]
Добрый день! Без файла угадать сложно, что требуется. Сделал, как понял. Код: [vba]
Код
Sub select_() Dim d As Object, arr, title, item As String, key As String, s Dim i As Long, j, lr As Long
Set d = CreateObject("Scripting.Dictionary")
With Worksheets("Лист1") ' имя Лист1 поменять на имя листа с исходными данными title = .Cells(1, 1).CurrentRegion.Rows(1).Value ' массив заголовка arr = .Cells(1, 1).CurrentRegion.Value ' основной массив
For i = 2 To UBound(arr, 1) key = Format(arr(i, 1), "mm.yyyy") & ":" & arr(i, 2) ' сцепляем 2 первых столбца для словаря If d.exists(key) Then ' если месяц и фамилия уже есть в словаре, то d(key) = d(key) + arr(i, 3) ' прибавляем значение Else ' иначе d(key) = arr(i, 3) ' записываем значение из 3 столбца End If Next i End With
With Worksheets("tmp") ' имя tmp поменять на имя листа с результатом .Cells.Clear ' очищаем ячейки на листе .Cells(1, 1).Resize(1, UBound(title, 2)) = title ' выгружаем в первую строку заголовок lr = 2 ' последняя заполненная строка For Each j In d.keys() ' цикл по ключам словаря s = Split(j, ":") ' разбиваем ключ с месяцем и ФИО по разделителю : .Cells(lr, 1).Resize(1, UBound(s) + 1) = s ' выгружаем в значение s первые 2 столбца .Cells(lr, 3) = d(j) ' выгружаем сумму lr = lr + 1 ' прибавляем 1 к последней заполненной строке Next j End With End Sub
jun, Можно будет продолжения вопроса , как сделать чтоб при выборе из выподающего списка месяца , отображолось только на втором листе ь фамилии и рядом количество сделанных изделий выбранного месяца
jun, Можно будет продолжения вопроса , как сделать чтоб при выборе из выподающего списка месяца , отображолось только на втором листе ь фамилии и рядом количество сделанных изделий выбранного месяцаcompany05
Если нужно, чтобы на листе с именем ARM в выпадающем списке отображались только те месяцы, которые есть на листе с данными (в примере Лист1), то вариант (см. файл.)
Если нужно, чтобы на листе с именем ARM в выпадающем списке отображались только те месяцы, которые есть на листе с данными (в примере Лист1), то вариант (см. файл.)jun