Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Макрос с циклом / 14 сообщений из 14, страница 1 из 1
14.03.2010, 17:45
    #36519425
Alisya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос с циклом
Добрый вечер!
У меня макрос в цикле перебирает все ячейки второго столбца на листе, при этом я хочу, чтобы когда он сталкивался с определенным значением в какой-либо ячейки(например, "ДС") то перескакивал бы на другую ячейку, также с определенным значением(например, "Всего по ДС"). Подскажите пожалуйста, как это сделать! =)
Заранее спасибо!
...
Рейтинг: 0 / 0
14.03.2010, 17:47
    #36519431
Alisya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос с циклом
Вот тот самый макрос:
Sub Sravnenie()
Dim object, times
Dim plan As Object, gos As Object, result As Object, x As Range
Dim FirstAddress$, blank_cell As Range
Dim discipl As Range
Worksheets("Лист3").Cells.ClearContents
Set plan = Sheets(2)
Set gos = Sheets(1)
Set result = Sheets(3)

For Each discipl In plan.UsedRange.Columns(2).Cells

object = discipl.Value
times = plan.Cells(discipl.Row, 8).Value

If object <> "" Then
If object Like "ДС*" Or object Like "ФТД*" Then
Set DS_FTD = plan.Cells(discipl.Row, 3)
Set x = gos.Columns(2).Find(DS_FTD, LookIn:=xlValues, lookat:=xlPart, MatchCase:=True)
Set object = plan.Columns(2).Find("Всего по ДС*")
Else
Set x = gos.Columns(2).Find(object, LookIn:=xlValues, lookat:=xlPart, MatchCase:=True)


If Not x Is Nothing Then

FirstAddress = x.Address

Do
Set x = gos.Columns(2).FindNext(x)
If gos.Cells(x.Row, 3).Value <> times Then
Set blank_cell = result.Cells(result.Range("a" & Rows.Count).End(xlUp).Row + 1, 1)
plan.Cells(discipl.Row, 2).Copy blank_cell
End If
Loop While Not x Is Nothing And x.Address <> FirstAddress
Else
Set blank_cell = result.Cells(result.Range("a" & Rows.Count).End(xlUp).Row + 1, 1)
plan.Cells(discipl.Row, 2).Copy blank_cell
'blank_cell.Offset(0, 2).Value = "Not Exist In Sheets1 Column2!"
End If
End If
End If
Next

ActiveSheet.Columns.AutoFit
ActiveSheet.Rows.AutoFit

End Sub
...
Рейтинг: 0 / 0
14.03.2010, 18:45
    #36519509
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос с циклом
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
Sub Sravnenie()
Dim object, times
Dim plan As Object, gos As Object, result As Object, x As Range
Dim FirstAddress$, blank_cell As Range
Dim discipl As Range
Worksheets("Лист3").Cells.ClearContents
Set plan = Sheets( 2 )
Set gos = Sheets( 1 )
Set result = Sheets( 3 )

For Each discipl In plan.UsedRange.Columns( 2 ).Cells

object = discipl.Value
times = plan.Cells(discipl.Row,  8 ).Value

    If object <> "" Then
        If object Like "ДС*" Or object Like "ФТД*" Then
                Set DS_FTD = plan.Cells(discipl.Row,  3 )
                Set x = gos.Columns( 2 ).Find(DS_FTD, LookIn:=xlValues, lookat:=xlPart, MatchCase:=True)
                Set object = plan.Columns( 2 ).Find("Всего по ДС*")
        Else
            Set x = gos.Columns( 2 ).Find(object, LookIn:=xlValues, lookat:=xlPart, MatchCase:=True)
        
        
        If Not x Is Nothing Then
        
            FirstAddress = x.Address
                    
            Do
                Set x = gos.Columns( 2 ).FindNext(x)
                    If gos.Cells(x.Row,  3 ).Value <> times Then
                            Set blank_cell = result.Cells(result.Range("a" & Rows.Count).End(xlUp).Row +  1 ,  1 )
                            plan.Cells(discipl.Row,  2 ).Copy blank_cell
                    End If
            Loop While Not x Is Nothing And x.Address <> FirstAddress
        Else
                Set blank_cell = result.Cells(result.Range("a" & Rows.Count).End(xlUp).Row +  1 ,  1 )
                plan.Cells(discipl.Row,  2 ).Copy blank_cell
                'blank_cell.Offset(0, 2).Value = "Not Exist In Sheets1 Column2!"
        End If
        End If
    End If
Next

ActiveSheet.Columns.AutoFit
ActiveSheet.Rows.AutoFit

End Sub
...
Рейтинг: 0 / 0
15.03.2010, 00:06
    #36519821
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос с циклом
Alisya,

Не очень понятно, что вы подразумеваете под "перескакивал"
Вы хотите, чтобы изменился сам цикл и discipl пошел от нового значения?
...
Рейтинг: 0 / 0
15.03.2010, 18:45
    #36521804
Alisya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос с циклом
я хочу чтобы как только в цикле встретилась ячейка со значением "ДС" или "ФТД", цикл переходил к обработке ячейки со значением "Всего" и соответственно discipl менялся на это значение
...
Рейтинг: 0 / 0
15.03.2010, 19:05
    #36521839
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос с циклом
Тогда вместо цикла For... Each используйте обычный цикл, что-то типа

Код: plaintext
For i =  1  To plan.UsedRange.Rows.Count

вместо discipl у вас будет Cells(i, 2)

и, соответственно, меняя i, вы сможете делать этот перескок
...
Рейтинг: 0 / 0
17.03.2010, 14:01
    #36526130
Alisya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос с циклом
а если я незнаю на сколько ячеек мне надо сместиться, то как быть????
Мне нужно чтобы цикл перескакивал на ячейку с определенным текстом.
...
Рейтинг: 0 / 0
17.03.2010, 14:05
    #36526144
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос с циклом
Alisyaа если я незнаю на сколько ячеек мне надо сместиться, то как быть????
Мне нужно чтобы цикл перескакивал на ячейку с определенным текстом.

Почему не знаете?
После поиска у вас в переменной x находится найденная ячейка.
x.Row - это и есть нужная строка
...
Рейтинг: 0 / 0
21.03.2010, 13:28
    #36533154
Alisya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос с циклом
Shocker.Pro, у меня ничего не получается.
Не подскажите в каком месте изменять i?
...
Рейтинг: 0 / 0
21.03.2010, 13:35
    #36533158
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос с циклом
AlisyaShocker.Pro, у меня ничего не получается.
Не подскажите в каком месте изменять i?

плиз, сделайте тогда файл, оставив только нужные данные и нужную процедуру без всякий посторонних команд, чтобы мне в них не разбираться, а я вам ее отредактирую.
...
Рейтинг: 0 / 0
21.03.2010, 14:17
    #36533196
Alisya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос с циклом
Пожалуйста!
...
Рейтинг: 0 / 0
21.03.2010, 14:55
    #36533220
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос с циклом
Alisya,

Две существенных ошибки:
1) вместо предложенного мной .Row вы использовали .Rows
2) поиск "Всего" вы проводили с начала столбца. То есть найдя впервые нужное сочетание в 15-й строке вы пытались перевести цикл на 14-ю строку, где впервые встречается "Всего*". То есть программа зацикливалась (бы, если бы не ошибка 1)
...
Рейтинг: 0 / 0
21.03.2010, 15:33
    #36533245
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос с циклом
я там немного перемудрил с поиском. Все проще:
Код: plaintext
Set object = plan.Columns( 2 ).Find("Всего*", Cells(i,  2 ))
...
Рейтинг: 0 / 0
21.03.2010, 15:41
    #36533255
Alisya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос с циклом
Огромное спасибо! =)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Макрос с циклом / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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