Добрый день. Извините, если уже было подобное - найти не могу, т.к. сложно пока сформулировать что именно искать.
Полный текст задачи такой: На основании данных во вложенном файле нужно создать макрос. Задача макроса выводить топ 5 продуктов отсортированных по доходности. Период для оценки рейтинга продуктов задается в ручную. Например – задаем период с 1 по 15 Июля 2015 года, на выходе получаем список и показатели по 5 наиболее доходным продуктам.
Из этой задачи я хочу попросить помощи у вас в части формирования списка 5 доходных продуктов и суммой их показателей с выводом их на отдельный лист.
Возможные вопросы: Считаем, что все данные показателей корректные и проверка для них не нужна. Считаем, что данные всегда отсортировны по дате - от старых к новым и по наименованию от А до Я. Считаем, что положение столбцов и их наименования не изменяются. В файл-пример, чтобы он весил 100 Kb, не влез июль
Думаю, дальше я смогу сам ее доработать до нужной кондиции.
Добрый день. Извините, если уже было подобное - найти не могу, т.к. сложно пока сформулировать что именно искать.
Полный текст задачи такой: На основании данных во вложенном файле нужно создать макрос. Задача макроса выводить топ 5 продуктов отсортированных по доходности. Период для оценки рейтинга продуктов задается в ручную. Например – задаем период с 1 по 15 Июля 2015 года, на выходе получаем список и показатели по 5 наиболее доходным продуктам.
Из этой задачи я хочу попросить помощи у вас в части формирования списка 5 доходных продуктов и суммой их показателей с выводом их на отдельный лист.
Возможные вопросы: Считаем, что все данные показателей корректные и проверка для них не нужна. Считаем, что данные всегда отсортировны по дате - от старых к новым и по наименованию от А до Я. Считаем, что положение столбцов и их наименования не изменяются. В файл-пример, чтобы он весил 100 Kb, не влез июль
Думаю, дальше я смогу сам ее доработать до нужной кондиции.Awallon
очень вразумительный ответ! Простите, что значит нет? не за один день? А за сколько ж? за весь период? но сумма нигде не считается и выводится только максимальная за период. Так продукта1 469544 было продано только 15 января. За весь же период с 1 по 15 января было продано 5052642
очень вразумительный ответ! Простите, что значит нет? не за один день? А за сколько ж? за весь период? но сумма нигде не считается и выводится только максимальная за период. Так продукта1 469544 было продано только 15 января. За весь же период с 1 по 15 января было продано 5052642alex77755
ну как-то так: только что суммировать не понял. Просуммировал выручку
[vba]
Код
Option Explicit
Sub ПереТоп2() Dim per, n!, r!, k!, lr, m(), tek!, dt, pr, u, i, j, rz(), max, nm per = InputBox("Укажите период в формате dd.mm.yyyy-dd.mm.yyyy", "Период", "01.01.2015-15.01.2015") If InStr(1, per, "-") = 0 Then GoTo osh per = Split(per, "-") If Not IsDate(per(0)) Or Not IsDate(per(0)) Then GoTo osh n = DateValue(per(0)): k = DateValue(per(1)) Dim sl: Set sl = CreateObject("Scripting.Dictionary")
With Лист1 lr = .Cells(.Rows.Count, 1).End(xlUp).Row m = .Cells(1, 1).Resize(lr, 8).Value For r = 2 To UBound(m) dt = m(r, 4) & "." & get_n(m(r, 3)) & "." & m(r, 1) tek = DateValue(dt) If tek >= n Then If tek <= k Then sl(m(r, 5)) = sl(m(r, 5)) + m(r, 7) End If End If Next r End With
ReDim rz(1 To 5, 1) For i = 1 To 5 u = sl.keys max = 0 For r = 0 To UBound(u) If max < sl(u(r)) Then max = sl(u(r)): nm = u(r) Next r rz(i, 0) = nm rz(i, 1) = max sl.Remove (nm) Next i Worksheets.Add [a1].Resize(5, 2) = rz Cells.Columns.AutoFit Exit Sub
Private Function get_n(s) Dim i For i = 1 To 12 If LCase(MonthName(i)) = LCase(s) Then get_n = i Exit Function End If Next i End Function
[/vba]
ну как-то так: только что суммировать не понял. Просуммировал выручку
[vba]
Код
Option Explicit
Sub ПереТоп2() Dim per, n!, r!, k!, lr, m(), tek!, dt, pr, u, i, j, rz(), max, nm per = InputBox("Укажите период в формате dd.mm.yyyy-dd.mm.yyyy", "Период", "01.01.2015-15.01.2015") If InStr(1, per, "-") = 0 Then GoTo osh per = Split(per, "-") If Not IsDate(per(0)) Or Not IsDate(per(0)) Then GoTo osh n = DateValue(per(0)): k = DateValue(per(1)) Dim sl: Set sl = CreateObject("Scripting.Dictionary")
With Лист1 lr = .Cells(.Rows.Count, 1).End(xlUp).Row m = .Cells(1, 1).Resize(lr, 8).Value For r = 2 To UBound(m) dt = m(r, 4) & "." & get_n(m(r, 3)) & "." & m(r, 1) tek = DateValue(dt) If tek >= n Then If tek <= k Then sl(m(r, 5)) = sl(m(r, 5)) + m(r, 7) End If End If Next r End With
ReDim rz(1 To 5, 1) For i = 1 To 5 u = sl.keys max = 0 For r = 0 To UBound(u) If max < sl(u(r)) Then max = sl(u(r)): nm = u(r) Next r rz(i, 0) = nm rz(i, 1) = max sl.Remove (nm) Next i Worksheets.Add [a1].Resize(5, 2) = rz Cells.Columns.AutoFit Exit Sub