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

  • Автор темы FriendProg
  • Дата начала
F

FriendProg

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

Tanya

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

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

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

Jumpy

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

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 'конец внешнего цикла

ИМХО гораздо проще модицифируется, а работать будет быстрее чем любой вызов встроенной функции - это проверено.