|
|
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
В фирме 43 моб. телефона. Для удобства вместо длинных номеров (например 5264857) используем короткие (например 4987). Распечатка переговоров приходит ежемесячно на мыло с длинными номерами. Обычно от 18000 до 25000 звонков (строк) в формате EXCEL. Подстановку т.е. замену длинных номеров на короткие делаю в лоб в цикле ( 2 цикла, один вложен в другой). Т.е. на втором листе таблица соответствия длинный короткому. Код молотит 45-60 минут. Может есть идеи как заменять/подменять один текст на другой по другому, не тупым перебором? Ведь цикл происходит в среднем 43*20000 раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 12:18:28 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
Да, простой перебор работает очень долго, проверено. Воспользуйся методами .Find и .FindNext, для того чтобы найти длинные номера и заменить их короткими из таблицы соответсвия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 14:21:24 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
Мысли вслух: а формулами низя? ИМХО быстрее должно рулить... +вопрос:эхо отображение небось включено? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 14:54:40 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
А я подобную задачу решал так: Оба списка запихнул в массивы, их сравнил и прописал соответсвие. И взад выгрузил вместе с соответствием. Работает ужас какбыстро. Графический интерфейс же не привязан, все операции чисто в памяти проходят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 15:12:49 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
Letter_DА я подобную задачу решал так: Оба списка запихнул в массивы, их сравнил и прописал соответсвие. И взад выгрузил вместе с соответствием. Работает ужас какбыстро. Графический интерфейс же не привязан, все операции чисто в памяти проходят. Можно ПОПОДРОБНЕЕ. Или примерчик. Или на talgat@bsr.ee ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 16:11:54 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
SinnerМысли вслух: а формулами низя? ИМХО быстрее должно рулить... +вопрос:эхо отображение небось включено? Формулами не получилось. Что то громоздкое создал но толком не получилось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 16:13:25 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
Пользователь2Да, простой перебор работает очень долго, проверено. Воспользуйся методами .Find и .FindNext, для того чтобы найти длинные номера и заменить их короткими из таблицы соответсвия. Find использую в этой программке для определения конца списков ( распечатки и таблицы соответствия). А про findNext даже и не слыхал. Ща будем смотреть ! СпасибА ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 16:17:58 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
По поводу Find: использую при поиске так например Set r = ActiveSheet.Range(B3:B1000") Set g = r.Find(What:=искомое_значение) А как используется FindNext ? В helpe чого то все о поиске файлов пишется. Подскажитееее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 17:08:22 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
talgatМожно ПОПОДРОБНЕЕ. Или примерчик. Или на talgat@bsr.ee Ну, я не знаю, как поподробнее. Типа описываешь массив по количеству ячеек, там (30000,3), например. Или через Redim Preserve, если не знаешь, сколько их там будет. По одному циклу загоняешь ячейки в массив. Имя_Массива(i,j)=Sheets("bla-bla").Cells(i,j) И второй массив так же. Далее все оперции с только массивами, можно даже легко сделать глобальную замену в модуле Sheets("bla-bla").Cells(i,j) на Имя_Массива(i,j) , синтаксис такой же! Чтобы не переписывать ручками. А в конце получившийся массив выгружаешь назад в ячейки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 17:21:05 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
Letter_D talgatМожно ПОПОДРОБНЕЕ. Или примерчик. Или на talgat@bsr.ee Ну, я не знаю, как поподробнее. Типа описываешь массив по количеству ячеек, там (30000,3), например. Или через Redim Preserve, если не знаешь, сколько их там будет. По одному циклу загоняешь ячейки в массив. Имя_Массива(i,j)=Sheets("bla-bla").Cells(i,j) И второй массив так же. Далее все оперции с только массивами, можно даже легко сделать глобальную замену в модуле Sheets("bla-bla").Cells(i,j) на Имя_Массива(i,j) , синтаксис такой же! Чтобы не переписывать ручками. А в конце получившийся массив выгружаешь назад в ячейки. Идею понял. Классный метод и очень простой. ВОПРОС ЗАКРЫТ. ВСЕМ БОЛЬШОЕ СПАСИБО !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 17:27:18 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
Код: 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. Попробуй с массивами, возможно время выполнения уменьшится. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 17:44:26 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
Private Sub CommandButton1_Click() Dim r As Range, g As Range Dim p As Variant '' определение последней строки на Sheet1 Worksheets("Sheet1").Activate Set r = ActiveSheet.Range("A3:A30000") Set g = r.Find(What:="") kon1 = g.Row '' определение последней строки на Sheet3 Set r = Range("A3:A300") Set g = r.Find(What:="") kon2 = g.Row ''Определяем массивчик нужной размерности Dim m1(3 To 20000) As Variant Dim m2(1 To 50, 1 To 2) As Variant ''Загружаем таблицу соответствий в массив М2 For i = 1 To kon2 m2(i, 1) = Range("A" & i) m2(i, 2) = Range("B" & i) Next i ''Загружаем длинные номера в массив М1 For i = 3 To kon1 m1(i) = ActiveSheet.Range("A" & i) Next i ''Сравниваем For i = 3 To kon1 For j = 1 To kon2 If m2(j, 2) = m1(i) Then m1(i) = m2(j, 1) Next j Next i ''вставляем на место длинных короткие For i = 3 To kon1 ActiveSheet.Range("A" & i) = m1(i) Next i MsgBox ("ГОТОВО!!!") End Sub У меня получилось около 5 секунд на P366 !!! Большое всем спасибо ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 18:14:07 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
Ну вы только прикиньте, что значит ФОРУМ. С 1 часа с помощью Вас всех перешел на 5 секунд. Я просто балдею ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 18:18:12 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
А еще рекомендуется ставить Exit For Т.е. вместо If m2(j, 2) = m1(i) Then m1(i) = m2(j, 1) написать If m2(j, 2) = m1(i) Then m1(i) = m2(j, 1) :Exit For Совпадение уже найдено, зачем дальше сравнивать??? Будет еще быстрее, думаю я. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 10:38:02 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
Letter_DА еще рекомендуется ставить Exit For Т.е. вместо If m2(j, 2) = m1(i) Then m1(i) = m2(j, 1) написать If m2(j, 2) = m1(i) Then m1(i) = m2(j, 1) :Exit For Совпадение уже найдено, зачем дальше сравнивать??? Будет еще быстрее, думаю я. Нет не так. Совпадений может быть неизвестное кол-во раз. Т.е. с одного номера за месяц звонят не 1 раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 11:33:46 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
а можно и текст процедуры подсократить:) Private Sub CommandButton1_Click() Dim kon1 As Long, kon2 As Long, i As Long, j As Long ''Определяем массивчик нужной размерности Dim m1 As Variant, m2 As Variant '' определение последней строки на Sheet1 Worksheets("Лист1").Activate kon1 = ActiveSheet.Range("A3:A30000").Find(What:="").Row '' определение последней строки на Sheet3 kon2 = Worksheets("Лист3").Range("A3:A300").Find(What:="").Row ''Загружаем таблицу соответствий в массив М2 m2 = Worksheets("Лист3").Range("A3:B" & kon2) ''Загружаем длинные номера в массив М1 m1 = ActiveSheet.Range("A3:A" & kon1) ''Сравниваем For i = 1 To kon1 - 3 For j = 1 To kon2 - 3 If m2(j, 1) = m1(i, 1) Then m1(i, 1) = m2(j, 2) Next j Next i ''вставляем на место длинных короткие ActiveSheet.Range("A3:A" & kon1) = m1 MsgBox ("ГОТОВО!!!") End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 11:37:57 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
sergeyvgа можно и текст процедуры подсократить:) Точно так. Но на скорость это не влияет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 11:51:11 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
Можно ли реализовать такую же функцию поиска и замены, только чтобы поиск производился по части ячейке? Например: найти: *Аренда* Заменить: Аренда помещения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2007, 19:19:00 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
Подобную операцию СУБД делает за долю секунды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2007, 19:33:55 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
А в excel'e это возможно сделать? Какие СУБД делают такую операцию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2007, 20:07:51 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
Напишите пожалуйста, какие СУБД делают такие операции за секунды?! Т.е. мне надо, чтобы слова для поиска находились не в коде, а на отдельном листе. Например: на листе1, есть столбец который содержит по ячейкам разную информацию:одна ячейка - (бла..бла...Аренда..бла...бла), надо найти слово Аренда и заменить всю ячейку на слово Аренда. Все точно так как, вышеописанный код, но он не ищет по части ячейки. Помогите, если кто сталкивался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 07:54:28 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
нужно поменять значение LookAt:=xlWhole на LookAt:=xlPart тогда будет искать ячейку не целиком ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 09:36:33 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
Любая СУБД быстро сделает такую операцию. Только они хранят данные не на листах, как Excel, а в таблицах. Именно это (благодаря табличным функциям и языку SQL) и ускоряет обработку данных в десятки раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 10:15:58 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
talgat Подстановку т.е. замену длинных номеров на короткие делаю в лоб в цикле ( 2 цикла, один вложен в другой). Т.е. на втором листе таблица соответствия длинный короткому. ребята, че ж Вы так себя мучаете - функцию ВПР() посмотри. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 10:24:21 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
KuskovSА в excel'e это возможно сделать? Какие СУБД делают такую операцию?все, могут, это простое соединение таблиц. В access это вроде этого: вариант для фрагмента строки Код: plaintext 1. вариант для полного соответсвия Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 11:00:28 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
Ребят, я уже всех достал?) Посмотрите пожалуйста файл, и если решение существует то скажите какое, если нет то скажите прямо (я как не программист еще в этом не разбераюсь и пытаю найти решение). Сейчас я дейстую так: ' выручка поступление Selection.Replace What:="*Торговля*", Replacement:="Выручка по ОД" Selection.Replace What:="*$Поступления от покупателей$*", Replacement:="Выручка по ОД" Selection.Replace What:="*$Поступления по договору комиссии$*", Replacement:="Поступление по договору комиссии по ОД" Selection.Replace What:="*$Получение наличных из банка$*", Replacement:="Получение наличных из банка по ОД" Selection.Replace What:="*$Сдача наличных в банк$*", Replacement:="Сдача наличных в банк по ОД" Selection.Replace What:="*$Возврат средств на покупку валюты$*", Replacement:="Возврат средств на покупку валюты по ОД" Selection.Replace What:="*$Курсовые разницы*", Replacement:="Курсовые разницы по ОД" Selection.Replace What:="*$Покупка валюты*", Replacement:="Покупка валюты по ОД" Selection.Replace What:="*$Зачислена купленная валюта$*", Replacement:="Зачислена купленная валюта по ОД" .....И так сотни строк( Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 20:47:13 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 22:10:14 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 22:12:34 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
To vbapro Большое человеческое спасибо. Работает как часы. У меня словарик будет находится на другом листе, я просто меняю твое "Лист1" на "Лист2" и больше ничего не меняю, или нет(не считая номеров колонок)? А если в другой книге будет словарик, то "Лист1"(имя листа со значениями, что искать и на что менять) на Appication.Worksbooks("").("Лист1") и Лист1('имя листа, где искать и менять) на ActiveSheets? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2007, 00:11:01 |
|
||
|
Подстановка значений
|
|||
|---|---|---|---|
|
#18+
KuskovSTo vbapro Большое человеческое спасибо. Работает как часы. У меня словарик будет находится на другом листе, я просто меняю твое "Лист1" на "Лист2" и больше ничего не меняю, или нет(не считая номеров колонок)? А если в другой книге будет словарик, то "Лист1"(имя листа со значениями, что искать и на что менять) на Appication.Worksbooks("").("Лист1") и Лист1('имя листа, где искать и менять) на ActiveSheets? Спасибовсе верно рассуждаешь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2007, 11:22:58 |
|
||
|
|

start [/forum/topic.php?all=1&fid=61&tid=2183209]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 206ms |
| total: | 385ms |

| 0 / 0 |
