Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 12.06.2016
Сообщений: 2
1

работа с большим объемом данных

14.09.2010, 14:31. Показов 1097. Ответов 1
Метки нет (Все метки)

большим я называю от 300000Rx50C
судя по информации из диспетчера задач происходит накопление памяти что приводит к постепенному торможению выполнения макроса
в связи с чем возникает вопрос а можно ли как то избежать этого накопления
и в целом можно ли что нить придумать для ускорения работы макроса
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
Sub Ýêñòðàïîëÿöèÿ101()
'
' Ýêñòðàïîëÿöèÿ101 Ìàêðîñ
'
 
'
    Application.ScreenUpdating = False
    
    'ActiveWindow.DisplayHeadings = True
    'ActiveWindow.DisplayGridlines = True
    'ActiveSheet.Name = "Äèíàìèêà"
    Range("A1").Select
    Dim myChart As Chart
    Dim mySeries As Series
    Set myChart = Sheets("Äèíàìèêà").Shapes.AddChart.Chart
    myChart.SetSourceData Source:=Range("'Äèíàìèêà'!" + Range("D12:AT12").Address)
    Set mySeries = myChart.SeriesCollection(1)
    myChart.ChartType = xlLine
    mySeries.Trendlines.Add(Type:=xlLinear, DisplayEquation:=True).Select
    mySeries.Name = "Âðåìåííîé Ðÿä"
    'Set myChart = Nothing
    'Range("D12").Select
    'ActiveWindow.FreezePanes = True
    'Range("D10").Select
    'ActiveCell.FormulaR1C1 = "1"
    'Range("E10").Select
    'ActiveCell.FormulaR1C1 = "2"
    'Range("D10:E10").Select
    'Selection.AutoFill Destination:=Range("D10:AY10"), Type:=xlFillDefault
    'Range("D10:AY10").Select
    'Columns("AU:AU").Select
    'Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    'Range("AU11").Select
    'Selection.Interior.Pattern = xlNone
    'ActiveCell.FormulaR1C1 = "Ëèíåéíàÿ"
    'Range("AV11:AZ11").Select
    'Selection.Merge
    'ActiveCell.FormulaR1C1 = "Ïðîãíîç"
    'Range("AU12").Select
    Dim a As String
    Dim b As String
    Dim c As Integer
    Dim i As Long, j As Long
    a = Range("D12:AT12").Address
    b = Range("AU12").Address
    For i = 12 To Range("C12").End(xlDown).Row
        c = 0
        With Range(a)
            For j = 1 To .Count
                If Not .Cells(1, j) = Empty Then
                   c = c + 1
                End If
            Next
        End With
        If c > 1 Then
            
            myChart.SetSourceData Source:=Range("'Äèíàìèêà'!" + a)
            With mySeries
                .Name = "Âðåìåííîé Ðÿä"
                .Values = "='Äèíàìèêà'!" + a
                .Trendlines(1).DataLabel.Select
            End With
            eq = Selection.Text
 
            TLEqn = eq
            'remove the 'y' from the start of the trend line equation
            TLEqnMod = Right(TLEqn, Len(TLEqn) - 1)
            'remove spaces from the string
            TLEqnMod = Trim(TLEqnMod)
            'find the position of =, x and + in the equation
            TLXPos = InStr(1, TLEqnMod, "x", vbTextCompare)
            TLEqualPos = InStr(1, TLEqnMod, "=", vbTextCompare)
            TLMinusPos = InStr(TLXPos + 1, TLEqnMod, "-", vbTextCompare)
            TLAddPos = InStr(TLXPos + 1, TLEqnMod, "+", vbTextCompare)
            
            If TLXPos = 0 Then
                TLCoeff = "0"
                TLConst = Trim(Mid(TLEqnMod, TLEqualPos + 1, Len(TLEqnMod) - TLAddPos))
            ElseIf TLXPos <> 0 And TLMinusPos = 0 Then
                TLCoeff = Trim(Mid(TLEqnMod, TLEqualPos + 1, TLXPos - TLEqualPos - 1))
                TLConst = Trim(Mid(TLEqnMod, TLAddPos + 1, Len(TLEqnMod) - TLAddPos))
            ElseIf TLXPos <> 0 And TLMinusPos <> 0 Then
                TLCoeff = Trim(Mid(TLEqnMod, TLEqualPos + 1, TLXPos - TLEqualPos - 1))
                TLConst = Trim(Mid(TLEqnMod, TLMinusPos, Len(TLEqnMod) - TLMinusPos + 1))
            End If
            
            If Len(TLEqnMod) = TLXPos Then
                TLConst = "0"
            End If
            
 
            Range(b).Value = eq
                
                If TLCoeff = "-" Then
                    TLCoeff = "-1"
                End If
                If TLCoeff = "" Then
                    TLCoeff = "1"
                End If
                
                TLCoeff = CDbl(TLCoeff)
                TLConst = CDbl(TLConst)
                
                With Range(Range(b).Offset(0, 1).Address + ":" + Range(b).Offset(0, 5).Address)
                   For j = 1 To 5
                       If (TLCoeff * Cells(10, 47 + j) + TLConst) < 0 Then
                           .Cells(1, j) = ""
                       Else
                           .Cells(1, j) = TLCoeff * Cells(10, 47 + j) + TLConst
                       End If
                   Next
                End With
        End If
        
        b = Range(b).Offset(1, 0).Address
        a = Range(a).Offset(1, 0).Address
        Application.StatusBar = "Ýêñòðàïîëèðîâàíèå. ÂÛÏÎËÍÅÍÎ: " & i * 100 / Range("C12").End(xlDown).Row & "%"
    Next
    Columns("AU:AU").EntireColumn.AutoFit
End Sub
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.09.2010, 14:31
Ответы с готовыми решениями:

Работа с большим объемом данных
Всем привет! Работа с большим объемом данных заставляет задуматься над всевозможными способами...

Аналог InStr, но который работал бы быстрее с большим объемом данных
Есть ли аналог InStr, но который работал бы быстрее с большим объемом данных? P.S. надо в цикле...

Работа с большим объемом данных
Коллеги, подскажите по такому вопросу. Есть выборка, несколько миллионов записей. Каким образом...

Работа с большим объемом данных
Имеется загруженное изоображение с помощью opencv. Задача: вывести цвета изображения с из...

1
436 / 143 / 9
Регистрация: 12.01.2009
Сообщений: 678
Записей в блоге: 1
14.09.2010, 17:28 2
Для начала выложите файл, чтобы легче было разбираться!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2010, 17:28

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Работа с большим объемом данных
Всем привет! Всегда создавал коллекцию List&lt;List&lt;xxx&gt;&gt;, заносил в нее данные из txt файла, а потом...

Работа с большим объёмом данных
Приветствую всех! На днях столкнулся с такой проблемой: необходимо отправить на сервер файл...

QtSerialPort Работа с большим объемом данных
Добрый день. Я пишу приложение, которое работает с последовательным портом при помощи...

Cron задание, работа с большим объемом данных
К примеру есть скрипт, который должен делать коррекцию данных на сайте. Данных много и к примеру...

Как организована работа с большим объемом данных
Программа выдаёт stack overflow при запуске, рекурсию не использую. Кто-нибудь сталкивался с...

Работа с большим объемом данных в реальном времени
Добрый день! Недавно решил перевести один проект с Delphi на C#. Проект связан с получением и...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.