Страницы: 1
RSS
Find в одномерном массиве
 
этот макрос нормально отрабатывает с Range , а как то же самое сделать с одномерным массивом без цикла  
 
Sub findRange()  
Dim iRange As Range  
Dim iFind As String  
 
iFind = "123456"  
 
arr = Range("A:A").Value  
'Set iRange = arr.Find(what:=iFind, LookAt:=xlWhole)  
'с Range  все нормально отрабатывает, а как то же самое сделать с одномерным массивом _  
без цикла  
 
Set iRange = Range("A:A").Find(what:=iFind, LookAt:=xlWhole)  
If iRange Is Nothing Then  
MsgBox "Значения нет"  
Else  
MsgBox "Значеие есть"  
End If  
End Sub
Спасибо
 
Дмитрий, так ведь Find - тот же самый цикл. Просто его от нас спрятали :-)
 
Дим, подсказываю. Если так лень писать цикл, высыпаем Array на лист, а там уже Find:-)  
Ух ты    
=92229=
Я сам - дурнее всякого примера! ...
 
Вот, похоже, что Dophin писал:  
 
Поиск в массиве (VBA) без цикла.  
 
Sub pp()  
Dim arr(2, 1), arr2()  
Dim s, z  
arr(0, 1) = "первый"  
arr(1, 1) = "второй"  
arr(2, 1) = "третий"  
arr(0, 0) = "яблоко"  
arr(1, 0) = "вишня"  
arr(2, 0) = "черешня"  
s = Application.VLookup("вишня", arr, 2, 0)  
arr2 = arr  
ReDim Preserve arr2(2, 0)  
z = WorksheetFunction.Match("вишня", arr2, 0)  
MsgBox z  
End Sub
 
Понял спасибо  
Серега это будет долго через лист, я и так загоняю в массив с листа что бы быстрее было, хотя в неких случаях это будет интересно и полезно.  
зы... значит будем обходиться циклом  
53242...почти стрит
Спасибо
 
А вариант Dophin, любезно выложенный Hugo, чем не устраивает(хотя Юра правильно писал - это цикл, только скрытый)?
Я сам - дурнее всякого примера! ...
 
{quote}{login=KuklP}{date=26.09.2010 06:16}{thema=}{post}А вариант Dophin, любезно выложенный Hugo, чем не устраивает(хотя Юра правильно писал - это цикл, только скрытый)?{/post}{/quote}  
Это тоже Серега будет цикл.  :)и Match и VLookup
Спасибо
 
И по времени по крайней мере на 50000 значений отличия в переборе и поиске нет.  
Вот замерял - искал xxx в А50000:  
 
Sub Макрос1()  
   tm = Timer  
   Set x = Columns("A:A").Find(What:="xxx", After:=ActiveCell, LookIn:=xlFormulas, _  
                               LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _  
                               MatchCase:=False)  
   Debug.Print Timer - tm  
End Sub  
 
Sub tt()  
   a = [a1:a50000]
   tm = Timer  
   For Each cc In a  
       If cc = "xxx" Then y = cc  
   Next  
   Debug.Print Timer - tm  
End Sub
 
{quote}{login=Hugo}{date=26.09.2010 07:37}{thema=}{post}И по времени по крайней мере на 50000 значений отличия в переборе и поиске нет.  
Вот замерял - искал xxx в А50000:  
 
Sub Макрос1()  
   tm = Timer  
   Set x = Columns("A:A").Find(What:="xxx", After:=ActiveCell, LookIn:=xlFormulas, _  
                               LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _  
                               MatchCase:=False)  
   Debug.Print Timer - tm  
End Sub  
 
Sub tt()  
   a = [a1:a50000]
   tm = Timer  
   For Each cc In a  
       If cc = "xxx" Then y = cc  
   Next  
   Debug.Print Timer - tm  
End Sub{/post}{/quote}  
спасибо! Во общем получается что бы не использовал лишь бы работало правильно!  
 
:))55315
Спасибо
 
{quote}{login=Hugo}{date=26.09.2010 07:37}{thema=}{post}И по времени по крайней мере на 50000 значений отличия в переборе и поиске нет.  
Вот замерял - искал xxx в А50000:  
{/post}{/quote}  
А если Exit For в цикл добавить?
 
Ну на практике конечно нужно выход делать, чтоб весь массив не перебирать. Find ведь тоже выходит.  
Ну а здесь и так значение в последнем элементе массива лежит.
 
Леш, а ты думаешь, VLookup или Match не делают  Exit при найденном значении? Тут вопрос в другом ИМХО. Если такие тормоза(как ясно из поста R Dmitry), то пора подумать о вариантах. Либо оптимизировать Экс-файло, либо переносить в Акцесс.
Я сам - дурнее всякого примера! ...
 
{quote}{login=KuklP}{date=27.09.2010 12:08}{thema=}{post}Леш, а ты думаешь, VLookup или Match не делают  Exit при найденном значении? Тут вопрос в другом ИМХО. Если такие тормоза(как ясно из поста R Dmitry), то пора подумать о вариантах. Либо оптимизировать Экс-файло, либо переносить в Акцесс.{/post}{/quote}  
Серега дело не в тормозах, просто "Хочу все знать" :)  
76836
Спасибо
Страницы: 1
Наверх