Ребят, полдня туплю жёстко над тем, как в массив засунуть формулу CountIfs (СЧЁТЕСЛИМН).
Вообщем суть такая: надо формулу СЧЁТЕСЛИМН засунуть в VBA и при этом именно в массив, т.к. там расчёт куда быстрее производится (у меня объём строк до 900 000). Макрос сначала определяет последние строки и столбцы в таблице (strcount, colcount), потом загоняет лист в массив (r_data), и дальше циклом прогоняет формулы по всей длине массива.
С первыми двумя формулами всё ок (DatePart), там расчёт именно в массиве производится, и ошибок нет. А вот дальше (Application.CountIfs) пошли проблемы. Синтаксис формулы такой: Application.CountIfs (Arg(1),agr(2), arg(3)...)
Через Range и Cells всё проще, здесь всё работает:
Однако надо чтобы расчёт был без обращения к ячейке, а именно к массиву, чтобы быстрее считалось. Вот хз как это сделать... Может кто сталкивался с подобным?
Код
Sub test()
Dim r_data As Variant
Dim strcount, colcount As Long
strcount = Cells(Rows.Count, 41).End(xlUp).Row
colcount = Cells(1, Columns.Count).End(xlToLeft).Column
r_data = Range(Cells(1, 1), Cells(strcount, colcount))
For i = 2 To strcount
r_data(i, 1) = DatePart("ww", r_data(i, 5), vbMonday)
r_data(i, 2) = DatePart("d", r_data(i, 5)) & "." & DatePart("m", r_data(i, 5)) & "." & DatePart("yyyy", r_data(i, 5))
r_data(i, 62) = Application.CountIfs(r_data(2, 41), r_data(2, strcount), r_data(i, 41), _
r_data(2, 34), r_data(strcount, 34), r_data(i, 34), r_data(2, 3), r_data(strcount, 3), r_data(i, 3))
Next i
End Sub
Изменено: antontanachev - 30.07.2019 12:56:55(Приложил пример, и предложил название темы: Не работает функция Application.CountIfs внутри массива)
Добрый день! Задача такая: Нужно создать несколько сводных таблиц на новом листе по одному источнику, и подключить к этим сводам срезы.
Я всё сделал, всё работает, но возникла проблема решение которой не нашёл нигде. Когда я пытаюсь подключить таблицы к срезу, VBA даёт ошибку (в примере это последняя строчка кода), как будто бы срез не видит вторую таблицу, либо же воспринимает её как из другого источника. Что делать не знаю. Кто-нибудь сталкивался с подобным? Как можно через VBA к нескольким сводным таблицам подключить срезы?
Добрый день! Есть много-много графиков в файле, которые каждую неделю дополняются данными новой недели. В примере оставил 3 штуки из одной таблицы. Нужен макрос, который будет всю коллекцию графиков на всех листах обновлять путём смещения диапазона на одну ячейку вправо. У каждого графика от 2 до 5 диапазонов по которым строится.
Не могу сообразить как это сделать. Поможете? Хочу именно макросом, т.к. мне будет удобнее настроить кнопку на какую-нибудь вкладку
_______ Уровень владения макросами: осознанный дилетант умеющий иногда редактировать код под свои задачи