Страницы: 1 2 След.
RSS
Поиск определённой комбинации цифр
 
Всем добрый день! Очень срочно нужна помощь. У меня есть файл с десятизначными числами, записанными в столбик. Их около 10000 штук. Мне надо из этих чисел найти числа с определенной комбинацией цифр, к примеру xxyy, xyxy, x0y0 и т.п. Может быть есть какая нибудь формула?  
Заранее благодарна.)
 
Есть. Условное форматирование, ВПР, ПОИСКПОЗ..
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Спасибо. Но это не то. Или у меня ничего не получилось.  
Попробую объяснить, что именно я хочу получить.  
Допустим, я хочу в поисковик вбить - "xxyy", что бы он мне нашёл все числа с комбинациями цифр: 5566, 8899, 7722 и т.д.  
.)
 
Была такая тема, поищите. Может, откликнутся те, кто в ней активно участвовал (я - нет).
 
При такой постановке задачи вам нужно поискать по фразам: "Регулярные выражения" или "RegExp". По моему как раз ваш случай.
Редко но метко ...
 
У меня файл сохранён как Nilem - Сортировка ячеек с цифрами по маске - post_254305.xls Т.е. ищем post_254305.xls http://www.planetaexcel.ru/forum.php?thread_id=31071&page_forum=2&allnum_forum=62
 
{quote}{login=Казанский}{date=02.02.2012 12:52}{thema=}{post}Была такая тема, поищите. Может, откликнутся те, кто в ней активно участвовал (я - нет).{/post}{/quote} Похожая тема http://forum.msexcel.ru/microsoft_excel/vyborka_krasivyh_nomerov-t5937.0.html
 
Примерно так..  
Sub tt()  
Const maska = "1123"  
Dim i&, a  
a = [A1:A10000]
For i = 1 To UBound(a)  
If a(i, 1) Like "*" & maska & "*" Then [B2] = [A1]
Next  
End Sub
 
Ерунду конечно написал.  
If a(i, 1) Like "*" & maska & "*" Then Range("B" & i) = Range("A" & i)
 
Попробовал с регулярными, вроде бы все просто:  
 
Sub bb()  
Dim x  
With CreateObject("vbscript.regexp")  
   .Pattern = "(.)(.)\1\2"  
   For Each x In [A1:A10000].Value
       If .test(x) Then Debug.Print x  
   Next  
End With  
End Sub  
 
Даже можно написать "переводчик" строк типа "xxyy" на язык регулярных.  
Но! Если х и у - обязательно разные цифры, то такая простая маска не пройдет.  
Написать условие типа "не равно предыдущему найденному" у меня не получилось - может, кто-то сделает?  
Можно, конечно, заменить .test на .execute и просмотреть коллекцию подстрок - если все они различны, то условие выполнено.  
Но опять проблема: допустим, число 7777474. По использованной в коде маске будет найдено "7777", но подстроки одинаковы и условие не выполнено. А "правильная" подстрока "7474" найдена не будет.
 
Ничего не могу понять.  
Печалька.(  
 
http://forum.msexcel.ru/microsoft_excel/vyborka_krasivyh_nomerov-t5937.0.html - вот что мне нужно, занимаюсь именно этим! Но не могу понять как что надо делать... вот хоть убейте! Ну чайник я совсем!
 
Sub Макрос1()  
 
  Dim MyCheck  
  Dim myRange As Range  
   Set myRange = Worksheets(1).Range("A2:A10000") 'с 2-й строки,если есть шапка  
MyValue = InputBox("Введите маску поиска")  
 
For Each chislo In myRange  
MyCheck = Str(chislo)  
Poisk = InStr(1, MyCheck, MyValue)  
 
   If Poisk <> 0 Then  
       chislo.Select  
    Selection.Offset(0, 1).Select 'в ячейке справа(В) проставим признак 1  
       Selection.Value = 1  
   End If  
Next  
 
End Sub
 
Ааа, что с этим делать?  
Говорю же... я совсем полный ноль в этом.(
 
ALT F8  
выполнить Макрос1
 
Так, вроде с этим то я разобралась... но он находит только одно значение. А мне нужно, что бы он нашел сразу все номера с комбинацией хуху. Как это сделать?
 
{quote}{login=}{date=02.02.2012 02:24}{thema=}{post}Ничего не могу понять.  
Печалька.(  
 
http://forum.msexcel.ru/microsoft_excel/vyborka_krasivyh_nomerov-t5937.0.html - вот что мне нужно, занимаюсь именно этим! Но не могу понять как что надо делать... вот хоть убейте! Ну чайник я совсем!{/post}{/quote}  
Начните с того, что выложите пример в виде "что есть" и "что хочу" в соответствии с правилами форума.  
В качестве примера выкладываю файл из указанной ссылки, может это прояснит ситуацию
 
Мне нужно разбить номера, которые указаны в столбце 1 на номера типа (с определённой комбинацией цифр):  
926251хуху  
926251хуух  
926251ххуу  
926251хууу  
926251х0у0  
926251хххх  
926251ххху
 
Заготовка:  
 
Sub tt()  
Dim a(), i&, t(1 To 4)  
a = [a1].CurrentRegion.Value
For i = 1 To UBound(a)  
t(1) = Mid(a(i, 1), 7, 1)  
t(2) = Mid(a(i, 1), 8, 1)  
t(3) = Mid(a(i, 1), 9, 1)  
t(4) = Mid(a(i, 1), 10, 1)  
 
Select Case True  
Case t(1) = t(3) And t(2) = t(4): MsgBox a(i, 1)  
End Select  
 
Next  
 
End Sub  
 
Развить, добавить вывод по массивам (быстро) или сразу по листам (медленно).
 
Тут, собсно, можно формировать номера двумя вложенными циклами по шаблонам в порядке убывания "распальцовки" и вычеркивать из исходного списка.
 
Следующий шаг (не стал возится с массивами, потянет и так):  
 
Sub tt()  
Dim a(), i&, t(1 To 5), xyxy, x3, x4, x5, x6, xxxx, x8, x9, x10, x11  
a = [a1].CurrentRegion.Value
For i = 1 To UBound(a)  
t(1) = Mid(a(i, 1), 6, 1)  
t(2) = Mid(a(i, 1), 7, 1)  
t(3) = Mid(a(i, 1), 8, 1)  
t(4) = Mid(a(i, 1), 9, 1)  
t(5) = Mid(a(i, 1), 10, 1)  
 
Select Case True  
Case t(2) = t(3) And t(3) = t(4) And t(4) = t(5): xxxx = xxxx + 1: Sheets("xxxx").Cells(xxxx, 1) = a(i, 1)  
Case t(2) = t(4) And t(3) = t(5): xyxy = xyxy + 1: Sheets("xyxy").Cells(xyxy, 1) = a(i, 1)  
 
End Select  
 
Next  
 
End Sub  
 
 
 
Дальше делать надоело, рутина...
 
Что то не могу сообразить что мне нужно сделать!.(
 
Прописать следующие условия в Case и вывод в соотв. листы.  
Для удобства можно заменить имена переменных x3 например на xxyy (1234 нельзя, лучше на abcd, а VIP можно и так написать).  
Только соблюдайте "виповость" - т.е. первым должен выполняться более важный отбор. Чтоб номер 777777 не попал в группу xyxy :)  
Можно в начале кода добавить предварительную очистку всех листов (кроме первого), чтоб там мусор какой не остался от предудущих работ.
 
Я смотрю, что основная проблема - именно "виповость".  
Что такое VIP?  
Что такое 251251? Последняя цифра может быть любая или должна быть 2?  
1234 - это любая последовательность последних 4-х цифр или начиная с 2, т.е.9252512345? Или это уже VIP? Хотя что его искать - он один такой, для него можно свой Case первым написать :)  
Ну и как правильно распределить  - что главнее, если номер попадает под два критерия сразу.  
Например, 7000 - это xyyy, или x0y0, или всёже VIP?  
 
Остальное ерунда - условий Case можно написать хоть 100 разных. Даже например для x000 - если t3/4/5 равно 0, а t2 не равно - отбираем в... куда?
 
{quote}{login=Hugo}{date=02.02.2012 06:21}{thema=}{post}Следующий шаг (не стал возится с массивами, потянет и так):...  
Дальше делать надоело, рутина...{/post}{/quote}  
Off Простите, Hugo, вы не интересовались расценками на "козырные" номера для авто-, мото-, теле-, фото- и пррррр?.. И если, скажем, с продажи каждого такого цифросочетания иметь соответствующий прОцент, то, наверное, имела бы место быть ваша соответствующая заинтересованность?.. Вот только ТС - MonoMonkey - куда-то запропастился/лась, как бы  он/а на это посмотрел/а?.. Или пирог дошел и ... можно линять по-аглицки?.. ;)
 
Вариант
 
Простите, а чем не подходит условное форматирование типа "текст содержит..." или "значение ячейки равно/больше/меньше..."???
 
{quote}{login=Казанский}{date=02.02.2012 01:40}{thema=}{post}Написать условие типа "не равно предыдущему найденному" у меня не получилось - может, кто-то сделает?{/post}{/quote}  
Если правильно понял вопрос, так:  
 
var z = /(.)[^\\1]/;
var x = "12"; // True  
var x = "11"; // False
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
{quote}{login=Z}{date=02.02.2012 07:40}{thema=Re: }{post}{quote}{login=Hugo}{date=02.02.2012 06:21}{thema=}{post}Следующий шаг (не стал возится с массивами, потянет и так):...  
Дальше делать надоело, рутина...{/post}{/quote}  
Off Простите, Hugo, вы не интересовались расценками на "козырные" номера для авто-, мото-, теле-, фото- и пррррр?.. И если, скажем, с продажи каждого такого цифросочетания иметь соответствующий прОцент, то, наверное, имела бы место быть ваша соответствующая заинтересованность?.. Вот только ТС - MonoMonkey - куда-то запропастился/лась, как бы  он/а на это посмотрел/а?.. Или пирог дошел и ... можно линять по-аглицки?.. ;){/post}{/quote}  
Ну в общем в правильном направлении мысль - рутину за просто так делать неохота.  
То, что было интересно мне и трудно ТС - я вроде сделал (и не только я , MCH  
тоже), дальше пусть работает тот, кто за это деньги получает - там уже ничего сложного.
 
{quote}{login=nerv}{date=03.02.2012 11:22}{thema=Re: }{post}{quote}{login=Казанский}{date=02.02.2012 01:40}{thema=}{post}Написать условие типа "не равно предыдущему найденному" у меня не получилось - может, кто-то сделает?{/post}{/quote}  
Если правильно понял вопрос, так:  
 
var z = /(.)[^\\1]/;
var x = "12"; // True  
var x = "11"; // False{/post}{/quote}  
Ах, если бы ;)  
[^\\1] означает не равно "\" и не равно "1".
Попробуй протестировать "21", "22", "a\", "\\".
 
Казанский, Ваша правда.  
 
>[^\\1] означает не равно "\" и не равно "1".
Да, но при этом в примере, приведенном мной ниже, если убрать первый слеш, то совпадение будет : )  
 
Тогда так  
var x = "7777574";  
var z = /(\d)(?!\1)\d/g;
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
Страницы: 1 2 След.
Читают тему
Наверх