|
|
|
Проблема при выборке данных из сводной таблицы
|
|||
|---|---|---|---|
|
#18+
Суть: в отчетной таблице прогоняется область данных на предмет наличия ячеек закрашенных в определенный цвет (допустим, сиреневый) №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 Спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2005, 11:09:56 |
|
||
|
Проблема при выборке данных из сводной таблицы
|
|||
|---|---|---|---|
|
#18+
Попробуй так (код проверил, только на пустом листе-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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2005, 21:35:43 |
|
||
|
Проблема при выборке данных из сводной таблицы
|
|||
|---|---|---|---|
|
#18+
Спасибо. Секунд 20 выиграл. Теперь пытаюсь в формулу getpivotdata вместо ссылок на ячейки a1-с1 воткнуть готовые переменные... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2005, 11:06:31 |
|
||
|
Проблема при выборке данных из сводной таблицы
|
|||
|---|---|---|---|
|
#18+
Я думаю так: 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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2005, 17:32:43 |
|
||
|
Проблема при выборке данных из сводной таблицы
|
|||
|---|---|---|---|
|
#18+
Спасибо, в общем вопрос решен. "Нормальное" быстродействие достигнуто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2005, 21:10:29 |
|
||
|
|

start [/forum/topic.php?fid=61&fpage=355&tid=2185868]: |
0ms |
get settings: |
6ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
23ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 318ms |

| 0 / 0 |
