powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Не всегда находит значение (проскальзывает)
3 сообщений из 3, страница 1 из 1
Не всегда находит значение (проскальзывает)
    #36166479
SanSagittarius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, подскажите, пожалуйста, в чем может быть ошибка?

Обрабатываю данные по циклу. Все вроде работает, но иногда (особенно, при запуске кода из под VBA) значения не определяются - цикл шурует до конца файла (65 тыс строк).


Код: 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.
Sub TelefStat()

Set wb = Application.ThisWorkbook
Set Ws = wb.Worksheets("Sheet1")
Set myRange = Range("A:A")

numDays =  0 
i =  1 
y =  9 

For Each c In myRange
Sheets("Sheet1").Select
    Cells(i,  1 ).Select
    
    If Left(c.Value,  10 ) = "C:\Program" Then ' ИНОГДА ПРОСКАЛЬЗЫВАЕТ
        Exit For
            ElseIf Left(c.Value,  5 ) = "Daily" Then ' ИНОГДА ПРОСКАЛЬЗЫВАЕТ
                numDays = numDays +  1 
    End If
i = i +  1 
Next c

msgbox numDays ' Количество дней за период

End Sub

Понимаю, что я далеко не ас в вопросах программерства, поэтому прошу вашей помощи.

1. Как сделать ограничения на диапазон (либо при нахождении в последней ячейке пути к файлу - C:\Program...), либо по отсутствию данных (если цикл не обнаружил ссылку). Либо же, как вообще ограничить поиск только по заполненным данным в столбце?

2. Т.к. анализируются два возможных значения в ячейке ("C:\Program" + подробный путь или "Daily" + ФИО агентов и вн. телефоны), можно ли как-то реализовать поиск в c.Value через оператор like (по принципу like)? Пробовал заменить код на

Код: plaintext
ElseIf Left(c.Value,  5 ) Like "Daily" 

... но почему-то не выполняется условие (проверял в пошаговом выполнении кода).

3. Может дадите рекомендации по изменению кода, чтобы поиск выполнялся побыстрее, т.к. на данный момент процедура идет довольно медленно. Записей порядка 3000...
...
Рейтинг: 0 / 0
Не всегда находит значение (проскальзывает)
    #36166585
Aster32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub TelefStat()
NumDays =  0 
For i =  1  To  3000  'Поставьте вместо числа 3000 количество строк которое необходимо обработать
Select Case Left(Cells(i,  1 ).Value,  5 )
Case "Daily"
NumDays = NumDays +  1 
Case "C:\Pr"
Exit For
End Select
Next i
MsgBox NumDays
End Sub
...
Рейтинг: 0 / 0
Не всегда находит значение (проскальзывает)
    #36166620
ZiMM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я для нахождения последней заполненной строки пользуюсь такой функцией:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Function GetLastRow(Mysheet As Worksheet, StartRow As Long, StartCol As Long) As Long
  On Error Resume Next
  With Mysheet
    If .Cells(StartRow +  1 , StartCol) <> Empty Then
     GetLastRow = .Cells(StartRow, StartCol).End(xlDown).Row
    Else: GetLastRow = StartRow
    End If
  End With
  If GetLastRow = Empty Then GetLastRow = StartRow
End Function
Примичание: в колонке StartCol не должно быть "промежуточных" пустых ячеек, иначе функция вернет номер последней заполненной строки перед первой пустой ячейкой.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Не всегда находит значение (проскальзывает)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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