Страницы: 1
RSS
Извлечение телефонных номеров на отдельный лист по заданным маскам
 
Здравствуйте,
Помогите пожалуйста, сделать выборку по маске(шаблону). Допустим на первом листе есть 9-значные номера(префикс 999 неизменный), от 999000000 до 999999999.
На втором листе пропишем в один столбец маски(шаблоны) типа 999aaabbb, 999aabbcc, 999abcabc
Маске - 999aaabbb будут соответствовать номера 999000111, 999000222 и т.д и т.п  
Маске - 999aabbcc будут соответствовать номера 999001122, 999112299 и т.д и т.п  
Маске - 999abcabc будут соответствовать номера 999123123, 999345345 и т.д и т.п
Маске - 999aabb## будут соответствовать номера 999112213, 999227769 и т.д и т.п
Далее такого рода маски
Надо сделать выборку(сортировку, фильтр. как угодно) по маске(шаблону) из первого листа с номерами, на второй лист.

К сожалению с VBA не дружу((. мне бы макрос для понятия и развития. Заранее благодарен!
Изменено: llaih - 23.01.2020 09:09:54
 
llaih, делайте сразу пример данных в файле и подробнее по маскам пока логики не видно
Цитата
llaih написал:
999aaabbb будут соответствовать номера 999000111, 999000222 и т.д и т.п
сразу затык а=0 а b равно уже и 1 и 2, а дальше только еще путанней ну по крайней мере для меня
Лень двигатель прогресса, доказано!!!
 
вот файл. разделил номера на 4 листа. если на одном листе все номера, excel начинает страшно тормозить. маски на отдельном листе, но их на самом деле больше. в целом они похожи, как я выше описывал. префикс неизменный, дальше комбинация из ABC и нуля.
Изменено: llaih - 22.01.2020 08:44:04
 
Цитата
Сергей написал:
сразу затык а=0 а b равно уже и 1 и 2, а дальше только еще путанней
a=0 to 9, b=0 to 9, c=0 to 9
при этом "а" не равно "b" и не равно "с" и так для каждого значения.
т.е в маске aabbcc, если "а"=1, то "b" не равно "а" но любая из оставшихся 0-9(в данном случае кроме 1), а "с" не равно "a","b" но любая из оставшихся 0-9
a<>b,c
b<>a,c
c<>a,b
итог 112233, 221133, 442299, 552266 и т.д
Изменено: llaih - 22.01.2020 15:03:47
 
Это я так понимаю только для градации по штанам. Я за равенство.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
llaih, без учета нулей. только результат
 
artyrH написал:
без учета нулей. только результатСпасибо за труды, но не то что я хотел. Если можно с макросом, для дальнейшей корректировки.
Заранее спасибо!

llaih,  
Забыл добавить, что при присутствии нуля в маске a,b,c>0
т.е если маска AABB00 то результат должен быть 112200, 221100, 337700, 449900 и т.д.

мне бы макрос для понятия и развития
Изменено: llaih - 23.01.2020 09:09:14
 
llaih,
Цитата
Если можно с макросом
Попробуйте применить регулярные выражения, типа
Код
Function iMaska(cell$)
 With CreateObject("VBScript.RegExp")
     .Pattern = "9991{2}2{2}3{2}"
     If .test(cell) Then
       iMaska = .Execute(cell)(0)
     Else
       iMaska = ""
     End If
 End With
End Function

Маска .Pattern = "9991{2}2{2}3{2}" выделит номер 999112233
Комбинируя цифры можно создать требуемые маски
например      .Pattern = "99900002[0-9]"
 
Цитата
Kuzmich написал:
Попробуйте применить регулярные выражения, типа
'ваш код
Sub Maska()
Dim iRange As Range
Dim MaskRange As Range

'добавил это
Dim A(1 To 9) As Integer
Dim B(1 To 9) As Integer
Dim C(1 To 9) As Integer
Dim D(1 To 9) As Integer
Dim O(0) As Integer

'ваш код    
Columns(2).ClearContents
Set iRange = Range("A1").Resize(Cells(Rows.Count, 1).End(xlUp).Row, 1)

Set MaskRange = Range("D1").Resize(Cells(Rows.Count, 4).End(xlUp).Row, 1)

'добавил это
If A <> B And A <> C And A <> D And B <> C And B <> D And C <> D Then

'ваш код
iRange.AdvancedFilter xlFilterCopy, CriteriaRange:=MaskRange, copytorange:=Range("B1"), unique:=False
End Sub

Уважаемый Kuzmich! Это ваш код, который я пытаюсь переделать под себя. Но так как в VBA я никакой у меня все время ошибки вылезают. Насколько я близок к истине и как все таки написать знак не равенства? Если не затруднит, помогите завершить эту задачу.
Заранее спасибо!
Страницы: 1
Наверх