Новости:

Подпишитесь на рассылку новых сообщений форума через службу рассылок: Subscribe.ru

Главное меню

Применение фильтра к массиву

Автор Poltava, 07.05.2012, 23:07

« назад - далее »

Poltava

002.120112.001 Это пример номера в базе сформированного по принцыпу
номер точки в формате 001-999 дата в формате ГГММДД номер заказа на конкретной точке в течении дня 001-999. Задачя состоит в том что пользователь выбирает на форме номер точки, дату в результате получаеться переменная х типа стринг скажем st= 002.120112.
Задача определить какой номер нужно присвоить записи то есть ту часть что обозначена как хxx:  002.120112.ххх в принципе дублирование в базе  не предполагается потому хотел воспользоваться функцией filter(sourcesrray, match[, include[, compare]]) но так и не смог разобраться в синтаксисе. Помогите переделать мои неудачные попытки. Или предложите свои варианты как узнать номер который нужно присвоить записи. Теоретически понимаю что можно как то перебрать циклом но возникают сомнения по скорости работы когда база разрастется. Пока написал примерно такой код
Option Explicit
Sub ÌÎÇÃ_ÍÅ_ÐÀÁÎÒÀÅÒ()
Dim MyArray(), MyArray2()
MyArray() = (Range([A2], Range("A" & Rows.Count).End(xlUp)))
MyArray2() = Array(Filter(MyArray, "002.120112."))
Dim n As Long
n = UBound(MyArray2) - LBound(MyArray2) + 1
MsgBox n
End Sub

Но он не работает говорит о несоответствии типов, а я не могу разобраться
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

nilem

пробуйте
Sub ert()
Dim MyArray, s As String
s = "002.120112."
With Range("A2", Cells(Rows.Count, 1).End(xlUp))
    MyArray = Filter(WorksheetFunction.Transpose(.Value), s, 1)
    .Cells(.Count).Offset(1).Value = s & Format(UBound(MyArray) + 2, "000")
End With
End Sub

Poltava

УРА именно то что нужно. Даже больше чем просил. За формат Вам отдельное спасибо. Ну и конечно +1
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.