Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
19.04.2024, 20:47:54

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

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

Сообщений: 25


Просмотр профиля
« : 26.04.2018, 20:10:25 »

Добрый день
В общем такая задача.
Необходимо определить поступившие платежи по назначению в соответствии с ФИО договора.
Все платежи поступают на один текущий счет

в банковской выписке в назначении платежа, либо в графе отправитель, либо в графе БИН/ИИН есть необходимые данные.
по отправителю и по БИН/ИИНу поиск осуществлять не особо составляет труда.
а вот в поле "Назначение платежа" бухгалтера разных компаний пишут кто во что горазд.
кроме суммы, могут написать ФИО, или ИИН, или РНН, или СИК или номер исполнительного листа, либо решение суда.
Есть отдельный файл, в котором в разных графах имеется вся эта информация. Эта информация состоит из цифр, символов "№", "-", "/", или "FV". Например, ИИН - это 12 подряд цифр, номер исполнительного листа может быть вида "№23-75/1", решение суда - вида "FV 12-54". В любом случае, длина полей, и содержимое - может быть разное. Даже для одной графы.
Набор записей этого файла - больше 120 тыс. Это портфель просроченной задолженности

Задача.
Из банковской выписки из назначения платежа выбирать подстроку произвольной длины, состоящей подряд из цифр и вышеуказанных символов.
Затем через поиск в файле - портфеле, нужно определить строку (ну а далее, значение из определенной, соответствующей ячейки), на которой встречается искомая комбинация.
Ну и так далее по всему полю "Назначения платежа" и далее по всей банковской выписке.
Измучился через VBA делать.
Помощь нужна.
Записан
vikttur
Глобальный модератор
Ветеран
*****

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

Сообщений: 1 816



Просмотр профиля
« Ответ #1 : 26.04.2018, 20:34:30 »

Вы только пожаловаться или пример все же покажете?
Записан
Nurbol
Новичок
*

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

Сообщений: 25


Просмотр профиля
« Ответ #2 : 27.04.2018, 06:24:29 »

Простите.
Файл прошу после прочтения съесть и уничтожить.

там два листа:
1. банковская выписка
2. Некая таблица, выполняющая роль базы для поиска.

Наши девочки из назначения платежа (в выписке) копируют более-менее осмысленный набор цифр-символов.
затем запускают поиск через CTRL+F в базе. находят соответствующего человека.
и сажают платеж на него.
Записан
Nurbol
Новичок
*

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

Сообщений: 25


Просмотр профиля
« Ответ #3 : 27.04.2018, 14:56:29 »

Так никто ничего и не скажет?
Записан
Nurbol
Новичок
*

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

Сообщений: 25


Просмотр профиля
« Ответ #4 : 28.04.2018, 09:21:06 »

Ну же!
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

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

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #5 : 28.04.2018, 09:34:34 »

Ну же!
Ознакомьтесь с правилами форума. Подъем темы бессмысленными сообщениями, цель которых только сам подъем темы запрещен.
В следующий раз будете привлекать внимание подобным образом - тему закрою.
Здесь все помогают по собственному желанию в свободное время и вникать в чужую задачу по принуждению никто не будет. А задача может иметь не самое простое решение, чтобы взять и выделить на её решение час, а то и более. Так же вполне возможно, что описание задачи непонятно и никто не хочет угадывать что реально надо. Помните об этом каждый раз, когда появится желания "нукать" тут кому-то. Вам здесь никто ничем не обязан, чтобы кому-то "нукать". Это только отталкивает и отбивает желание помогать.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

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

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #6 : 28.04.2018, 09:41:01 »

Ну вот из интереса, скачал файл. Вы пишите:
Наши девочки из назначения платежа (в выписке) копируют более-менее осмысленный набор цифр-символов
а в приложенном файле поле "Назначение платежа" пустое. Нет ни одной заполненной ячейки.
Да даже если так: что такое "более-менее осмысленный набор символов"? Как Excel должен понять какой набор брать в качестве значения для поиска? На основании чего? Что-то мне подсказывает, что задача практически не имеет решения, пока не определены все возможные сочетания, которые надо брать в качестве искомых в базе.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Nurbol
Новичок
*

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

Сообщений: 25


Просмотр профиля
« Ответ #7 : 28.04.2018, 10:05:32 »

Нобор состоит из ряда цифр или символов "№", "-", "/", или "FV"
Записан
Nurbol
Новичок
*

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

Сообщений: 25


Просмотр профиля
« Ответ #8 : 28.04.2018, 12:50:51 »

Извините, столбцы съехали.
Назначение платежа стало в столбце "Кредит"
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

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

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #9 : 28.04.2018, 15:44:54 »

Нобор состоит из ряда цифр или символов "№", "-", "/", или "FV"
к сожалению лично мне это ни о чем не говорит. Вот нашел я тире("-") - что делать-то дальше? Что брать для поиска? Или "FV" нашел - искать в итоге что? "FV"? А смысл? Распишите поточнее, что надо делать, если нашли какое-то ключевое слово. Или они все в определенном порядке должны быть в ячейке. После того как нашли символы обязательно знать что делать дальше: есть подозрение, что на основании символов надо как-то определить что после них или до них. Но как - Вы не говорите.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Nurbol
Новичок
*

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

Сообщений: 25


Просмотр профиля
« Ответ #10 : 28.04.2018, 16:33:50 »

Пример.
Вот в первой строке Назначение платежа.

" СФ# 4649601/18-7875 за 21.04.2018 ЗП#  Ст.-Окончательный.Еңбек
 ақы.  Мемлекеттік мекеме қызметкерлерінің еңбек ақысынан ұсталынған н
есие қарызы 42% -2018 ж   сәуір айы Иванов И.И. ИИН791007401375 решение суда №2
-387/16 29.07.2016 ж  Мақатаев "

Начинаем перебор по одному символу. Если символ входит в один из наших искомых, то смотрим следующий. Если и следующий входит в искомый перечень, то слово для поиска становится из двух символов. и просматриваем следующий. Если третий символ входит в искомый перечень, то слово для поиска становится из этих трех символов. Затем смотрим четвертый символ. Если он не входит в перечень искомых символов, то наше слово для поиска состоит из трех символов.
Затем через CTRL+F ищем это слово в листе "база". Если нашли, то каждый такой поиск из соответствующей строки вытаскиваем значение из столбца "Договор" и "Заемщик".

Например.
В первом назначении платежа на первой, второй и третьих позициях находятся символы, не входящие  искомый перечень.
А вот четвертым идет символ "#".
С него теперь начинается слово для поиска.
Просматриваем следующую букву. Это пробел. Пробел не входит в искомый перечень символов.
Значит наше слово для поиска ограничивается одним "#". Так как длина слова не более 1, то пропускаем поиск.
И переходим к поиску с позиции после пробела - это "4".
Этот символ входит в искомый перечень.
Значит наше слово для поиска состоит из "4". Тогда начинаем просматривать последующие символы, пока не дойдем до символа, не входящего в искомый перечень.
Так сказать, нанизываем по одному символы в наше слово для поиска, пока не дойдем до символа, который не входит в перечень.
В нашем примере это - 21 символ, пробел.
Слово для поиска будет "4649601/18-7875" - с шестого по 21-й символ из этой ячейки.
Переходим на лист "База", нажимаем CTRL+F и ищем это "4649601/18-7875".
Не находим.
Возвращаемся и продолжаем перебирать в ячейке дальше.
Начинаем перебирать с 22 позиции аналогично вышенаписанному.
Доходим до ИИН в этом назначении платежа. То есть подряд стоят символы "791007401375"
Запускаем поиск в листе "База" и находим в строке 4, где в столбце "ФИО" и "договор" указано "Иванов Иван Иванович" и "№15636778-1417-ЭК/2007 от 13.09.2007". Эту информацию записываем рядом с назначением платежа. Если находится несколько результатов - все они должны быть перечислены дальше, в следующих столбцах.
Дошли до последнего символа и переходим на следующую ячейку выделенного диапазона
И так далее.
Как вы поняли, порядок символов может быть разный. Разве только "FV" - это два подряд идущих символа.
Надеюсь так понятнее.
« Последнее редактирование: 28.04.2018, 16:40:35 от Nurbol » Записан
Nurbol
Новичок
*

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

Сообщений: 25


Просмотр профиля
« Ответ #11 : 28.04.2018, 16:44:50 »

пытался сделать следующим образом.
Создал массив, в который внес все варианты: цифры от 0 до 9, "#", "/", "-", "FV"
Затем цикл, внутри еще один.
Первый цикл ищет первый совпадающий символ.
Второй циклы запускается, если символ нашелся в массиве. Он проверяет следующие и И по одному добавляет к уже найденной строке. Пока не доходит до символа, который не входит в массив.

Полученную строку нужно найти.

В общем в циклах запутался. Делаю через For... Next
А видимо надо через While/Until
Но тут мозг уже вскипел.

Записан
sboy
Постоялец
***

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

Сообщений: 207


Просмотр профиля E-mail
« Ответ #12 : 03.05.2018, 14:48:16 »

Добрый день.
Т.к. в файле-примере нет желаемого результата, проверить на правильность не имею возможности)
Также не совсем понятно про вывод результата (сделал как понял)
символ пробел у вас не входит в допустимые, а в примере ИИН в 7 строке разделен пробелом...
реализация функцией пользователя, но можете переделать на макрос с циклом по ячейкам
Код: (vb)
Function nurbol(t As String)
    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(2).UsedRange.Find(.Execute(t)(x), lookat:=xlWhole)
                    If Not r Is Nothing Then
                        s = Sheets(2).Cells(r.Row, 4) & Chr(10) & Sheets(2).Cells(r.Row, 5) & 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
End Function
Записан
Nurbol
Новичок
*

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

Сообщений: 25


Просмотр профиля
« Ответ #13 : 03.05.2018, 15:41:58 »

Это похлеще чем я предполагал.

Круть ваще жуть!
Жуть как круть!

Куча вопросов, но не сейчас.
Пару дней занят сильно, после завтра сяду протестю.

Спасибо огромное в любом случае!
Я уж не надеялся...
Записан
Nurbol
Новичок
*

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

Сообщений: 25


Просмотр профиля
« Ответ #14 : 03.05.2018, 20:05:10 »

пока что выявил, что на 2016 и на 2013 офисе ведет себя по разному
на 2016 офисе поиск осуществляется точно по подстроке. Т.е. значение в ячейке должно точно соответствовать искомой подстроке
Это не в формуле, а в офисе видимо дело. Если искать подстроку, которая на 1 ячейку короче, чем значение в ячейке определенной, то офис ее не находит. А если добавить звездочку ("*"). то CTRL+F находит. Также видимо действует и формула.
Но допиливать надо будет именно формулу.

А как задать в формуле столбец, из которого нужно брать результирующее значение?
Понял, что нужно будет вставить ее здесь "s = Sheets(2).Cells(r.Row, 4)" вместо четверки, и понял, что нужно передать ее в параметрах функции. А как? Ну если совсем не сложно. Если сложно - буду сам разбираться.

Другой вопрос: а что делает функция, если в ячейке несколько возможных вариантов? Выводит первый попавшийся?
А как выводить все варианты?

И - да! в 7 строке есть пробел (а точнее символ переноса вроде).
Как вот здесь реализован поиск? Дело в том, что в 2016 Ексель нашел Кузнецову, а в 2013 - не нашел.

Записан
Страниц: [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