powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Макрос с циклом
14 сообщений из 14, страница 1 из 1
Макрос с циклом
    #36519425
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер!
У меня макрос в цикле перебирает все ячейки второго столбца на листе, при этом я хочу, чтобы когда он сталкивался с определенным значением в какой-либо ячейки(например, "ДС") то перескакивал бы на другую ячейку, также с определенным значением(например, "Всего по ДС"). Подскажите пожалуйста, как это сделать! =)
Заранее спасибо!
...
Рейтинг: 0 / 0
Макрос с циклом
    #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
Макрос с циклом
    #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
Макрос с циклом
    #36519821
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alisya,

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

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

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

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

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

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

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


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