Страницы: 1
RSS
Поиск в массиве по маске
 
Добрый день, уважаемы форумчане!
Возник следующий вопрос: есть одномерный массив в котором содержатся кодированные данные (их порядка 6500). Данные в себе содержит код товара (5 или 6 цифр) + код точки (и буквы и цифры) Задача следующая, нужно по заданным 5 цифрам (InputBox) найти все соответствия. Пробовал Mutch, Vlookup. Но как то не срослось.
Пример данных:
  • Yff56988don12
  • Vft83466zap2
  • Cva86322kiev19
  • Vft83466priluk1
Т.е. мне нужно при введении числа 83466 получить инфо по двум ячейкам массива (2 и 4).
Подскажите, может кто сталкивался с подобными задачами.
 
Timofey0801, а файл пример имеется7
Не бойтесь совершенства. Вам его не достичь.
 
Сначала Вы покажите пример в файле. Пример данных и пример резуьтата
 
я сталкивался
=суммесли(ДиапазонДляСравнения;"*83466*";ДиапазонДляСуммирования)
или так
=суммесли(ДиапазонДляСравнения;"*" & артикул & "*";ДиапазонДляСуммирования)
где
ДиапазонДляСравнения - ссылка на диапазон с Вашими комбинированными кодами
артикул - ссылка на ячейку с конкретным артикулом
ДиапазонДляСуммирования - ссылка на диапазон, в котором лежат данные для суммирования
(диапазоны для сравнения и суммирования должны быть одинакового размера)
Изменено: Ігор Гончаренко - 05.06.2018 12:37:07
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
a.i.mershik написал:
Timofey0801 , а файл пример имеется7
Цитата
vikttur написал:
Сначала Вы покажите пример в файле. Пример данных и пример резуьтата
В приложении файл пример.


вот сам код:
Код
Public Sub poisk()

Dim length, s, i, A As Long
Dim chars(), TotArr() As Variant
Dim str, CountRow As String
s = InputBox("введите значения для поиска")

CountRow = Application.CountA(ActiveSheet.Range("A:A")) - 1

ReDim TotArr(1 To CountRow) As Variant
For A = 1 To CountRow
length = Strings.Len(Cells(A + 1, 1))

    ReDim chars(1 To length) As Variant
        For i = 1 To length
            If Information.IsNumeric(Strings.Mid(Cells(A + 1, 1), i, 1)) Then
                chars(i) = Strings.Mid(Cells(A + 1, 1), i, 1)
            End If
        Next i
        str = Application.Trim(Strings.Join(chars))
        str = CDbl(str)
        TotArr(A) = str

Next A


End Sub
Изменено: Timofey0801 - 05.06.2018 13:18:05
 
Timofey0801, код следует оформлять соответствующим тегом: ищите такую кнопку и исправьте свой пост.
 
Код
Private Sub worksheet_Change(ByVal Target As Range)
  Dim rg As Range, f As Range, adr
  If Target.Address <> "$E$2" Then Exit Sub Else Range([h2], [f2].End(xlDown)).ClearContents: [f2] = "не найден!"
  Set rg = Columns(1).Find(Target, , xlValues, xlPart)
  If rg Is Nothing Then Exit Sub Else Set f = rg.Resize(1, 3): adr = rg.Address
  Do
    Set rg = Columns(1).Find(Target, rg): If rg Is Nothing Then Exit Do Else If rg.Address <> adr Then Set f = Union(f, rg.Resize(1, 3)) Else Exit Do
  Loop
  f.Copy [f2]
End Sub
Изменено: Ігор Гончаренко - 05.06.2018 14:51:46
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Timofey0801, как вариант:
Код
Option Explicit
Public Sub poisk()

Dim length, i, A, CountRow As Long
Dim chars(), TotArr() As Variant
Dim s, str As String
s = InputBox("Введите данные для поиска")

CountRow = Application.CountA(ActiveSheet.Range("A:A")) - 1

ReDim TotArr(1 To CountRow) As Variant
chars = ActiveSheet.Range("A1:A" & CountRow).Value2

For A = 1 To CountRow 
    If CStr(chars(A, 1)) Like "*" & s & "*" Then
       i = i + 1
       TotArr(i) = chars(A, 1)
    End If
Next A
ReDim Preserve TotArr(1 To i)

'Любой вывод массива результатов.
MsgBox "Найдено: " & Join(TotArr, "; ")

End Sub
 
[USER=8380]Ігор Гончаренко[/USER, спасибо, этот вариант работает, но товар (пять одинаковых цифр) может повторяться несколько раз в массиве, с разными ключами городов и магазинов, и мне результат нужно вывести по всем вариантам "попаданий".

Как я понял, поиска по массиву, маской, нет?
Изменено: Timofey0801 - 05.06.2018 23:46:36
 
Timofey0801, кнопка цитирования не для ответа!
 
мой макрос именно на это и "заточен" - собрать все строки, где в колонке А в данных есть заданная последовательность символов
введите артикул 66, смотрите результат

Цитата
Timofey0801 написал:
Как я понял, поиска по массиву, маской, нет?
не правильно поняли, для поиска по маске в элементах массива используйте оператор Like
Изменено: Ігор Гончаренко - 05.06.2018 14:40:25
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
мой макрос именно на это и "заточен"
Прошу прощения за невнимательность.  :oops:

все работает, спасибо!
 
Цитата
Timofey0801 написал:
Как я понял, поиска по массиву, маской, нет?
См. #8. Чем не устраивает?
 
Спасибо, то что нужно!
Страницы: 1
Наверх