Страницы: Пред. 1 2 3 4 5
RSS
RunTime Error 7 - Out of Memory
 
Цитата
SvetaS_love написал:
с оценки возможности и скорости выполнения нечёткого поиска по достаточно большому числу полей группировки и надо было начинатьАндрей VG, так я и начинала
Следовательно, вам осталось соединить это вместе и оценить, насколько это будет быстрее, чем ручная работа.

Тогда, остаётся вам пожелать успехов!
 
очень смущает функция #119... зачем заставлять её работать с объектом Range?.. почему бы не переделать её для работы с Array? (чтобы прибавить скорости)
Изменено: JeyCi - 16.09.2015 10:29:47
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
JeyCi, так я пыталась уйти от массива, так как проблемма на определении динамического массива "RunTime Error 7 - Out of Memory"
Я отредактировала все коментарии
Изменено: SvetaS_love - 16.09.2015 11:23:19
одинокий странник
 
вы бы отредактировали те посты - коды вставили бы при русской раскладке клавиатуры - так и комменты были бы лучше понятны, что вы там делали... а так, вникать в весь код - времени нет... и вы проблему не проясняете: уже ведь говорили - или взамен массива можно использовать словарь (когда размерность неизвестна изначально) и словарь можно передать в функцию... или как, The_Prist ещё в самом начале говорил (насколько помню) - по частям на более мелкие массивы... вобщем, пути оптимизации искать, если общий алгоритм устраивает... а замена Range на Array или Dictionary или Collection - это всегда первое, что напрашивается... если вы это не сделаете, то при такой многоплановой постановке задачи и таком однозначном коде вникать во все ваши коды, думаю, никто не станет... кроме вас... успехов!.. или оптимизация или другой алгоритм или заказ Работы...
p.s. я не спрашивала, почему вы пытаетесь уйти от массивов, а спросила, почему считаете, что Range может работать быстрее (ваше право) - я такого не видела в природе... скорее ваш вопрос к вам - что там за такой страшный массив, что на нём всё вешается - значит с массивом работать по-другому (как говорил, The_Prist... или словари или коллекции - как уже сказала)  - ответ #123 не ответ на #122 - а #122 просто совет для скорости  8)  (как реализовывать - не возьмусь - причина: время и объём работы и отсутствие мощностей вашего железа для объёма и нюансов вашего рабочего файла и отсутствие файла и знаний украинского языка у меня)  
Изменено: JeyCi - 16.09.2015 12:08:53
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Простейший каркас для групповых полей Группа, Наименование и вычисляемого поля Вес
Создаём класс ProductPivotRow с полями
Код
Public Group As String
Public Name As String
Public Weight As Double

Далее код сбора информации для сводной
Код
Public Sub CreatePivot()
    Dim pRow As ProductPivotRow, sKey As String, ProductInfos() As String
    Dim vData As Variant, sProductInfo As Variant, i As Long, vWeight As Double
    Dim ProductPivot As New Scripting.Dictionary, sGroup As String, sName As String
    'получим данные ячеек столбца данных о продуктах с разделителями ;
    vData = ActiveSheet.Range("A2:A100").Value
    For i = LBound(vData) To UBound(vData)
        'получаем массив данных о продуктах, разбив по разделителю ;
        ProductInfos = Split(vData(i, 1), ";")
        For Each sProductInfo In ProductInfos
            'создать ключ по группе продукта и его названию
            sGroup = FindProductGroup(sProductInfo)
            sName = FindProductName(sProductInfo)
            sKey = sGroup & "|" & sName
            If ProductPivot.Exists(sKey) Then
                With ProductPivot(sKey)
                    'добавляем вес продукта
                    .Weight = .Weight + GetProductWeight(sProductInfo)
                End With
            Else
                'иначе создать новый объект группировки по группе и наименованию
                Set pRow = New ProductPivotRow
                pRow.Group = sGroup
                pRow.Name = sName
                pRow.Weight = GetProductWeight(sProductInfo)
                ProductPivot.Add sKey, pRow
            End If
        Next
    Next
    'далее вывод данных ProductPivot в массив и на лист (это просто - перебор Items для Dictionary и число элементов легко находится поиском)
End Sub

Собственно, нужно написать (насколько понял - они уже есть) функции поиска значений Группы FindProductGroup, Наименования FindProductName и Веса GetProductWeight
Изменено: Андрей VG - 16.09.2015 11:20:28
 
Добрый день!

У меня появляется ошибка "out of memory" когда я на работе запускаю макрос и присваиваю массиву arr() = Range("A1:CA70000").Value для дальнейшей обработки...
приходится закрывать все другие программы, окна...и вообще перезагружать компьютер. Тогда макрос не жалуется на нехватку памяти!...
 
Беда... Поделились? А что от форума хотите? Помощи?

Создайте тему, покажите файл-пример с кодом.
 
Ves, а зачем Вам такой большой массив?
Если и впрямь такой нужен - закупайте память... или обрабатывайте частями.
Изменено: Hugo - 07.11.2016 23:13:47
Страницы: Пред. 1 2 3 4 5
Наверх