Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 12.06.2015
Сообщений: 93
1

Добавление в сводной таблице колонки, которая равняется сумме всех колонок минус предпоследняя колонка

28.09.2018, 19:28. Показов 1695. Ответов 3

Author24 — интернет-сервис помощи студентам
Помогите добавить в сводной таблице колонку, которая равняется сумме всех колонок у всех валютах минус колонка в валюте 980.
ТО есть нужно отнять от суммы всего сумму в валюте "980".
На данный момент у сумму всего попадает 3 валюты '643'+'840'+'978'", но может быть в другой день не 3 валюты, а 6 кодов валют : '643'+'840'+'978'+'156'+'826'+'985'".

У меня хватает ума только сложить конкретные валюты (сегодня их три '643'+'840'+'978'"), но как реализовать:

1) условие чтобы суммировались все валюты "= '643'+'840'+'978'+'156'+'826'+'985'" в любом случае, даже если в массиве данных некоторых из валют нет.

или
2) Или ∑ всех колонок (сегодня может быть 3, завтра 6 колонок и тюдю) - минус колонка "980"

Visual Basic
1
2
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Sub Add_колонка()
 
'Удаление листа сводной таблицы (при его наличии)
On Error Resume Next
 Application.DisplayAlerts = False
 Sheets("Сводная таблица").Delete
On Error GoTo 0
 
 
Dim PTcache As PivotCache
Dim PT As PivotTable
 
Set WS1 = Sheets(1)
 
' Создание кеша сводной таблицы
Set PTcache = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=Range("A:G").CurrentRegion.Address)
 
     
     ' Добавление нового рабочего листа
Worksheets.Add
ActiveSheet.Name = "Сводная таблица"
ActiveWindow.DisplayGridlines = False
     
     Sheets("Сводная таблица").Select
     
     ' Создание сводной таблицы на основе данных кеша
Set PT = ActiveSheet.PivotTables.Add(PivotCache:=PTcache, _
TableDestination:=Range("A13"), _
TableName:="BudgetPivotToDay")
 
 
With PT
' Добавление полей
.PivotFields("Код валюты").Orientation = xlColumnField
.PivotFields("Балансовый счет").Orientation = xlRowField
.PivotFields("Эквивалент").Orientation = xlDataField
.DisplayFieldCaptions = False
.RowGrand = True
.ColumnGrand = True
 
 
End With
     
         On Error Resume Next
  
           ActiveSheet.PivotTables("BudgetPivotToDay").PivotFields("Код валюты").CalculatedItems. _
          Add "Валюта", _
        "= '643'+'840'+'978'"
 
'--- так не срабатывает, так как нет валют '156'+'826'+'985'
 
   ---        ActiveSheet.PivotTables("BudgetPivotToDay").PivotFields("Код валюты").CalculatedItems. _
   ---       Add "Валюта", _
   ---     "= '643'+'840'+'978'+'156'+'826'+'985'"
---  ???????????????????????????
 
   ActiveSheet.PivotTables("BudgetPivotToDay").PivotCache.Refresh
   Calculate
 
 
End Sub
Вложения
Тип файла: zip 1.zip (789.7 Кб, 4 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2018, 19:28
Ответы с готовыми решениями:

Разные имена колонок в таблице и сводной таблице
Здравствуйте. Есть некая таблица. При построении по этой таблице сводной таблицы, в сводной...

2 колонки, где 1 колонка 2 строки, и 2-я колонка 1 строка высотой первой колонки
вот есть такая табличка <table border="1"> <tr> <td...

Отчет по сумме в сводной таблице
Добрый день. Одну таблицу с помощью Linoge доделала. Теперь нужна помощь с другой таблицей. ...

Процедуры. Вычислить величину Z, которая равняется сумме минимальных элементов массивов
Заданы два массива - Х(10) и Y(12). Вычислить величину Z, которая равняется сумме минимальных...

3
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,086
29.09.2018, 13:21 2
Лучший ответ Сообщение было отмечено Heroes как решение

Решение

Возможно так:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
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
42
43
44
45
46
Sub Add_колонка()
    Dim PTcache As PivotCache
    Dim PT As PivotTable
    Dim s$, first As Boolean
        'Удаление листа сводной таблицы (при его наличии)
    On Error Resume Next
    Application.DisplayAlerts = False
    Sheets("Сводная таблица").Delete
    On Error GoTo 0
    Set WS1 = Sheets(1)
        ' Создание кеша сводной таблицы
    Set PTcache = ActiveWorkbook.PivotCaches.Create( _
    SourceType:=xlDatabase, _
    SourceData:=Range("A:G").CurrentRegion.Address)
        ' Добавление нового рабочего листа
    Worksheets.Add
    ActiveSheet.Name = "Сводная таблица"
    ActiveWindow.DisplayGridlines = False
    'Sheets("Сводная таблица").Activate
        ' Создание сводной таблицы на основе данных кеша
    Set PT = ActiveSheet.PivotTables.Add(PivotCache:=PTcache, _
    TableDestination:=Range("A13"), _
    TableName:="BudgetPivotToDay")
    With PT
        ' Добавление полей
        .PivotFields("Код валюты").Orientation = xlColumnField
        .PivotFields("Балансовый счет").Orientation = xlRowField
        .PivotFields("Эквивалент").Orientation = xlDataField
        .DisplayFieldCaptions = False
        .RowGrand = True
        .ColumnGrand = True
    End With
    On Error Resume Next
        'создание формулы для поля Валюты
    s = "= "
    first = True
    With ActiveSheet.PivotTables("BudgetPivotToDay").PivotFields("Код валюты")
        For Each x In .DataRange.Formula
            s = s & IIf(first, "", IIf(x = "980", "-", "+")) & "'" & x & "'"
            first = False
        Next
        .CalculatedItems.Add "Валюта", s
    End With
    ActiveSheet.PivotTables("BudgetPivotToDay").PivotCache.Refresh
    Calculate
End Sub
1
1 / 1 / 0
Регистрация: 12.06.2015
Сообщений: 93
30.09.2018, 14:40  [ТС] 3
Цитата Сообщение от toiai Посмотреть сообщение
Возможно так:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub Add_колонка()
    
        'создание формулы для поля Валюты
    s = "= "
    first = True
    With ActiveSheet.PivotTables("BudgetPivotToDay").PivotFields("Код валюты")
        For Each x In .DataRange.Formula
            s = s & IIf(first, "", IIf(x = "980", "-", "+")) & "'" & x & "'"
            first = False
        Next
        .CalculatedItems.Add "Валюта", s
    End With
    ActiveSheet.PivotTables("BudgetPivotToDay").PivotCache.Refresh
    Calculate
End Sub

То что надо,отлична.

Подскадите как на будущее читать поля, которые не знаю как называются в языке vba.
Например очень помогла строчка For Each x In .DataRange.Formula.
Как можно было узнать что все колонки в сводной таблице можно перебрать этой строчкой?
В каком справочнике есть описание DataRange.Formula?
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
30.09.2018, 20:07 4
Цитата Сообщение от Heroes Посмотреть сообщение
Как можно было узнать что все колонки в сводной таблице можно перебрать этой строчкой?
В каком справочнике есть описание DataRange.Formula?
- как вариант:
1
30.09.2018, 20:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.09.2018, 20:07
Помогаю со студенческими работами здесь

Добавление колонки в большой таблице
в таблице свыше 30млн записей и я хочу добавить один столбец численный , пишу в пхп админ запрос ...

Вычислить величину Z, которая равняется сумме минимальных элементов массивов, разделенной на двойное произведение индексов минимальных элементов
Заданы два массива - Х(10) и Y(12). Вычислить величину Z, которая равняется сумме минимальных...

Новая расчетная колонка сводной таблицы
Создал макросом сводную таблицу. Далее оставил только отдельные показатели в сводной таблице....

Проверить, равняется ли X сумме факториалов своих шестнадцатеричных цифр
Мы только начали изучать си . Можете написать код не используя функции ?Буду премного благодарен


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru