powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проблема при выборке данных из сводной таблицы
6 сообщений из 6, страница 1 из 1
Проблема при выборке данных из сводной таблицы
    #33162847
Rustam-27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Суть: в отчетной таблице прогоняется область данных на предмет наличия ячеек закрашенных в определенный цвет (допустим, сиреневый) №39 и если такие ячейки находятся, то в данную ячейку заносится соответствующее значение из сводной таблицы на другом листе.

Механизм реализован, но очень некрасиво:
1. Выбор ячейки с цветом 39
2. В соответствии с этой ячейкой определяется по шапке таблицы соотвествующий контрагент, элемент и подразделение и заносятся в ячейки на самом рабочем листе, соответственно в ячейки A1, B1, C1.
3. Далее в нашу ячейку подставляется формула «получить данные сводной таблице» с соотвествующей ссылкой на сводную таблицу и ячейки A1, B1, C1.
4. Ячейка копируется сама в себя значением.
5. Ячейки A1, B1, C1 очищаются и переход к пункту 1 для поиска следующей ячейки.

Результат: Работает, но очень долго считает – около 6 минут на P-4-2800.

Собственно сам вопрос: Как можно избавиться от промежуточного вывода переменных на рабочий лист и формировать формулу в пункте 3 используя переменные макроса, а не ячейки рабочей книги?
Есть ли более быстрое копирование ячейки значением кроме selection copy?


Sub Sb()

Application.ScreenUpdating = False

Dim n As Long
Dim m As Long
Dim f As Variant

For n = 6 To 96 Step 1
For m = 7 To 1350 Step 1
Cells(m, n).Select
f = Cells(m, n).Interior.ColorIndex
If f = 39 Then GoTo kontr:
GoTo nexter:

kontr:

Cells(m, n) = 0
Range("A1") = Cells(m, 3)
Range("B1") = Cells(m, 1)
Range("C1") = Cells(4, n)
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(GETPIVOTDATA(""Сумма"",Сводн!R3C1,""Контрагент"",R1C1,""Элемент"",R1C2,""Подразделение"",R1C3))=False, GETPIVOTDATA(""Сумма"",Сводн!R3C1,""Контрагент"",R1C1,""Элемент"",R1C2,""Подразделение"",R1C3),0)"

Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

nexter:
Next m
Next n
Range("A1").Clear
Range("B1").Clear
Range("C1").Clear
Application.ScreenUpdating = True
End Sub


Спасибо!!!
...
Рейтинг: 0 / 0
Проблема при выборке данных из сводной таблицы
    #33164660
Дмит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так (код проверил, только на пустом листе-5sec):
Sub Sb()
Application.ScreenUpdating = False

Dim n As Long
Dim m As Long
Dim f As Variant

For n = 6 To 96
For m = 7 To 1350
With Cells(m, n)
f = .Interior.ColorIndex
If f = 39 Then
.Value = 0
Range("A1") = Cells(m, 3)
Range("B1") = Cells(m, 1)
Range("C1") = Cells(4, n)
.FormulaR1C1 = _
"=IF(ISERROR(GETPIVOTDATA(""Сумма"",Сводн!R3C1,""Контрагент"",R1C1,""Элемент"",R1C2,""Подразделение"",R1C3))=False, GETPIVOTDATA(""Сумма"",Сводн!R3C1,""Контрагент"",R1C1,""Элемент"",R1C2,""Подразделение"",R1C3),0)"
Application.CutCopyMode = False
.Copy
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End If
End With
Next
Next
Range("A1:C1").Clear
Application.ScreenUpdating = True
End Sub
...
Рейтинг: 0 / 0
Проблема при выборке данных из сводной таблицы
    #33165305
Rustam-27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.

Секунд 20 выиграл.

Теперь пытаюсь в формулу getpivotdata вместо ссылок на ячейки a1-с1 воткнуть готовые переменные...
...
Рейтинг: 0 / 0
Проблема при выборке данных из сводной таблицы
    #33166800
Дмит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю так:

Sub Sb()
Application.ScreenUpdating = False

Dim n As Long
Dim m As Long
Dim f As Variant

For n = 6 To 96
For m = 7 To 1350
With Cells(m, n)
f = .Interior.ColorIndex
If f = 39 Then
.Value = 0
.FormulaR1C1 = _
"=IF(ISERROR(GETPIVOTDATA(""Сумма"",Сводн!R3C1,""Контрагент"",R" & m & "C3,""Элемент"",R" & m & "C1,""Подразделение"",R4C" & n & _
"))=False, GETPIVOTDATA(""Сумма"",Сводн!R3C1,""Контрагент"",R" & m & "C3,""Элемент"",R" & m & "C1,""Подразделение"",R4C" & n & "),0)"
Application.CutCopyMode = False
.Copy
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End If
End With
Next
Next
Application.ScreenUpdating = True
End Sub

Принцип понятен. Вместо ссылки на ячейку A1(R1C1) ставим R" & m & "C3,
не присваивая Range("A1") = Cells(m, 3)
...
Рейтинг: 0 / 0
Проблема при выборке данных из сводной таблицы
    #33200435
Rustam-27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, в общем вопрос решен.
"Нормальное" быстродействие достигнуто.
...
Рейтинг: 0 / 0
Проблема при выборке данных из сводной таблицы
    #33202001
Rustam-27Спасибо, в общем вопрос решен.
"Нормальное" быстродействие достигнуто.
Какой выход нашел?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проблема при выборке данных из сводной таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]