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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2011, 20:43   #1
Olya1985
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 113
По умолчанию макрос для нахождения соответствующих значений

Добрый вечер!

подскажите, пожалуйста, как исправить данный код для нахождения соответствующих значений, так чтобы он был написан без использования макрорекордера, а с помощью функции find (или любой другой функции которая смогла бы заменить vlookup).

Sub m_1()
Dim EndPrice As String
Dim EndPricelist As String
Dim FoundedCell As Excel.Range
Dim Cell As Excel.Range
EndPrice = Worksheets("Price").Cells.SpecialCe lls(xlCellTypeLastCell).Row
EndPricelist = Worksheets("Price-list").Cells.SpecialCells(xlCellTyp eLastCell).Row
For Each Cell In Worksheets("Price").Range("A1:" & "A" & EndPrice)
With Worksheets("Price-list").Range("B1:" & "B" & EndPricelist)
Set FoundedCell = .Find(What:=Cell.Value, LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not FoundedCell Is Nothing Then
Worksheets("Price").Cells(Cell.Row, 3).Value = _
Worksheets("Price-list").Cells(FoundedCell.Row, 17).Value
End If
End With
Next Cell
Set FoundedCell = Nothing
Set Cell = Nothing
End Sub
Olya1985 вне форума Ответить с цитированием
Старый 06.01.2011, 20:49   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
как исправить данный код для нахождения соответствующих значений, так чтобы он был написан без использования макрорекордера
В этом коде нет ни одной строки, вышедшей из-под пера макрорекордера...
Весь этот код написан человеком.

Цитата:
а с помощью функции find
Вроде в коде эта функция уже используется...

PS: зачем вообще что-то исправлять? какая цель данного исправления?
EducatedFool вне форума Ответить с цитированием
Старый 06.01.2011, 20:52   #3
Olya1985
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 113
По умолчанию

а вот данная запись например, ее вручную было бы написать очень сложно. и я ее не могу понять. а вообще я тут разбираюсь с макросами, пытаюсь понять что к чему и научиться программировать самой.

.Find(What:=Cell.Value, LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Olya1985 вне форума Ответить с цитированием
Старый 06.01.2011, 21:10   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

у функции Find есть много входящих параметров
можно было записать так, так короче, но понятнее ли???
.Find(Cell.Value, Cell, xlValues, xlWhole, xlByColumns, xlNext, False, False)
можно пойти еще дальше:
.Find(Cell.Value, Cell, -4163, 1, 2, 1, False, False)
если знать что xlValues=-4163, xlWhole=1, а xlByColumns=2
параметры можно перечислить через запятую в том порядке в котором они записаны при обьявлении функции, а можно в произвольном указав ПараметрТакойТо:=ЗначениюТакомуТо

и еще, все параметры Find, кроме первого необязательны, поэтому их можно не писать и ограничится таким: Find(Cell), если еще знать, что для обьекта Range подставляется свойство Value, если свойство явно не указано. т.е. Range("A1") = range("B1") все равно что написать Range("A1").Value = range("B1").Value. и в том и в том случае в А1 из В1 попадет только значение, а не формула, не формат ячейки, не примечание из нее
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 06.01.2011 в 21:23.
IgorGO вне форума Ответить с цитированием
Старый 06.01.2011, 21:21   #5
Olya1985
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 113
По умолчанию

спасибо. теперь кое что прояснилось. до конца конечно не понятно. а можно ли в данном случае применить какую-нибудь другую функцию?
Olya1985 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(C++ if) нахождения значений чисел basav1k Помощь студентам 0 24.05.2010 14:30
Макрос для обработки диапазона значений в цикле as-is Microsoft Office Excel 5 08.03.2010 12:39
Макрос на проверку значений serafim09 Microsoft Office Excel 12 08.09.2009 13:57
Макрос для формата значений segail Microsoft Office Excel 3 13.06.2009 20:54
ребят может у кого-нибудь есть исходники для программы поиска файлов соответствующих шаблону? andreww Паскаль, Turbo Pascal, PascalABC.NET 0 31.05.2009 10:18