Здравствуйте, Помогите пожалуйста, сделать выборку по маске(шаблону). Допустим на первом листе есть 9-значные номера(префикс 999 неизменный), от 999000000 до 999999999. На втором листе пропишем в один столбец маски(шаблоны) типа 999aaabbb, 999aabbcc, 999abcabc Маске - 999aaabbb будут соответствовать номера 999000111, 999000222 и т.д и т.п Маске - 999aabbcc будут соответствовать номера 999001122, 999112299 и т.д и т.п Маске - 999abcabc будут соответствовать номера 999123123, 999345345 и т.д и т.п Маске - 999aabb## будут соответствовать номера 999112213, 999227769 и т.д и т.п Далее такого рода маски Надо сделать выборку(сортировку, фильтр. как угодно) по маске(шаблону) из первого листа с номерами, на второй лист.
К сожалению с VBA не дружу((. мне бы макрос для понятия и развития. Заранее благодарен!
вот файл. разделил номера на 4 листа. если на одном листе все номера, excel начинает страшно тормозить. маски на отдельном листе, но их на самом деле больше. в целом они похожи, как я выше описывал. префикс неизменный, дальше комбинация из ABC и нуля.
Сергей написал: сразу затык а=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 и т.д
Это я так понимаю только для градации по штанам. Я за равенство.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок. А в том, чтобы писать программы, работающие при любом количестве ошибок.
artyrH написал: без учета нулей. только результатСпасибо за труды, но не то что я хотел. Если можно с макросом, для дальнейшей корректировки. Заранее спасибо!
llaih, Забыл добавить, что при присутствии нуля в маске a,b,c>0 т.е если маска AABB00 то результат должен быть 112200, 221100, 337700, 449900 и т.д.
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 я никакой у меня все время ошибки вылезают. Насколько я близок к истине и как все таки написать знак не равенства? Если не затруднит, помогите завершить эту задачу. Заранее спасибо!