Консультация № 190023
13.11.2016, 19:29
0.00 руб.
1 13 1
Здравствуйте! Прошу помощи в следующем вопросе:

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

Обсуждение

давно
Модератор
137394
1850
13.11.2016, 21:08
общий
13.11.2016, 21:09
Цитата: 2Peachpuncher
В конечной таблице должны отсутствовать дублирующиеся значения, т.е. для одного сочетания "Месяц"/"Канал продаж"/"Группа ТП"/"Группа услуг крупно" должна быть только 1 запись
А что при этом в поле COUNT DISTINCT_of_ACC_N и SUM_without_tax - там должна быть сумма всех записей?
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Посетитель
400677
5
14.11.2016, 00:21
общий
я так полагаю что да
вероятно по строкам будут указанные значения а дальше наприв каждой по столбцам сумма
по карйней мере это логично
давно
Модератор
137394
1850
14.11.2016, 00:26
общий
это ответ
Здравствуйте, 2Peachpuncher!
Макрос в заархивированном xlsm файле. Создаётся таблица с неповторяющимися по атрибутам строками, цифровые поля одинаковых строк из исходной таблицы при этом просуммированы.
Прикрепленные файлы:
85d689d2ce424be93c6cc4d977fea3dac47622f9.rar
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Посетитель
400677
5
14.11.2016, 01:18
общий
а можно узнать какой из двух макросов запускать и чем они отличаются?
давно
Посетитель
400677
5
14.11.2016, 01:26
общий
попытался оба запустить выдает ошибку 1004
давно
Модератор
137394
1850
14.11.2016, 01:31
общий
Адресаты:
Я не знаю, откуда взялись 2 макроса, в таблице, что я Вам передал, один макрос с именем eee. Я скачал то что выложил, еще раз проверил, работает.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Модератор
137394
1850
14.11.2016, 01:38
общий
Вот код:
Код:
Sub eee()
Lst = "Лист2"

NLst = Sheets.Count
' Sheets(Lst).Copy After:=Sheets(NLst)
Sheets(Lst).Copy
NLst = ActiveWorkbook.ActiveSheet.Name

Range("C:C,E:E,F:F,H:H,I:I").Delete Shift:=xlToLeft

Columns("B:B").Cut
Columns("D:D").Insert Shift:=xlToRight

NRow = Range("A2").End(xlDown).Row
CNRow = CStr(NRow)

ActiveWorkbook.Worksheets(NLst).Sort.SortFields.Clear

With ActiveWorkbook.Worksheets(NLst).Sort
.SortFields.Clear
With .SortFields
.Add Key:=Range("A2:A" + CNRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Add Key:=Range("B2:B" + CNRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Add Key:=Range("C2:C" + CNRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Add Key:=Range("D2:D" + CNRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
End With

.SetRange Range("A1:F" + CNRow)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

FStr = ""
NN = ""
j = 0

For i = 2 To NRow
ii = CStr(i)
TStr = CStr(Range("A" + ii)) + Range("B" + ii) + Range("C" + ii) + Range("D" + ii)
If FStr = TStr Then
Range("G" + ii) = 0
Range("E" + NN) = Range("E" + NN) + Range("E" + ii)
Range("F" + NN) = Range("F" + NN) + Range("F" + ii)
Else
NN = ii
FStr = TStr
j = j + 1
Range("G" + ii) = j
End If
Next

With ActiveWorkbook.Worksheets(NLst).Sort
.SortFields.Clear
With .SortFields
.Add Key:=Range("G2:G" + CNRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
End With

.SetRange Range("A1:G" + CNRow)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

j = 1
For i = 2 To NRow
If Range("G" + CStr(i)) = 0 Then
j = i
Else
Exit For
End If
Next

Range("G:G").Delete Shift:=xlToLeft
If j <> 1 Then
Rows("2:" + CStr(j)).Delete Shift:=xlUp
End If

Range("A1").Select

End Sub
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Модератор
137394
1850
14.11.2016, 10:35
общий
Адресаты:
На всякий случай, таблица с результатом работы макроса (там макроса нет, макрос - в исходной таблице)
Прикрепленные файлы:
35e14567f64fa89c64ad583dd77d284b.xlsx
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Посетитель
400677
5
14.11.2016, 10:38
общий
может я что то не так делаю но когда запускаю макрос то итогом получается та же таблица только меньше столбцов

по задаче там В конечной таблице должны отсутствовать дублирующиеся значения, т.е. для одного сочетания "Месяц"/"Канал продаж"/"Группа ТП"/"Группа услуг крупно" должна быть только 1 запись


мне казалось тут должно быть нечто вроде Месяц - одон значение то есть сумма месяцев?
Прикрепленные файлы:
436e79431e57db2763683c3a2cb3ef94.png
давно
Модератор
137394
1850
14.11.2016, 10:49
общий
Адресаты:
Вот Ваша постановка задачи из таблицы.
Цитата: 2Peachpuncher
С помощью VBA-макроса группировать данные в новую таблицу (без применения инструментария "Сводные таблицы") , которая должна содержать поля:

Месяц
Канал продаж
Группа ТП
Группа услуг крупно
COUNT DISTINCT_of_ACC_N
SUM_without_tax

В конечной таблице должны отсутствовать дублирующиеся значения, т.е. для одного сочетания "Месяц"/"Канал продаж"/"Группа ТП"/"Группа услуг крупно" должна быть только 1 запись
Это реализовано: для одного сочетания "Месяц"/"Канал продаж"/"Группа ТП"/"Группа услуг крупно" получена одна запись с суммой данных всех одинаковых.
мне казалось тут должно быть нечто вроде Месяц - одон значение то есть сумма месяцев?
О других итогах речь не шла. Определитесь, что Вам нужно, выдайте чёткую постановку задачи.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Модератор
137394
1850
14.11.2016, 10:53
общий
Адресаты:
Кстати, умираю от любопытства: откуда у Вас взялось 2 макроса?
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Посетитель
400677
5
14.11.2016, 12:21
общий
сам не знаю но сегодня их уже не было когда я удалил первый разорхивированный файл и открыл новый
надо было заскринить

на счет трактовки моет быть вы и правы, а не можете объяснить в двух слов - если в исходном файле 55 тысяч строк а в полученном 5 то за счет группировки каких значений он сократился?
давно
Модератор
137394
1850
14.11.2016, 12:40
общий
14.11.2016, 12:49
Адресаты:
Проверка элементарная: просуммируйте столбец COUNT DISTINCT_of_ACC_N в исходной таблице и в таблице, полученной макросом.
За счет группировки каких значений он сократился? - За счёт объединения одинаковых строк. Прикрепляю таблицу с промежуточным результатом работы макроса. Обратите внимание на колонку G. Сначала исходная таблица (после удаления ненужных столбцов) была отсортирована по первым четырём полям, при этом одинаковые строки по этим полям оказались рядом. Там, где значение не нуль - там накопилась сумма одинаковых по атрибутам строк. Там где нуль - это как раз одинаковые по атрибутам строки, которые будут удалены и в результате получится уменьшенное число строк.
Прикрепленные файлы:
3c03f0156334884098c4c2467c12e5b1.xlsx
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Форма ответа