132 / 15 / 2 Регистрация: 27.11.2013 Сообщений: 509 |
|
1 |
|
Подсчет промежуточных итогов в таблице переменного размера04.11.2015, 22:27. Показов 8562. Ответов 10
Есть таблица, кол-во строк в которой меняется. Образец прилагается. В желтых строчках нужно ввести формулы промежут. итогов, например сумма и среднее. Я делаю по-школьному — рассчитываю границы промежуточных рейнджей (это тикеры в 4 столбце), а потом с пом. формул R1C1 циклом обсчитываю всю таблицу. Подозреваю, что это не самый эффективный метод — считает очень долго. Можно как-то оптимизировать процесс через массивы или объектные переменные? Причем в промежут. итогах мне нужны не значения, а именно формулы — они важны в текущей работе для быстрого подсчета.
0 |
pashulka 4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
||||
04.11.2015, 22:47 |
2 |
|||
Сообщение было отмечено shavka как решение РешениеОдин из возможных вариантов :
2 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
04.11.2015, 22:56 |
3 |
|||
shavka, есть предложение задействовать штатную команду «Промежуточные итоги». Но для этого придется удалять существующие желтые строки. Все это делает следующий макрос, полученный в основном записью ручных действий.
1 |
pashulka 4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
||||
05.11.2015, 00:16 |
4 |
|||
Если сумму необходимо считать по столбцу D , а среднее по столбцу E , то небольшое изменение :
1 |
132 / 15 / 2 Регистрация: 27.11.2013 Сообщений: 509 |
|
05.11.2015, 02:12 [ТС] |
5 |
чо то там у вас не дописалось в конце в макросе. Ну ладна, если это записью макроса делается, я допишу. Но че то как-то стремно удалять желтые строчки. Он их точно мне сам вставит, где надо? Добавлено через 5 минут
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
05.11.2015, 10:16 |
6 |
Сообщение было отмечено shavka как решение Решениеshavka, Если посмотрите справку, касательно стандартной функции рабочего листа =ПРОМЕЖУТОЧНЫЕ.ИТОГИ() , то увидите что первый обязательный аргумент — это номер функции, в нашем случае, это 9 — СУММ и 1 — СРЗНАЧ Если же результаты вычислений не должны зависеть от наличия фильтра(скрытых строк), то ПРОМЕЖУТОЧНЫЕ.ИТОГИ можно заменить на SUM и AVERAGE. Разумеется, подобным способом Вы можете вводить и более сложные(нестандартные) формулы, только не забудьте, что для программного ввода формул массива — нужно использовать свойство .FormulaArray
1 |
132 / 15 / 2 Регистрация: 27.11.2013 Сообщений: 509 |
|
05.11.2015, 13:19 [ТС] |
7 |
Блин, точно, саффсем забыл. FormulaArray! А я просто Formula написал свойство. Потому он и не считает. Спасибо!!!
0 |
132 / 15 / 2 Регистрация: 27.11.2013 Сообщений: 509 |
|
26.12.2015, 18:36 [ТС] |
8 |
pashulka, наслаждался вашим изящным макросом и тут вдруг облом: если в каком-либо из списков таблицы всего одна строчка, он дальше не группирует. Ошибка 1004. А если запросить через MsgBox адреса группируемых строк, то в этой единичной строчки он пишет такую билеберду:
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
26.12.2015, 19:09 |
9 |
shavka, Не заметил я в своём макросе группировки, но даже ежели её добавить (см.аттач), то если в столбце B будет дата(число) мы пролучим группу, если нет, макрос эту строку просто проигнорирует, но ошибки не будет.
1 |
shavka 132 / 15 / 2 Регистрация: 27.11.2013 Сообщений: 509 |
||||
26.12.2015, 19:22 [ТС] |
10 |
|||
500 раз спасибо! Точно, я ж сначала хотел просто итоги подсчитать, а потом думаю — нахли мне такая простыня, конца-края не видно, дай-ка загруппирую тем же макросом, но понятым мной несколько извращенно. Но не доперло до меня окончательно, я вот так написал:
на что макрос высказал мне все, что он обо мне думает
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
26.12.2015, 19:46 |
11 |
На всякий случай — цитата из офисной справки, об’ясняющая когда нужно применять SpecialCells (за исключением xlLastCell) к одной единственной ячейке : Выделение ячеек в соответствии с содержащимися в них данными 1 Выделите диапазон, содержащий тип ячеек, которые нужно выделить. Чтобы выделить все ячейки этого типа на текущем листе, наведите указатель на любую ячейку и нажмите кнопку мыши. 2 В меню Правка выберите команду Перейти (мой совет — или используйте клавишу F5)
1 |
This can be accomplished with a simple SUBTOTAL across a dynamic range. Locating Total in column B can be looped.
Option Explicit
Sub totalAllClients()
Dim rng As Range, rngsb As Range, addr As String
With Worksheets("sheet11")
With Intersect(.Columns(2), .UsedRange)
Set rng = .Find(What:="total", After:=.Cells(1), MatchCase:=False, _
LookAt:=xlWhole, SearchDirection:=xlPrevious)
If Not rng Is Nothing Then
addr = rng.Address(0, 0)
Do
rng.Offset(0, 1).FormulaR1C1 = _
"=index(c2, match(""zzz"", r1c2:r[-1]c2))"
rng.Offset(0, 3).Resize(, 6).FormulaR1C1 = _
"=subtotal(109, r[-1]c:index(c, match(""zzz"", r1c2:r[-1]c2)))"
Set rng = .FindNext(After:=rng)
Loop Until rng.Address(0, 0) = addr
rng.Offset(2, 3).Resize(1, 6).FormulaR1C1 = _
"=aggregate(9, 3, r2c:r" & rng.Row & "c)"
End If
End With
End With
End Sub
dimavesna
Пользователь
Сообщений: 21
Регистрация: 02.06.2017
Добрый день. Есть необходимость создать макрос для подсчета промежуточных итогов в таблицах, с разным количеством столбцов.
По умолчанию, для фиксированной ширины таблицы (файл в приложении) Excel записывает вот такой код:
Код |
---|
Sub SubTotal() ActiveWindow.SmallScroll Down:=-15 Range("A1").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.SubTotal GroupBy:=1, Function:=xlSum, TotalList:=Array(3, 4, 5, 6, _ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, _ 34, 35, 36, 37, 38, 39, 40, 41), Replace:=True, PageBreaks:=False, _ SummaryBelowData:=True End Sub |
На сколько я понимаю необходимо заменить
Код |
---|
TotalList:=Array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41) |
На переменную в которую будет подсчитываться количество столбцов перед выполнением функции промежуточных итогов, чтобы сделать этот макрос универсальным.
Подскажите пожалуйста как это реализовать. Файл в приложении
Прикрепленные файлы
- Test.xlsm (97.89 КБ)
Промежуточные итоги в таблице |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |