Страница 1 из 1

применение Like В VB Excel

Добавлено: 08 июл 2009, 10:30
kuznetsovSergey
Подскажите пожалуйста, как применить оператор Like , в VB для макроса в Excel.
покажите на примере цикла, как проверять есть ли в столбце A:A в каждой ячейке слово "мама", если да, то счетчик прибавляет 1.
Только не диапазоном пример нужен, а циклом, что бы просматривалась каждая ячейка.
Ну предположим в столбце A:A заполнено первых 5 ячеек.

Спасибо заранее

Re: применение Like В VB Excel

Добавлено: 08 июл 2009, 11:09
mc-black
___DELETED___

Re: применение Like В VB Excel

Добавлено: 08 июл 2009, 17:36
EducatedFool

Код: Выделить всё

[color=darkblue]Sub[/color] test()
    [color=darkblue]Dim[/color] cell [color=darkblue]As[/color] Range, ra [color=darkblue]As[/color] Range: Application.ScreenUpdating = [color=darkblue]False[/color]
    [color=darkblue]Set[/color] ra = Range([A1], Range("A" & Rows.Count).End(xlUp))
    [color=darkblue]For[/color] [color=darkblue]Each[/color] cell [color=darkblue]In[/color] ra.Cells
        [color=darkblue]If[/color] cell [color=darkblue]Like[/color] "*" & "мама" & "*" [color=darkblue]Then[/color] i = i + 1
    [color=darkblue]Next[/color] cell
    Debug.Print i
[color=darkblue]End[/color] [color=darkblue]Sub[/color]

А лучше так:

Код: Выделить всё

[color=darkblue]Sub[/color] test2()
    i = WorksheetFunction.CountIf([a1:a5], "мама")
    Debug.Print i
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
Пример использования оператора Like:

Код: Выделить всё

[color=darkblue]Sub[/color] test3()
    txt = "13242342134[].,"

    [color=darkblue]If[/color] txt [color=darkblue]Like[/color] "*[A-Z]*" [color=darkblue]Then[/color] MsgBox "Строка содержит английские буквы"
    [color=darkblue]If[/color] txt [color=darkblue]Like[/color] "*[А-Я]*" [color=darkblue]Then[/color] MsgBox "Строка содержит русские буквы"
    [color=darkblue]If[/color] txt [color=darkblue]Like[/color] "*[A-Z]*" [color=darkblue]Or[/color] txt [color=darkblue]Like[/color] "*[А-Я]*" [color=darkblue]Then[/color] MsgBox "Строка содержит русские или английские буквы"
    [color=darkblue]If[/color] txt [color=darkblue]Like[/color] "*[A-Z]*" And txt [color=darkblue]Like[/color] "*[А-Я]*" [color=darkblue]Then[/color] MsgBox "Строка содержит русские и английские буквы"
    [color=darkblue]If[/color] [color=darkblue]Not[/color] IsNumeric(txt) [color=darkblue]Then[/color] MsgBox "Строка не является числом"
    [color=darkblue]If[/color] txt [color=darkblue]Like[/color] [color=darkblue]String[/color](Len(txt), "#") [color=darkblue]Then[/color] MsgBox "Строка состоит только из цифр"
[color=darkblue]End[/color] [color=darkblue]Sub[/color]

Re: применение Like В VB Excel

Добавлено: 09 июл 2009, 13:59
SAS888
Еще добавлю. Допустимые спец. символы в маске оператора Like:
? - Любой одиночный символ
* - Ноль или более символов
# - Любая одиночная цифра (0–9).
[charlist] - Любой одиночный символ в классе символов (списке)
[!charlist] - Любой одиночный символ не принадлежащий классу символов

Поэтому, вместо

Код: Выделить всё

If cell Like "*" & "мама" & "*" Then...
достаточно написать

Код: Выделить всё

If cell Like "*мама*" Then...

Re: применение Like В VB Excel

Добавлено: 09 июл 2009, 15:39
Aent
Ну и для полноты картины замечу, что образец в Like является регистрозависимым и на него не распространяется действие оператора
Option Compare Text
Поэтому "Мама" Like "мама" = False

Re: применение Like В VB Excel

Добавлено: 09 июл 2009, 16:09
kuznetsovSergey
Спасибо всем, всё работает как часы !!

Re: применение Like В VB Excel

Добавлено: 09 июл 2009, 20:19
EducatedFool
Aent писал(а):Ну и для полноты картины замечу, что образец в Like является регистрозависимым и на него не распространяется действие оператора
Option Compare Text
Поэтому "Мама" Like "мама" = False
С каких это пор Like перестал слушаться директиву Option Compare Text?

Проверьте:

Код: Выделить всё

[color=darkblue]Option[/color] [color=darkblue]Compare[/color] [color=darkblue]Text[/color]

[color=darkblue]Sub[/color] test()
    Debug.Print "Мама" [color=darkblue]Like[/color] "мама"
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
Читаем справку по этому оператору:
The behavior of the Like operator depends on the Option Compare statement. The default string-comparison method for each module is Option Compare Binary.

Re: применение Like В VB Excel

Добавлено: 10 июл 2009, 02:24
Aent
Хм. Действительно. Что то у меня ложная память...