|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
Добрый вечер! Помогите, пожалуйста, подскажите как можно ускорить работу моего макроса, как оптимизировать, очень долго работает. В таблице с масками примерно 150 масок и таких таблиц 4, а данные, которые обрабатываю содержат в районе 80 000 строк. Разбираю файл остатки на счете, и по маскам разбрасываю по группам приход/расход, суммируя итоговые суммы по маскам одной группы. этот кусок для прихода и подобный для расхода. Код: plaintext 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2011, 17:05 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
> Автор: mimozka А кто такие reDtF и иже с ними? Начни с того, что замени все такие записи ThisWorkbook.Worksheets("маски_приход_ГО") на переменные типа Worksheet и испульзуй With. И используй тэг [ S R C ] Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2011, 17:26 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
mimozkaподскажите как можно ускорить работу моего макроса, как оптимизировать, очень долго работает. В таблице с масками примерно 150 масок и таких таблиц 4, а данные, которые обрабатываю содержат в районе 80 000 строк. Разбираю файл остатки на счете, и по маскам разбрасываю по группам приход/расход, суммируя итоговые суммы по маскам одной группы. этот кусок для прихода и подобный для расхода. В любой БД, закачав в нее таблицу екселя, желаемый результат можно получить запросом во вполне допустимое время. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2011, 18:57 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
mimozka, первый цикл оптимизируется доволно просто - нужно его закомментировать. Заодно и от ошибки 'Type mismatch' при попытке конвертировать пустую строку в Double избавитесь. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2011, 23:33 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
mimozka, принимая во внимание предидущий шаг, приходим к выводу, что цикл While ....Wend в цепких объятьях If ... Then ... End If никогда не будет выполняться: Код: plaintext 1. 2. 3. 4. 5.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
2 All: поправьте, если ошибся. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2011, 23:50 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
Игорь Горбонос> Автор: mimozka А кто такие reDtF и иже с ними? Dim reDtF As New regexp - это регулярное выражение p.s. Всем отписавшимся Спасибо!!! в течении дня опробую, потом отпишусь. Спасибо! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 10:43 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
пробуй камнемmimozka, первый цикл оптимизируется доволно просто - нужно его закомментировать. Заодно и от ошибки 'Type mismatch' при попытке конвертировать пустую строку в Double избавитесь. не поправила из куска Расход, т.е. ячейка должна быть Cells(j, 5) -кредитовый оборот, ошибки не будет. sumF = sumF + CDbl(ThisWorkbook.Worksheets("данные1").Cells(j, 5).Value), как так просто закомментировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 11:40 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
Кстати, все эти бесконечные And надо тоже убрать и заменить их отдельными конструкциями If ... End If Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 14:10 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
Хотя я упустил один момент, про который уже упоминали - Вы в любом случае хотите преобразовать в число пустую строку. Код: plaintext 1.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 14:17 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
The_PristХотя я упустил один момент, про который уже упоминали - Вы в любом случае хотите преобразовать в число пустую строку. Я же написала перед Вашими сообщениями, что не (j, 4), а (j, 5), т.е. я проверяю, что (j, 5) не пуст, а (j, 4) пуст и преобразую (j, 5) в CDbl. (j, 4) -Дебет (j, 5) -Кредит, т.е. я смотрю кредитовый оборот в выписке. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 14:59 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
mimozka, Так ведь еще проце: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 15:03 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
К тому же у Вас повторяются проверки значений - это тоже отнимает время. Да, но теперь пропала проверка по DtGO и KtGO, у меня 2 таблицы масок для прихода: дебет, кредит для филиалов и дебет, кредит для головы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 15:14 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
The_PristЯ сообщение читал, но не очень понял, что Вы там где забыли заменить, т.к. кусок Расход не очень-то в глаза бросается. Приход есть - а Расход не видать :-) А Расхода и нет :), я его не выставляла, он есть у меня, он подобный приходу, который я делала копипастом и не поправила. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 15:24 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
Ну да...Действительно. Может так? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 15:28 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
The_Prist, но это не весь Расход, который у меня был, так? потому как если сумму обнулять в самом начале, а потом идти по всем маскам, то у меня в итоге будет всего 2 суммы sumGO и sumF, а в моем случае надо еще разбивать по группам, т.е. допустим 5 масок это 1-я группа, 4 маски-2 группа и т .д. и суммы по каждой группе должны быть в своей ячейке итоговой таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 15:45 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
mimozka, заинтриговали. Маски действительно настолько сложные, что требуются регуляярные выражения? Может быдет достаточно LIKE ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 16:05 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
mimozka, если честно, то с файлом было бы проще разобраться, нежели с НЕПОЛНЫМ вашим кодом. Вот что-то такое получилось - но проверить не на чем. Код: plaintext 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 16:22 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
пробуй камнемmimozka, заинтриговали. Маски действительно настолько сложные, что требуются регуляярные выражения? Может быдет достаточно LIKE ? например 47423810[0-9]{3}02[0-9]{7} или [0156789][12345689][01356789][13456789][02345689][0-9]{15} :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 16:34 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
mimozka, убедили. 2 The_Prist : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 16:42 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
пробуй камнем, Без примера данных или полного кода трудно это обойти. Т.к. надо в массив загонять сами значения и затем на лист выгружать. А для этого надо хотя бы видеть куда . Поэтому эти две строки и остались такими, ибо по другому значения на лист по вышеуказанным причинам не внести. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 16:45 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
The_Prist, лист "Данные1" бик дт кт № п/п 028200003 42305081000000030000 40101810100000010001 500.00 65537 028200001 41506081000000000000 40101810100000010001 500.00 65538 и т.д. лист "маски_приход_ГО" группа маска по ДТ маска по КТ наименование 1 [0-9]{20} 473[0-9]{17} Возврат кредитов 7 [0-9]{20} 47407810[0-9]{3}34[0-9]{7} Банковские конвертации лист "Свод" Группа Наименование группы (статья прихода) Сумма приход 1 Возврат кредитов приход 2 Возврат выданных МБК ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 17:33 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
млин, наименования столбцов съехали ( ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 17:39 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
млин, наименования столбцов съехали (( ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 17:40 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
mimozka028200003 42305081000000030000 40101810100000010001 500.00 65537 028200001 41506081000000000000 40101810100000010001 500.00 65538Если 500.00 это сумма, и все суммы у Вас записаны с разделителем дробной части точка, то эти строки: Код: plaintext
Код: plaintext
А вообще под примером я имел ввиду файл Excel , а не строки, из него скопированные. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 17:44 |
|
Как ускорить работу макроса по сбору данных с помощью регулярных выражений?
|
|||
---|---|---|---|
#18+
2 The_PristThe_Pristпробуй камнем, ... Т.к. надо в массив загонять сами значения и затем на лист выгружать. А для этого надо хотя бы видеть куда . ... Откуда: The_Prist Код: plaintext 1. 2. 3. 4. 5. 6.
2 mimozka, можно оптимизировать при условии, что маски не пересекаются, т.е. если значение данные1.Cells(j, 2) совпало с маской маски_приход_Ф.Cells(1, 2) , то ни с какими другими масками оно не совпадёт. В этом случае соответствия маске, у значения выставляется флаг "уже распределили". При проходе со следующими масками, если флаг "уже распределили" установлен, то значение не тестируется на соответствие маске. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2011, 18:05 |
|
|
start [/forum/topic.php?fid=60&fpage=103&tid=2158780]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 139ms |
0 / 0 |