Страницы: 1
RSS
Как избежать проверки регистра при использовании Like?
 
Подскажите пожалуйста, мне нужно удалять строку по условию, если она содержит слово, например, Текст, но если будет в верхнем регистре ТЕКСТ, чтобы тоже сработало.  
Я нашел такой варинат, но только при точном совпадении регистра получается:  
If ActiveCell Like "*Текст*" Then...  
Как по другому написать условие, чтобы игнорировать регистр?
 
{quote}{login=Сергей}{date=17.05.2008 02:17}{thema=Как избежать проверки регистра при использовании Like?}{post}Подскажите пожалуйста, мне нужно удалять строку по условию, если она содержит слово, например, Текст, но если будет в верхнем регистре ТЕКСТ, чтобы тоже сработало.  
Я нашел такой варинат, но только при точном совпадении регистра получается:  
If ActiveCell Like "*Текст*" Then...  
Как по другому написать условие, чтобы игнорировать регистр?{/post}{/quote}  
If UCase(ActiveCell) Like "*ТЕКСТ*" Then MsgBox "Совпало"
 
Я контролирую окончание цикла по одному столбцу, а условие проверяю по другому. И так не срабатывает. Ошибку выдает.  
 
If UCase(ActiveCell).Offset(0, 1) Like "*ТЕКСТ*" Then  
 
И если уж Вы готовы помочь - как проверить не одну ячейку правее на совпадение, а вторую, третью... десятую. Тоесть диапазон, Что то типа диапазона Offset(0, 1:10) Нет так конечно. Не писать десять раз OR.
 
{quote}{login=Сергей}{date=17.05.2008 03:17}{thema=}{post}Я контролирую окончание цикла по одному столбцу, а условие проверяю по другому. И так не срабатывает. Ошибку выдает.  
 
If UCase(ActiveCell).Offset(0, 1) Like "*ТЕКСТ*" Then  
 
И если уж Вы готовы помочь - как проверить не одну ячейку правее на совпадение, а вторую, третью... десятую. Тоесть диапазон, Что то типа диапазона Offset(0, 1:10) Нет так конечно. Не писать десять раз OR.{/post}{/quote}  
У Вас ошибка в использовании скобки.  
 
Правильнее так:  
If UCase(ActiveCell.Offset(0, 1)) Like "*ТЕКСТ*" Then  
 
Для проверки, например, 10-ти ячеек справа от активной:  
 
Sub MyTest()  
Dim x, i  
Set x = ActiveCell  
For i = 1 To 10  
If UCase(x.Offset(0, i)) Like "*ТЕКСТ*" Then  
' Что-то сделать  
End If  
Next  
End Sub  
 
Вместо Like иногда удобнее InStr():  
If InStr(1, ActiveCell, "Текст", vbTextCompare) > 0 Then ...
 
Спасибо. Только у меня возникла сложность. Я использую  
Do While Not IsEmpty(ActiveCell)  
для проверки окончания пробежки по строкам и уже по каждой строчке мне нужно контролировать диапазон ячеек правее на вхождение этого текста. А что запустит Ваш Sub внутри моего первого цикла?
 
Если нужно просто узнать, есть ли фрагмент текста в 10 ячейках правее активной, то можно еще и так (не зависит от регистра):  
 
' True, если найдено похожее на What в диапазоне Where  
Function IsFound(What, Where) As Boolean  
IsFound = Not Where.Find(What, LookIn:=xlValues, LookAt:=xlPart) Is Nothing  
End Function  
 
Sub Test()  
With ActiveCell  
MsgBox IsFound("ТЕКСТ", Range(.Offset(0, 1), .Offset(0, 10)))  
End With  
End Sub
 
{quote}{login=Сергей}{date=17.05.2008 04:20}{thema=}{post}Спасибо. Только у меня возникла сложность. Я использую  
Do While Not IsEmpty(ActiveCell)  
для проверки окончания пробежки по строкам и уже по каждой строчке мне нужно контролировать диапазон ячеек правее на вхождение этого текста. А что запустит Ваш Sub внутри моего первого цикла?{/post}{/quote}  
Лучше приложите код, а лучше XLS с кодом, я подправлю - так быстрее будет. Или напишите полностью, что нужно сделать, а то по чайной ложке на ночь... усну вдруг :)  
Мне же не видно как организован цикл, кто там перемещает активную ячейку и т.п.
 
Sub Поиск_ТЕКСТ()  
   Sheets("Лист2").Select  
   Range("A1").Select  
   Do While Not IsEmpty(ActiveCell)  
   ActiveCell.Offset(0, 1) Like "*ТЕКСТ*" Then  
   Selection.EntireRow.Hidden = True  
   End If  
   ActiveCell.Offset(1, 0).Select  
   Loop  
End Sub  
Хотелось бы проверять не только по одной ячейке справа но и по диапазону, скажем до 10-ой ячейки в текущей строке.
 
Sub Поиск_ТЕКСТ()  
Dim x  
Application.ScreenUpdating = False  
Set x = Sheets("Лист2").[A1]
Do While Not IsEmpty(x)  
With x  
If IsFound("Текст", Range(.Offset(0, 1), .Offset(0, 10))) Then  
.EntireRow.Hidden = True  
End If  
End With  
Set x = x.Offset(1, 0)  
Loop  
Application.ScreenUpdating = True  
End Sub  
 
' Вспомогательная функция поиска What в Where  
Function IsFound(What, Where) As Boolean  
IsFound = Not Where.Find(What, LookIn:=xlValues, LookAt:=xlPart) Is Nothing  
End Function
 
Наше народное Гран Мэрси
 
{quote}{login=Сергей}{date=17.05.2008 05:04}{thema=}{post}Наше народное Гран Мэрси{/post}{/quote}  
Toujours s'il vous plaоt!
 
А как приспособить вместо строки со скрытием  
EntireRow.Hidden = True  
удаление этой строки. Что у меня с delete Не получается.  
Подскажите пожалуйста
 
{quote}{login=Сергей}{date=17.05.2008 11:24}{thema=}{post}А как приспособить вместо строки со скрытием  
EntireRow.Hidden = True  
удаление этой строки. Что у меня с delete Не получается.  
Подскажите пожалуйста{/post}{/quote}  
Sub Поиск_ТЕКСТ()  
Dim i  
Application.ScreenUpdating = False  
i = 1  
Do While Not IsEmpty(Cells(i, 1))  
With Cells(i, 1)  
If IsFound("Текст", Range(.Offset(0, 1), .Offset(0, 10))) Then  
.EntireRow.Delete  
Else  
i = i + 1  
End If  
End With  
Loop  
Application.ScreenUpdating = True  
End Sub  
 
' Вспомогательная функция поиска What в Where  
Function IsFound(What, Where) As Boolean  
IsFound = Not Where.Find(What, LookIn:=xlValues, LookAt:=xlPart) Is Nothing  
End Function
 
Спасибо за двоих!!!
Страницы: 1
Читают тему
Наверх