Страницы: 1
RSS
Перебор ячеек в диапазоне (VBA)
 
Добрый день,  
Как перебрать ячейки диапазона "qwer" на поиск значения ячейки?  
Делаю так: определяю граничные ячейки и в цикле по строке перебираю циклом по столбцам - при совпадении - выход и как результат есть значение и адрес ячейки. Это работает, но скорее всего можно короче и эффективнее.  
Спасибо.
 
For Each не пробовали?
 
Самый простой способ - использовать поиск (метод FIND)  
 
Sub test()  
   Dim cell As Range: Set cell = Range("qwer").Find(5, , xlValues)  
   If Not cell Is Nothing Then MsgBox "Число 5 найдено в ячейке " & cell.Address  
End Sub
 
Метод похуже:  
 
Sub tt()  
Dim cc As Range  
For Each cc In [qwer]
If cc.Value = 5 Then MsgBox "Число 5 найдено в ячейке " & cc.Address: Exit For  
Next  
End Sub
 
И наверное  
Set cell = Range("qwer").Find(5, , xlValues, xlWhole)  
надо, а то находит сперва 55...
 
EducatedFool, Hugo Спасибо.  
Hugo, "И наверное ..." Не совсем понял к чему надо добавить?
 
Поиск проводить по всей ячейке, а не по части. Если конечно надо. В код EducatedFool :)
 
function adr(rng as range)as string  
dim arr,i&,j&  
arr=rng  
for i=1 to ubound(arr)  
for j= 1 to ubound(arr,2)  
if arr(i,j) =  (или like)"значение" then adr=rng(i,j).address  
next  
next  
end function
Живи и дай жить..
 
слэн, Hugo спасибо.  
А как не по значению а по цвету фона - первая белая?
 
Sub tt()  
Dim cc As Range  
For Each cc In [qwer]
If cc.Interior.ColorIndex = 2 Then MsgBox "Белое найдено в ячейке " & cc.Address: Exit For  
Next  
End Sub  
 
Sub ttе()  
Dim cc As Range  
For Each cc In [qwer]
If cc.Interior.ColorIndex = xlNone Then MsgBox "Незалитое найдено в ячейке " & cc.Address: Exit For  
Next  
End Sub
 
Hugo, СПАСИБИЩЕ
 
Добрый день,  
слэн,  
For i = 1 To UBound(arr) - почему это номер строки?  
For j = 1 To UBound(arr, 2) - а это номер столбца? Почему 2 (какое второе значение из имени диапазона)? "2" убираю и тоже все работает вроде правильно.  
Справку по UBound прочитал но не понял: Если можно - коротко по-русски.  
Спасибо.
 
диапазоны индексируются так - первый индекс - строка, второй- столбец  
 
соотвественно и массивы, получаемые из диапазонов.  
 
ubound - дает максимальное значение индекса(не количество элементов)  
 
ubound(имя, номер размерности)  
 
имя - тут все понятно  
 
номер  размерности - по умолчанию равен 1, т.о. если его опускаем, получаем строку. 2ка - дает максимальный столбец. Т.к. при записи в массив из диапазона начальный индекс всегда равен единице(и у строк и у столбцов), то в данном конкретном случае:  
 
ubound(arr) - количество строк  
ubound(arr,2) - количество столбцов
Живи и дай жить..
 
"диапазоны индексируются так - первый индекс - строка, второй- столбец",  
qwer=Лист1!$C$3:$F$4; arr=qwer; должны получить ubound(arr)=2, ubound(arr,2)=4.  
Не пойму какой в этом случае получается массив? {2;4}?  
слэн, перечислите пожалуйста его аргументы для наглядности.
 
При отладке кода в окне Locals можно посмотреть, что где в массиве, очень помогает понять.
 
{quote}{login=Hugo}{date=11.05.2010 04:15}{thema=}{post}При отладке кода в окне Locals можно посмотреть, что где в массиве, очень помогает понять.{/post}{/quote}  
Hugo, простите пожалуйста, где найти это окно? А то я уже именно для этого пытаюсь функцию в макрос переделать для пошагового выполнения, а оно не получается.
 
Окно нашел. Как смотреть в нем функцию? (с макросом понятно - при пошаговом запуске)
 
Не надо функцию в макрос. Пишите в макросе одну строку adr([A1:B10]) и гоните по F8. Функция в модуле. В редакторе View-Locals Window, не знаю, как по-русски...
 
Или можно в функции точку остановки поставить (в редакторе), или STOP написать.
 
Hugo, спасибо.  
Не ну в макросе я точку использовал. А вот в функции ума не хватило.
Страницы: 1
Читают тему
Наверх