Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2016, 15:02   #1
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
Вопрос поиск числа из 10 цифр в диапазоне и вывод в msgbox

Уважаемые гуру VBA!
Помогите с макросом, пожалуйста, подобного гугл не нашел, или я не так искал...
Имеем книгу Excel 2003. Нужно макросом найти число из 10 цифр в диапазоне (число должно быть всего одно) и вывести в сообщение...
Пробовал .Find.Text = "[0-9]{10}", но что-то vba ругался на все что не предлагал ему!

В примере ищем код предприятия. В итоге должны найти "7719897248" и выдать в сообщении.
Вложения
Тип файла: xls пример.xls (17.5 Кб, 21 просмотров)
xamillion вне форума Ответить с цитированием
Старый 05.08.2016, 15:54   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Не знаю можно ли через .find.text регулярку искать, но есть вариант в цикле по строках пройтись. Данные все одно же только в 1 столбце есть
Код:
Sub findSmth()
    Dim objRegExp As Object
    Dim r As Integer
    r = 1
    Do While r <= ActiveSheet.Cells(ActiveSheet.Cells.Rows.Count, 1).End(xlUp).Row
    Set objRegExp = CreateObject("VBScript.RegExp")
    objRegExp.Global = True
    objRegExp.Pattern = "[0-9]{10}"
    If objRegExp.Test(Cells(r, 1)) Then MsgBox Cells(r, 1)
    r = r + 1
    Loop
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 05.08.2016, 16:29   #3
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
Радость

Спасибо... так как искомый код в ячейке А2 упростил...
Код:
Sub findSmth()
    Dim objRegExp As Object
    Dim r As Integer
    
    Set objRegExp = CreateObject("VBScript.RegExp")
    objRegExp.Global = True
    objRegExp.Pattern = "[0-9]{10}"
    If objRegExp.Test(Cells(2, 1)) Then MsgBox Cells(2, 1)
    
End Sub
Только MsgBox Cells(2, 1) выдает все содержимое ячейки, а нужен только код (эти самые 10 цифр)... до этого этапа я уже доходил, только другими методами!
xamillion вне форума Ответить с цитированием
Старый 05.08.2016, 17:17   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Cаша, есть категория форумчан, для которых показать направление решения - это космически далеко от решить задачу!
весь набор букв, цифр и символов, который ты оформляешь в теги "код", если он строго не решает поставленную задачу - для них совершенно бесполезная последовательность знаков
xamillion, используйте этот
Код:
Sub findSmth()
    Dim objRegExp As Object
    Set objRegExp = CreateObject("VBScript.RegExp")
    objRegExp.Global = True
    objRegExp.Pattern = "[0-9]{10}"
    If objRegExp.Test(Cells(2, 1)) Then MsgBox objRegExp.Execute(Cells(2, 1))(0)
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 05.08.2016 в 17:21.
IgorGO вне форума Ответить с цитированием
Старый 05.08.2016, 18:53   #5
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

добрый вечер,вариант макроса,кнопка test

Код:
 Sub test()
    Dim z, i&: z = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
   With CreateObject("VBScript.RegExp"):  .Pattern = "\d{10}\,"
   For i = 1 To UBound(z)
     If .test(z(i, 1)) Then MsgBox Left(.Execute(z(i, 1))(0), 10)
   Next
   End With
End Sub
Вложения
Тип файла: xls example_5_08_2016_prog.xls (41.5 Кб, 11 просмотров)

Последний раз редактировалось svsh2016; 05.08.2016 в 19:03.
svsh2016 вне форума Ответить с цитированием
Старый 05.08.2016, 19:10   #6
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

добавил еще вариант

Код:
 Sub test1()
    Dim z, i&: z = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
   With CreateObject("VBScript.RegExp"):  .Pattern = "\d{10}(?=,)"
   For i = 1 To UBound(z)
     If .test(z(i, 1)) Then MsgBox .Execute(z(i, 1))(0)
   Next
   End With
End Sub
svsh2016 вне форума Ответить с цитированием
Старый 07.08.2016, 12:53   #7
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Cаша, есть категория форумчан, для которых показать направление решения - это космически далеко от решить задачу!
Ну, тут чертовски верно! Особенно если с подобным встречаешься не то чтобы редко, а в первый раз лоб в лоб, и понимание приходит позже и туго, если вообще приходит, в виду того что эта категория форумчан - простые юзеры. Это все равно, что заставить обезьяну доказать теорему Ферма! Рано или поздно она, конечно это сделает... через пару миллионов лет, как в нашем случае (по теории Дарвина)...
Цитата:
Сообщение от svsh2016 Посмотреть сообщение
добавил еще вариант
Код:
.Pattern = "\d{10}(?=,)"
вот тут точно это выглядит как набор букв, цифр и символов, на первый взгляд непонятный!

Спасибо, я надеюсь обезьяны все-таки способны к обучению... если кого обидел, извините - это я про себя в первую очередь!
xamillion вне форума Ответить с цитированием
Старый 07.08.2016, 15:20   #8
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

добрый день,попробуйте еще вариант,кнопка test3


Код:
Sub test3()
 Dim z, i&: z = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
   With CreateObject("VBScript.RegExp"): .Global = True:  .Pattern = "\d{10}(?=[^\d\b])"
   For i = UBound(z) To 1 Step -1
     If .test(z(i, 1)) Then MsgBox .Execute(z(i, 1))(0)
   Next
   End With
End Sub
Вложения
Тип файла: xls example_7_08_2016_prog.xls (49.0 Кб, 12 просмотров)
svsh2016 вне форума Ответить с цитированием
Старый 08.08.2016, 09:19   #9
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
Радость

Цитата:
Сообщение от svsh2016 Посмотреть сообщение
добрый день,попробуйте еще вариант,кнопка test3
ого, спасибо...
освоил еще и RegExp! А регулярные выражения - это сила!
Еще раз спасибо.
xamillion вне форума Ответить с цитированием
Старый 08.08.2016, 09:47   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
освоил еще и RegExp!
Отлично! что тут скажешь?
xamillion, а можете мне обьяснить, что значит это запись
Код:
""\d{10}(?=[^\d\b])"
и как она работает?
а точнее так:
это: \d{10} - понятно
а для чего там это: (?=[^\d\b])

спасибо!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 08.08.2016 в 09:52.
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск совпадений в диапазоне и поставление значения соседней от совпавшей ячейки, Поиск совпадений в диапазоне ANshag Microsoft Office Excel 3 08.09.2015 16:35
в выделенных ячееках найти числа вне диапазона 5.43 до 5.47 заменить на случаные числа в этом диапазоне? alx83 Microsoft Office Excel 1 22.06.2012 05:37
Поиск факториала суммы цифр числа с использование только процедур или функций. Zzoyberg Паскаль, Turbo Pascal, PascalABC.NET 2 08.12.2011 01:18
Msgbox вывод суммы Palomnik1096 Microsoft Office Excel 5 13.12.2010 13:12