Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2011, 23:12   #1
ExeiLj
Пользователь
 
Регистрация: 14.04.2011
Сообщений: 15
Вопрос Особый поиск

Всем привет!

Суть такова:
надо в коде VBA организовать поиск по столбцу, чтобы он искал поле с ОДНИМ восклицательным знаком.

Просто есть поля где два восклицательных знака, а есть где три или вообще ноль. Поэтому надо научить его искать поля, где в тексте имеется только один восклицательный знак.

Вообще не знаю как такое условие задать, может кто даст наводку?
ExeiLj вне форума Ответить с цитированием
Старый 14.04.2011, 23:26   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Даю наводку
Код:
Sub tt()
For Each cc In [a1:a4]
MsgBox UBound(Split(cc, "!"))
Next
End Sub
Ещё можно сравнить исходную длину строки с длиной строки без "!".

Чтоб ускорить - можно сперва найти с помощью Find ячейку, потом её проверить на количество "!".
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 14.04.2011 в 23:33.
Hugo121 вне форума Ответить с цитированием
Старый 15.04.2011, 05:39   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Пусть требуется найти и выделить все ячейки, содержащие 1 восклицательный знак в диапазоне "A1:A7".
Код:
Sub Main()
    Dim x As Range, y As Range
    For Each x In [A1:A7]
        If x Like "*!*" And Not x Like "*!*!*" Then If y Is Nothing Then Set y = x Else Set y = Union(y, x)
    Next
    If Not y Is Nothing Then y.Select
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 15.04.2011, 09:08   #4
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Еще вариант (скоро зачет по RegExp )
Код:
Sub ertert()
Dim pz As Range
For Each pz In [a1:a7]
    If REColor(pz) Then pz.Interior.ColorIndex = 36
Next
End Sub

Function REColor(r As Range) As Boolean
With CreateObject("vbscript.regexp")
    .Global = True: .Pattern = "!"
    With .Execute(r.Value)
        REColor = .Count = 1
    End With
End With
End Function
nilem вне форума Ответить с цитированием
Старый 15.04.2011, 09:24   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

nilem, зачет по RegExp принят на отлично

Но зачем пускать в ход тяжелую артиллерию, если простейшие функции справляются?
Код:
Sub ertert()
    Dim pz As Range
    For Each pz In [a1:a7]
        If Len(pz) - Len(Replace(pz, "!", "")) = 1 Then pz.Interior.ColorIndex = 36
    Next
End Sub
Но проще, конечно, как Hugo предложил:
Код:
Sub ertert2()
    Dim pz As Range
    For Each pz In [a1:a7]
        If UBound(Split(pz, "!")) = 1 Then pz.Interior.ColorIndex = 36
    Next
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 17.04.2011, 15:05   #6
ExeiLj
Пользователь
 
Регистрация: 14.04.2011
Сообщений: 15
По умолчанию

Всем большое спасибо! Воспользовался этим

Цитата:
If UBound(Split(pz, "!")) = 1 Then
ExeiLj вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
"Особый" HTML парсер Alex Defsen Работа с сетью в Delphi 9 11.10.2010 15:32
Поиск в БД Lomka БД в Delphi 1 24.11.2009 23:18
Особый эл-т в матрице, подправить! RomT24 Паскаль, Turbo Pascal, PascalABC.NET 10 22.05.2009 16:03
ПОИСК FIIR БД в Delphi 3 16.06.2008 16:06
ПОИСК В БД HOMER БД в Delphi 2 20.12.2007 21:41