Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / [VBA Excel] Перебор видимых ячеек / 20 сообщений из 20, страница 1 из 1
10.02.2011, 12:07
    #37108656
[VBA Excel] Перебор видимых ячеек
Здравствуйте.
Необходимо перебрать только видимые ячейки из выделенных, но за исключением первого значения в выборке!
Вроде, очевидно:
Код: plaintext
1.
2.
3.
4.
5.
6.
Set R_in = Selected.SpecialCells(xlVisible)
...
For i_cell =  2  To R_in.Count ' Количество ячеек -- корректно
...
if (R_in(i_cell)...
...
Next
Вот, только проблема: R_in(2) -- вовсе не второе видимое значение, попавшее в выборку R_in!
Почему???
...
Рейтинг: 0 / 0
10.02.2011, 12:12
    #37108672
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[VBA Excel] Перебор видимых ячеек
Дмитрий-(сколько-же-нас?),
Запишите все выделенные в массив или коллецию, а потом удалите первый элемент.
...
Рейтинг: 0 / 0
10.02.2011, 12:19
    #37108700
[VBA Excel] Перебор видимых ячеек
big-duke,

Мысль такая, конечно, есть.
Но мне нужно обработать значения в выделенных строках (интерполировать) и координаты нужны, по-любому...

P.S. Команду удаления первого значения из массива, на всякий случай, подскажете?
...
Рейтинг: 0 / 0
10.02.2011, 12:22
    #37108718
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[VBA Excel] Перебор видимых ячеек
Дмитрий-(сколько-же-нас?),

так вы в массив заносите объекты Range.
...
Рейтинг: 0 / 0
10.02.2011, 12:28
    #37108739
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[VBA Excel] Перебор видимых ячеек
Дмитрий-(сколько-же-нас?)
P.S. Команду удаления первого значения из массива, на всякий случай, подскажете?
такой команды нет.
Можно так
Код: plaintext
1.
a( 0 )=a(ubound(a))
Redim Preserve a(UBound(a)- 1 )
...
Рейтинг: 0 / 0
10.02.2011, 12:56
    #37108840
[VBA Excel] Перебор видимых ячеек
big-duke,

Спасибо,
буду пробовать...
...
Рейтинг: 0 / 0
10.02.2011, 13:05
    #37108879
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[VBA Excel] Перебор видимых ячеек
> Автор: Дмитрий-(сколько-же-нас?)


Твой R_in - это Range. Он может содержать несвязанные "островки" видимых ячеек, для того что-бы перебрать видимые ячейки
из этого R_in нужно сделать два цикла - один по Areas, а второй по Range, которые находятся в этих Areas.
Примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
Dim R_in As Range, r As Range, a As Range
Set R_in = Selection.SpecialCells(xlVisible)
For Each a In R_in.Areas
    For Each r In a
        Debug.Print r.Address
    Next r
Next a


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
10.02.2011, 13:10
    #37108900
_slan_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[VBA Excel] Перебор видимых ячеек
Игорь Горбонос,

только хотел сказать..

но еще остается вопрос, что щитать второй видимоой ячейкой.. т.е. направление обхода..
...
Рейтинг: 0 / 0
10.02.2011, 13:45
    #37109029
[VBA Excel] Перебор видимых ячеек
Игорь Горбонос
> Автор: Дмитрий-(сколько-же-нас?)


Твой R_in - это Range. Он может содержать несвязанные "островки" видимых ячеек, для того что-бы перебрать видимые ячейки
из этого R_in нужно сделать два цикла - один по Areas, а второй по Range, которые находятся в этих Areas.
Примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
Dim R_in As Range, r As Range, a As Range
Set R_in = Selection.SpecialCells(xlVisible)
For Each a In R_in.Areas
    For Each r In a
        Debug.Print r.Address
    Next r
Next a



Areas тут ни при чем:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Option Explicit

Sub ha()
Dim R_in As Range, i_cell%, c

Rows("2:3").Hidden = True
Rows("9").Hidden = True

Range("A1:A14").Select

Set R_in = Selection.SpecialCells(xlVisible)

For Each c In R_in

    i_cell = i_cell +  1 
    Debug.Print i_cell; Tab; R_in(i_cell).Address; Tab; c.Address
    
Next

End Sub
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 1            $A$1          $A$1
 2            $A$2          $A$4
 3            $A$3          $A$5
 4            $A$4          $A$6
 5            $A$5          $A$7
 6            $A$6          $A$8
 7            $A$7          $A$10
 8            $A$8          $A$11
 9            $A$9          $A$12
 10           $A$10         $A$13
 11           $A$11         $A$14
...
Рейтинг: 0 / 0
10.02.2011, 13:58
    #37109060
_slan_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[VBA Excel] Перебор видимых ячеек
пробуй камнем,

если через each , то в самом деле проходит , но задача была исключить из сравнения (?) первую..

areas нисколько не противоречит вашему взгляду, но может быть эффективнее..
...
Рейтинг: 0 / 0
10.02.2011, 14:04
    #37109079
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[VBA Excel] Перебор видимых ячеек
_slan_,
specialcells(xlVisible) и так исключит области со скрытыми строками ( удалит из "островков").
Так что Areas - не нужны.
...
Рейтинг: 0 / 0
10.02.2011, 14:23
    #37109162
[VBA Excel] Перебор видимых ячеек
_slan_пробуй камнем,

если через each , то в самом деле проходит , но задача была исключить из сравнения (?) первую ..

areas нисколько не противоречит вашему взгляду, но может быть эффективнее..

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
' костыль для For Each
For Each c In R_in
    
    i_cell = i_cell +  1 
    If Intersect(c, R_in( 1 )) Is Nothing Then _
        Debug.Print i_cell; Tab; R_in(i_cell).Address; Tab; c.Address
    
Next
ЗЫ: на больших объемах Areas, возможно, будет эффективнее
...
Рейтинг: 0 / 0
10.02.2011, 14:33
    #37109202
[VBA Excel] Перебор видимых ячеек
big-duke_slan_,
specialcells(xlVisible) и так исключит области со скрытыми строками ( удалит из "островков").
Так что Areas - не нужны.

иногда оч.даже нужны
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub wu()
Dim r1, ac%, cc%
Set r1 = [A1:A10,A16:A20,A25:A30]
    Debug.Print "Address "; Tab; r1.Address
    Debug.Print "cells count "; r1.Cells.Count; Tab; "areas count "; r1.Areas.Count
    Debug.Print "cells.count_address "; Tab; r1.Cells(r1.Cells.Count).Address
    ac = r1.Areas.Count
    cc = r1.Areas(ac).Cells.Count
    Debug.Print "LastCell_address "; Tab; r1.Areas(ac)(cc).Address
Set r1 = Nothing
End Sub
...
Рейтинг: 0 / 0
10.02.2011, 14:45
    #37109247
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[VBA Excel] Перебор видимых ячеек
пробуй камнем,

я говорил про данный случай, а не в общем.
...
Рейтинг: 0 / 0
10.02.2011, 14:57
    #37109299
[VBA Excel] Перебор видимых ячеек
big-duke,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Dim R_in, r1
Rows("11:15").Hidden = True
Rows("21:24").Hidden = True

Range("A1:A30").Select

Set R_in = Selection.SpecialCells(xlVisible)
Set r1 = [A1:A10,A16:A20,A25:A30]

If R_in.Address = r1.Address Then _
  MsgBox "за деревьями леса не замечаем?", vbQuestion, "пробуй камнем"

Set R_in = Nothing
Set r1 = Nothing
...
Рейтинг: 0 / 0
10.02.2011, 15:04
    #37109331
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[VBA Excel] Перебор видимых ячеек
пробуй камнем,

о чем этот пример ?
R_in.Address = r1.Address , это и так понятно.
...
Рейтинг: 0 / 0
10.02.2011, 15:12
    #37109357
[VBA Excel] Перебор видимых ячеек
пример - ответ на реплику
big-dukeпробуй камнем,

я говорил про данный случай, а не в общем.
В данном случае, у Автора несвязанный диапазон, полученный посредством SpecialCells. Автор не желает использовать For Each для перебора ячеек мдиапазона, т.к. ему надо "за исключением первого значения в выборке". При попытке обращении к ячейкам несвязанного диапазона по их индексам, Автор наступает на грабли сталкивается с непониманием того, как Excel находит ячейку диапазона по её индексу.

ЗЫ: пардон за "мало смысла - многабукаф"
...
Рейтинг: 0 / 0
10.02.2011, 15:25
    #37109396
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[VBA Excel] Перебор видимых ячеек
пробуй камнем,

ну так это понятно, что индекс не прокатит и-за "порванного" диапазона. Моя реплика была именно про ваш пример.
Предлагаю на этом завершить.
...
Рейтинг: 0 / 0
10.02.2011, 16:27
    #37109622
_slan_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[VBA Excel] Перебор видимых ячеек
пробуй камнем_slan_пробуй камнем,

если через each , то в самом деле проходит , но задача была исключить из сравнения (?) первую ..

areas нисколько не противоречит вашему взгляду, но может быть эффективнее..

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
' костыль для For Each
For Each c In R_in
    
    i_cell = i_cell +  1 
    If Intersect(c, R_in( 1 )) Is Nothing Then _
        Debug.Print i_cell; Tab; R_in(i_cell).Address; Tab; c.Address
    
Next
ЗЫ: на больших объемах Areas, возможно, будет эффективнее


на таком коде то уж точно..

если и делать, то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
' костыль для For Each
dim b as boolean
b=true
For Each c In R_in
    
    i_cell = i_cell +  1 
    If b Then _
        Debug.Print i_cell; Tab; R_in(i_cell).Address; Tab; c.Address
    b=false
Next
...
Рейтинг: 0 / 0
10.02.2011, 16:32
    #37109639
_slan_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[VBA Excel] Перебор видимых ячеек
_slan_,

точнее так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
dim b as boolean
For Each c In R_in
    
    i_cell = i_cell +  1 
    If b Then 
        Debug.Print i_cell; Tab; R_in(i_cell).Address; Tab; c.Address
     else
        b=true
     endif
Next
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / [VBA Excel] Перебор видимых ячеек / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]