Страницы: 1 2 След.
RSS
Поиск по маске
 
Доброго утра всем...

Никак не могу найти, каким образом в макросе организовать поиск по маске. В каждой ячейке нужно изъять часть строки по такой маске "(восемь цифр)/(четыре цифры)" (номер договора). Осложняется тем, что строка может содержать еще один слэш и после него еще цифры. В общем, из строки типа "Договор 55577700/1234Н/123 от 01.01.2001" нужно изъять только "55577700/1234".
Можно ли написать маску типа "чччччччч/чччч", где ч - любая цифра, средствами VBA?
Добавляю вот сюда:
Код
Sub Poisk()
Dim A$
A = "*/*"
D = Cells(Rows.Count, 22).End(xlUp).Row
    For i = 1 To D
        If Cells(i, 22).Value Like A Then
            Cells(i, 32).Value = Cells(i, 22).Value
        End If
    Next i
End Sub
 
"чччччччч/чччч" = "########/####"
Изменено: Влад - 24.07.2015 09:37:50
 
Влад, что-то не сработало, теперь даже копировать перестал...

Да, совсем забыл. Это самое чччччччч/чччч мне потом еще и скопировать нужно.  :idea:
Изменено: AlexTM - 24.07.2015 09:41:03
 
 (только ячейки на ваши столбики поправьте - 22, 32 и т д)
?? как вариант
Код
Sub Poisk()
d = Cells(Rows.Count, 1).End(xlUp).Row
    For i = 1 To d
        If Cells(i, 1).Value Like "* ????????/*" Then
            Cells(i, 2).Value = Split(Cells(i, 1).Value, " ")(1)
        End If
    Next i
End Sub
p.s.
вариант Влада не получился, потому что он вам про формат числа (в этом случае, скорее 00000000/0000 - 0 как одна цифра), а вы про значение ячейки текстом!($)...  :) ... разные подходы могут быть
Изменено: JeyCi - 24.07.2015 10:00:04
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
JeyCi, не работает, теперь только в двух ячейках вида "5550012/0777Д/ №5600 / УУУУ-1783/09 от 01.01.12 г." извлекает только "№5600 ". Странно...
 
JeyCi, да, вопрос сформулировал не совсем точно... )
 
Цитата
AlexTM написал: ." извлекает только "№5600 ". Странно...
потому что вы не предоставили все возможные варианты!!... макрос для случая из 1-го поста (и предположением, что в самом номере договора у вас нет пробелов, а до цифр только 1 слово Договор - т к иного не было указано)!!... поэтому берёт после 1-го пробела... иначе совсем по-другому... не переписываю  ;) если ТЗ изначально озвучивается НЕполно  
Изменено: JeyCi - 24.07.2015 11:38:39
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
JeyCi, вообще да, содержимое может быть абы каким. И с пробелами и без, и со слэшами лишними (после искомой конструкции) и без и т.д. То есть тот, кто водит данные имеет огромный творческий потенциал, чтобы умудряться не повторяться.... Но везде есть то, что я ищу: 12345678/1234

Если попытаться свести все случаи в один общий, то что-то в таком роде (входящая ячейка):
слово(или его отсутствие) & пробел(или его отсутствие) & искомая_часть & пробел(или слэш или буква или пустота) & т.д.
Еще, если поможет, первые три цифры знаю почти всегда. Например, "137*****/****"
Изменено: AlexTM - 24.07.2015 09:58:29
 
AlexTM, покажите файл-пример, согласно правил форума, тогда и идей будет поболее и, возможно, виртуоз(ы) по регулярным выражениям подтянутся. :)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
AlexTM написал: Если попытаться свести все случаи в один общий
... и предоставить это файлом - будет лучше
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
JeyCi, JayBhagavan, все понял, сейчас составлю примерный список. :)
 
да-да, мы такие  :) с периодичностью в 20сек. думаем об одном и том же  
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
JeyCi, 21 сек. (навеяло, Громозека, валерианка... :) )

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Вот он пример, надеюсь, что отразил хотя бы 80% потенциала того человека, который вводит данные...

Да, в процессе корректировки данных (ибо нельзя), целевой текст урезался случайно. Так что "55555***/***" - искомое и копируемое.
Изменено: AlexTM - 24.07.2015 10:15:34
 
А давайте на регулярках:)
Код
Sub Poisk()
    Set RegEx = CreateObject("VBScript.RegExp")
    D = Cells(Rows.Count, 1).End(xlUp).Row
    On Error Resume Next
    With RegEx
        .Global = 0: .Pattern = "\d{7,8}/\d{4}"
        For i = 1 To D
            Cells(i, 32).Value = .Execute(Cells(i, 22).Value)(0).Value
        Next
    End With
End Sub
 
=ЕСЛИ(ЕЧИСЛО(ПОИСК("*Н*";С2));ЛЕВСИМВ(C2;14);"")
 
C2 - это адрес вашей ячейки

А 14 это количество извлекаемых знаков
Изменено: Radik_82 - 24.07.2015 10:20:42
 
Влад, сработало однако! Только об этом явлении ничего не знаю.  :oops:  В чем суть метода? В двух словах на этом примере.
 
Цитата
AlexTM написал: То есть тот, кто водит данные имеет огромный творческий потенциал
Может с этого начать, раз уж макросы используете? удобство работы с данными обратно пропорционально творческому потенциалу при их вводе
Согласие есть продукт при полном непротивлении сторон
 
Radik_82, формулы применять не могу, т.к. не знаю даже столбца порой. Да и тормозят они обработку. Но спасибо.

Sanja, есть непобедимые "креативщики".  :(
 
Цитата
AlexTM написал:
В чем суть метода?
Изучайте:) https://ru.wikibooks.org/wiki/Регулярные_выражения
 
AlexTM, было бы не плохо в примере указывать не только как есть, но и что из этого должно получиться.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Влад, благодарю!! :excl:
 
JayBhagavan,  :)
 
UDF
Код
Function Dogovor(iCell As Range) As String
    Dim RegExp As Object
        Set RegExp = CreateObject("vbscript.regexp")
    With RegExp
        .Pattern = "(\d{8}/\d{4})"
        .Global = True
        Dogovor = .Execute(iCell)(0)
    End With
End Function
 
Цитата
AlexTM написал: есть непобедимые "креативщики"
ну, ну. они вам еще проблем создадут. а если сразу ограничить их возможности при вводе данных, глядишь и "костылей" в дальнейшем меньше понадобится.
Согласие есть продукт при полном непротивлении сторон
 
Kuzmich, интересно, спасибо!!

Sanja, да они уже создали. Упр.учет не могу настроить, ибо в 1с не пишутся комментарии, а служба поддержки говорит, что прикрепить комментарий к оборотке никак нельзя. Но пока будет так.


Всем спасибо еще раз. :idea:
Изменено: AlexTM - 24.07.2015 10:36:51
 
Не регулярками, но УДФ:
Код
Function jjj(cl As Range) As String
    Set cl = cl.Cells(1)
    jjj = ""
    arr = Split(cl, "/")
    i1 = LBound(arr) + 1
    i_n = UBound(arr)
    For i = i_n To i1 Step -1
        part1$ = Right(arr(i - 1), 7)
        part2$ = Left(arr(i), 4)
        If IsNumeric(part1) And IsNumeric(part2) And Len(part1) = 7 And Len(part2) = 4 Then
            jjj = part1 & "/" & part2
            Exit For
        End If
    Next i
End Function
Изменено: JayBhagavan - 24.07.2015 10:44:11

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, а это сработает для "184/12/5555012/0865Т/ППП-177/12 от 01.04.2012" ?
 
AlexTM, а проверить самому что мешает? УДФ вернула:
5555012/0865

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
Страницы: 1 2 След.
Читают тему
Наверх