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

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
kuznetsovSergey
Сообщения: 163
Зарегистрирован: 05 мар 2009, 11:27

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

Спасибо заранее
Аватара пользователя
mc-black
Сообщения: 250
Зарегистрирован: 08 май 2008, 16:09
Откуда: Россия, Нижний Новгород
Контактная информация:

___DELETED___
На заказ: VBA, Excel mc-black@yandex.ru
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

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

[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]
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/

Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

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

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

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

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

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

If cell Like "*мама*" Then...
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Ну и для полноты картины замечу, что образец в Like является регистрозависимым и на него не распространяется действие оператора
Option Compare Text
Поэтому "Мама" Like "мама" = False
Андрей Энтелис,
aentelis.livejournal.com
kuznetsovSergey
Сообщения: 163
Зарегистрирован: 05 мар 2009, 11:27

Спасибо всем, всё работает как часы !!
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

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.
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/

Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Хм. Действительно. Что то у меня ложная память...
Андрей Энтелис,
aentelis.livejournal.com
Ответить