Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2011, 20:26   #11
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Немного подправил Ваш код
Код:
Sub Кнопка2_Щелчок()

    Dim n As Integer
    Dim g As Integer
    g = 2
    n = 2
    Do Until IsEmpty(Cells(n, 2)) = True
        g = n
        Do
            If Cells(n, 1) = Cells(g, 2) Then
                Cells(n, 5) = Cells(g, 3)
                GoTo Flag
            Else: Cells(n, 5) = 0
            End If
            g = g + 1
        Loop Until IsEmpty(Cells(g, 1)) = True
Flag:
        n = n + 1
    Loop
End Sub
но со словарями, как показал Hugo121 работать будет заметно быстрее.
Вложения
Тип файла: zip task1_11.zip (62.8 Кб, 8 просмотров)
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499

Последний раз редактировалось VictorM; 27.11.2011 в 20:27. Причина: дабавил файл
VictorM вне форума Ответить с цитированием
Старый 27.11.2011, 22:08   #12
Onni
Форумчанин
 
Аватар для Onni
 
Регистрация: 28.12.2008
Сообщений: 134
По умолчанию

Цитата:
Сообщение от VictorM Посмотреть сообщение
Немного подправил Ваш код
Код:
Sub Кнопка2_Щелчок()

    Dim n As Integer
    Dim g As Integer
    g = 2
    n = 2
    Do Until IsEmpty(Cells(n, 2)) = True
        g = n
        Do
            If Cells(n, 1) = Cells(g, 2) Then
                Cells(n, 5) = Cells(g, 3)
                GoTo Flag
            Else: Cells(n, 5) = 0
            End If
            g = g + 1
        Loop Until IsEmpty(Cells(g, 1)) = True
Flag:
        n = n + 1
    Loop
End Sub
но со словарями, как показал Hugo121 работать будет заметно быстрее.
Заметно? наверно очень заметно быстрее , потому как ошибки исправила запустила и на кнопку нажимаю и все... виснет все. А как со словарями?
Onni вне форума Ответить с цитированием
Старый 27.11.2011, 22:31   #13
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну я пример запустил - не виснет, работает.
Но насколько продуктивно, и не зациклилось ли - не смотрел...
А как со словарями - проверьте, весь код есть.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 27.11.2011, 22:37   #14
Onni
Форумчанин
 
Аватар для Onni
 
Регистрация: 28.12.2008
Сообщений: 134
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Чувствую, можно сделать быстро на словаре/коллекции и массивах, но без примера делать - дело не благодарное в большинстве случаев...

Я про вот эти словари/коллекции говорю...
Это что такое?


Я про замкнутый цикл почему то не подумала. Сейчас еще раз посмотрю.
Onni вне форума Ответить с цитированием
Старый 27.11.2011, 22:43   #15
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Замкнутого цикла нет.
Проверьте на листе Example
А вот на рабочем листе, да, работает ОЧЕНЬ долго, я сам подумал сначала что зависло все.
так что ИМХО следует применить код от Hugo121
с этим кодом у меня все сработало "на раз" ))
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 01.12.2011, 11:31   #16
Onni
Форумчанин
 
Аватар для Onni
 
Регистрация: 28.12.2008
Сообщений: 134
По умолчанию

Цитата:
Сообщение от VictorM Посмотреть сообщение
Замкнутого цикла нет.
Проверьте на листе Example
А вот на рабочем листе, да, работает ОЧЕНЬ долго, я сам подумал сначала что зависло все.
так что ИМХО следует применить код от Hugo121
с этим кодом у меня все сработало "на раз" ))
Да, с кодом Hugo121 все быстрее работает, но честно скажу никто не поверит(да и я не поверила бы) что код написала я. Hugo121, искренне большое спасибо! Я бы и рада восопльзоваться твоей помощью, но мы такие ключевые слова ещё в глаза, скажем так, не видели)))

У меня теперь другой вопрос нельзя ли как либо ускорить работу моей программы?
Onni вне форума Ответить с цитированием
Старый 01.12.2011, 12:19   #17
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Циклы, вещь сама по себе очень медленная, что особенно заметно на больших объемах данных.
Потому и был предложен метод словари/коллекции.
А ускорить...
Можно попробовать вставить в начало процедуры
Код:
Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
и в конце - вернуть все назад
Код:
Application.ScreenUpdating = False
    Application.Calculation = xlCalculationAutomatic
попробуйте.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 01.12.2011, 12:34   #18
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Проверил
макрос в первоначальном виде из поста №11 в файле task1_11.xls на листе Data работал 5мин.45сек. (еле дождался )
С добавление вышеуказанных строк сработал за 3мин.40сек.
так что, ускорение все-таки есть, хотя, конечно, все равно ОЧЕНЬ медленно
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 01.12.2011, 13:01   #19
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Если это учебная задача - зачем столько данных? Сократите на 90%.
Если задача рабочая - изучайте словари/коллекции.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 01.12.2011, 13:30   #20
Onni
Форумчанин
 
Аватар для Onni
 
Регистрация: 28.12.2008
Сообщений: 134
По умолчанию

Цитата:
Сообщение от VictorM Посмотреть сообщение
Проверил
макрос в первоначальном виде из поста №11 в файле task1_11.xls на листе Data работал 5мин.45сек. (еле дождался )
С добавление вышеуказанных строк сработал за 3мин.40сек.
так что, ускорение все-таки есть, хотя, конечно, все равно ОЧЕНЬ медленно
а у меня все повисло, и программа не отвечает)

Hugo121, видимо придется более близкое знакомство устроить с коллекциями. Суть я вроде поняла. Попробую...
Onni вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен Макрос для ввода данных в перую пустую ячейку диапазона valik65 Microsoft Office Excel 4 16.12.2010 16:01
Вернуть пустую ячейку Ruben Microsoft Office Excel 3 05.02.2010 16:20
Копирование данных на первую пустую ячейку kzld Microsoft Office Excel 8 15.07.2009 14:06
вставка формулы в ячейку (vba) pride Microsoft Office Excel 5 13.07.2009 09:26
Как в функции СЧЁТЕСЛИ указать критерий в виде ссыки на ячейку? CaustiC Microsoft Office Excel 1 05.12.2008 07:16