Помогите ускорить работу макроса поиска и замены значений в Excel на о

Тема в разделе "Visual Basic", создана пользователем FriendProg, 4 июн 2008.

  1. FriendProg

    FriendProg Гость

    Приветствую Вас всех! Помогите с проблемой есть код, который подставляет ФИО за место номера внутреннего телефона, НО делает он это (а именно он обрабатывает 1100 ячеек в столбце C, а диапазон внутренних телефонных номеров абонентов "101-600") нереально долго, каким путем посоветуете пойти!?
    Заранее я очень сильно всем Вам благодарен!!!
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    идете дальше, юзайте Replace!
     
  3. Tanya

    Tanya Гость

    еще как вариант:
    1) создается массив с количеством элементов явно большим, чем требуется (по-крайней мере в примере)
    то есть требуется 33 элемента, а массив объявляется на 501 элемент
    2) если такой массив и требуется, то в цикле можно проверять содержит ли элемент что-нибудь:
    Код (Text):
    if len(s1(i, 2)) >0 then 'выполняем поиск и замену
    3) может это не совсем то, но: если значения список номеров телефонов и ФИО хранятся на листе Excel,
    и требуется подставить эти значения в другом диапазоне, то можно использовать функцию Excel ВПР()

    =ВПР(Искомое_Значение; Таблица; Номер_Столбца; Интервальный_Просмотр)
    Искомое_Значение - в данном случае, ячейка с искомым номером телефона
    Таблица - указываем диапазон, где содержится список телефонов и ФИО.
    Нужно, чтобы в первой колонке обязательно было значение, по которому ведется поиск - то есть номер телефона,
    и обязательно! таблица должна быть отсортирована по номерам телефонов
    Номер_Столбца - номер колонки в списке с ФИО, то есть номер колонки относительно номера колонки с телефонами,
    если считать, что у нас только телефон; ФИО, то номер колонки = 2
    Интервальный_Просмотр - Ложь, если мы ищем точные значения

    в общем, это оч хорошая функция, если к ней приспособиться :)
    и все зависит от того, что требуется делать
     
  4. Jumpy

    Jumpy Гость

    Палюбому встроенная функция фаинд тупит...
    лучше пробегаться по масиву мамому...

    Dim MAS(1 to 100, 1 to 2) as string
    'двумерный массив в 100 элементов, 1ый - это номер телефон, 2ой - это собственно фамилия
    'терь задаем массив
    MAS(1, 1) = "242" 'здесь на самом деле чо угодно, то самое что будет заменяться
    MAS(1,2) = "Гирнык Наталья (242)" 'а здесь НА то что будет заменяться

    MAS(2,1) = "230"
    MAS(2,2) ="Городецкая Ольга (230)"

    'два элемента для примера достаточно, теперь цикл по всему столбику

    dim a as integer 'переменная цикла
    dim b as integer 'внутренний цикл
    dim STROKA as string 'рабочая строка, шобы пошустрее сравнивало

    for a = 1 to 1000 'цикл с первой по последнюю строчку
    STROKA = Range("C" & a)

    for b = 1 to 100 'цикл по всему массиву, ессно лучше идти до последнего элемента, если фамилий 40, то и идти до 40ого

    'если в нашей ячейке то самое, что надо заменить и мы нашли это в массиве,
    'то вписываем в ячейку собственно замену и выходим из внутреннего цикла
    if STROKA = MAS(b,1) then
    Range("C" &a) = MAS(b,2)
    exir for
    end if

    next 'конец внутреннего цикла
    next 'конец внешнего цикла

    ИМХО гораздо проще модицифируется, а работать будет быстрее чем любой вызов встроенной функции - это проверено.
     
Загрузка...
Похожие Темы - Помогите ускорить работу
  1. limbra
    Ответов:
    3
    Просмотров:
    44
  2. NylevoiChelovek
    Ответов:
    4
    Просмотров:
    98
  3. Ruska132
    Ответов:
    34
    Просмотров:
    264
  4. gURaBA_N
    Ответов:
    7
    Просмотров:
    147
  5. uxbmw3w
    Ответов:
    0
    Просмотров:
    62

Поделиться этой страницей