Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
29.03.2024, 13:19:25

Войти
Хотите поблагодарить участника за дельный совет? Нажмите [Повысить]. Так вы заслуженно поднимите репутацию активному участнику.
33 233 Сообщений в 5 454 Тем от 6 750 Пользователей
Последний пользователь: Alex1210
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Поиск ряда определенных символов
Страниц: 1 [2]  Все   Вниз
Печать
Автор Тема: Поиск ряда определенных символов  (Прочитано 10019 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sboy
Постоялец
***

Репутация: +27/-0
Офлайн Офлайн

Сообщений: 207


Просмотр профиля E-mail
« Ответ #15 : 04.05.2018, 09:26:51 »

значение в ячейке должно точно соответствовать искомой подстроке
это определяется параметром поиска, можно изменить на поиск части
Код: (vb)
lookat:=xlWhole
lookat:=xlPart

вместо четверки, и понял, что нужно передать ее в параметрах функции. А как?
вместо четверки и напишите какой столбец нужен. Или он не известен заранее?
а что делает функция, если в ячейке несколько возможных вариантов?
перебирает и соединяет все
в 2016 Ексель нашел Кузнецову, а в 2013 - не нашел.
тут не подскажу, т.к. работаю только на 2010, нет возможности проверить. В 2010 тоже не находит (из-за пробела)
Записан
Nurbol
Новичок
*

Репутация: +1/-0
Офлайн Офлайн

Сообщений: 25


Просмотр профиля
« Ответ #16 : 04.05.2018, 12:34:01 »

это определяется параметром поиска, можно изменить на поиск части
понятно, будем пробовать

вместо четверки и напишите какой столбец нужен. Или он не известен заранее?

Да, неизвестен. Точнее, известен, но нужно передать его в параметрах функции так как разные пользователи с разными файлами. Но здесь я попробую сам. Если не получится - тогда к вам обращусь. Пока не хочу сильно тревожить - итак хорошо помогли, чтобы отвлекать на такие мелочи.

перебирает и соединяет все
А вот это интересно. Есть возможность, как-то их в массив, что ли, собирать, а выдавать по индексу, который передается вместе с параметрами функции?

тут не подскажу, т.к. работаю только на 2010, нет возможности проверить. В 2010 тоже не находит (из-за пробела)
Ладно, будем экспериментировать. Может "lookat:=xlPart" поможет.
Код: (vb)
lookat:=xlPart


Спасибо огромное.
Записан
Nurbol
Новичок
*

Репутация: +1/-0
Офлайн Офлайн

Сообщений: 25


Просмотр профиля
« Ответ #17 : 18.05.2018, 08:09:02 »

В общем, решил выложить полный код, который в результате получился у меня.
Кому-то в помощь, а кто-то может критику подаст.
Всему буду рад.
Код: (vb)

Function BNBFinder(NaznacheniePlatezha As String, ListBazyPoiska As String, StolbecFIO As Integer, StolbecDBZ As Integer) As String
    '
    '
    '
    'NaznacheniePlatezha - ячейка Назначение платежа из банковской выписки текст которой будет анализироваться
    'ListBazyPoiska - Название листа, в котором находятся все разнородные данные из базы и откуда будет производиться поиск
    'StolbecFIO - номер столбца, содержащий ФИО должника, которого требуется определить
    'StolbecDBZ - номер столбца, содержащий ДБЗ должника, которого требуется определить
    '
    '
    '
   
    Dim SheetNumber As Integer
    Dim t As String
    Dim nurbol As String
    Dim x As Integer
    Dim r
    Dim s
    s = ""
   
    SheetNumber = Worksheets(ListBazyPoiska).Index
    t = NaznacheniePlatezha
    t = Replace(NaznacheniePlatezha, Chr(10), "") 'удаляем переносы строк
   
    With CreateObject("VBscript.RegExp")
        .Global = True
        .Pattern = "(FV)?[-#0-9?/]{6,}"
        If .test(t) Then
            For x = 0 To .Execute(t).Count - 1
                Set r = Sheets(SheetNumber).UsedRange.Find(.Execute(t)(x), lookat:=xlWhole)  'xlPart)   'xlWhole)
                    If Not r Is Nothing Then
                        s = s + "ФИО: " & Sheets(SheetNumber).Cells(r.Row, StolbecFIO) & Chr(10) & "ДБЗ: " & Sheets(SheetNumber).Cells(r.Row, StolbecDBZ) & Chr(10)
                    End If
            Next x
             
            If Len(s) > 0 Then
                nurbol = Left(s, Len(s) - 1)
            Else: nurbol = ""
            End If
        End If
    End With
    BNBFinder = nurbol
End Function
Записан
Nurbol
Новичок
*

Репутация: +1/-0
Офлайн Офлайн

Сообщений: 25


Просмотр профиля
« Ответ #18 : 18.05.2018, 08:10:53 »

Только пока не разобрался, как работать с шаблонами
Код: (vb)
.Pattern = "(FV)?[-#0-9?/]{6,}"  


Может дадите направление, где лучше всего почитать, что-то толком не могу сориентироваться
Записан
sboy
Постоялец
***

Репутация: +27/-0
Офлайн Офлайн

Сообщений: 207


Просмотр профиля E-mail
« Ответ #19 : 18.05.2018, 09:14:01 »

ищите в интернете по запросу "Регулярные выражения", RegExp
для тренировки использую сайт
Записан
Страниц: 1 [2]  Все   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru