Excel VBA Loop Через сводную таблицу и выполнить расчет - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть сводная таблица, которая автоматически обновляется каждый раз, когда я обновляю набор данных для нашей базы данных mySQL в нашем офисе.

Мой файл Excel запускает запрос к базе данных mySQL и возвращает таблицу данных, и у меня естьдве сводные таблицы на отдельных листах, которые будут автоматически обновляться при каждом выполнении.Мой код для этого приведен ниже:

Sub UpdatePivots()
    ' This sub is intended to update all pivot charts in the by switching to the appropriate
    ' worksheet, locating the appropriate pivot table, and updating them.

    Dim ws As Worksheet
    Dim PT As PivotTable

    For Each ws In ActiveWorkbook.Worksheets '<~~ Loop all worksheets in workbook
        For Each PT In ws.PivotTables        '<~~ Loop all pivot tables in worksheet
            PT.PivotCache.Refresh
        Next PT
    Next ws
End Sub

Что я хочу сделать, чтобы рассчитать YIELD для некоторых полей в сводной таблице.В настоящее время таблица выглядит следующим образом: Example Sheet

Как вы можете видеть, я автоматически добавил в столбец "YIELD" и просто сделал:

=GETPIVOTDATA("Pass / Fail",$B$5,"Job ID","Job 1","Pass / Fail","Pass")/GETPIVOTDATA("Pass / Fail",$B$5,"Job ID","Job 1")

В идеале я хотел бы добавить в свой макрос UpdatePivots () автоматический расчет доходности (Pass / Grand Total) для каждой из перечисленных строк.

Размер этой таблицы может изменяться - иногда я просматриваю только 3 работы за данный месяц (как, например, сентябрь), в других случаях мой босс хочет, чтобы я составлял этот отчет за весь год, когда яможет иметь более 100 рабочих мест.Поэтому я хотел бы использовать псевдокод, который может выглядеть следующим образом:

Cell F6.Text = YIELD
<Apply Pivot Table Formatting to Cell F6>

for each row in pivottable {

    Cell Fx.Value = Pass / Grand Total

}

Кто-нибудь может мне помочь сделать это?Я пытался провести мозговой штурм на бумаге, но даже не знаю, с чего начать.

PS - Как мне получить сводную таблицу, чтобы остановить это ужасное форматирование и сохранить серые ячейки?Я хочу со временем добавить в чарты.

Спасибо !!

1 Ответ

0 голосов
/ 11 сентября 2018

Следующий код удовлетворяет мою потребность:

Sub CalculateYield()

    k = Cells(Rows.Count, 2).End(xlUp).Row
    For r = 9 To k
        Cells(r, 6).Formula = "=" & Cells(r, 3).Address(False, False) & "/" & Cells(r, 5).Address(False, False)
    Next

End Sub
...