Страницы: 1
RSS
Выбрать из массива данные с нужными маркерами и отсортировать их по возрастанию
 
Добрый день, задача в том чтобы выбрать из массива данных, данные с нужными маркерами и отсортировать их по возрастанию столбца масса.  
Изменено: vikttur - 09.06.2021 23:31:33
(С)
 
Код
Sub mrshkei()
Dim arr, arr2, arr3, i As Long, lr As Long, lr2 As Long
lr = Cells(Rows.Count, 1).End(xlUp).Row
lr2 = Cells(Rows.Count, 11).End(xlUp).Row + 1
Range("K10:Q" & lr2).ClearContents
arr = Range("A10:H" & lr)
arr2 = Range("S2:S6")
ReDim arr3(1 To lr, 1 To 8): k = 1
For i = LBound(arr) To UBound(arr)
    If Left(arr(i, 5), 2) = arr2(1, 1) & "." Then
        If arr(i, 2) = arr2(2, 1) Then
            If arr(i, 6) = arr2(3, 1) Then
                arr3(k, 1) = arr(i, 5)
                arr3(k, 2) = arr(i, 2)
                arr3(k, 3) = arr(i, 6)
                arr3(k, 4) = arr(i, 3)
                arr3(k, 5) = arr(i, 7)
                arr3(k, 6) = arr(i, 8)
                k = k + 1
            End If
        End If
    End If
Next i
Range("K10").Resize(lr, 8) = arr3
    ActiveWorkbook.Worksheets("1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("1").Sort.SortFields.Add2 Key:=Range("K10").Resize(lr, 1), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("1").Sort
        .SetRange Range("K9").Resize(lr + 1, 8)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
Изменено: Mershik - 09.06.2021 23:00:55
Не бойтесь совершенства. Вам его не достичь.
 
Спасибо, но если  без VBA? Формулами как то можно?
Изменено: zelek26 - 09.06.2021 23:27:49
(С)
 
zelek26,без понятия)
Не бойтесь совершенства. Вам его не достичь.
 
Вот ЗДЕСЬ можете почитать про поиск по нескольким условиям", а ТУТ про сортировку формулой.
 
Не понятно как задать множество условий... таких как задать 4 а выбрались все 4.1, 4.2. 4.3  4.4. и тд, причем по условию возрастания массы. Для выборки массы формула:
=НАИМЕНЬШИЙ(ЕСЛИ(И(Таблица1[Группа]=$S$2;Таблица1[Признак 1]=$S$3;Таблица1[Признак 2]=$S$4);$G$10:$G$32;"");СТРОКА(A1))  не работает, но даже если найти решение и она заработает - непонятно как задать условие описанное выше. Может в выборке необходимо указывать группу х.*.?
Такая вот не тривиальная задача со многими условиями.  
Изменено: zelek26 - 10.06.2021 08:34:38
(С)
 
zelek26,
так в первой ссылке есть примеры с множеством условий
 
evgeniygeo,Спасибо, но там по 1 позиции, а мне нужен весь массив с соответствующими маркерами.
Изменено: vikttur - 10.06.2021 13:14:26
(С)
 
Подсказали еще один вариант:
=ЕСЛИОШИБКА(ИНДЕКС($B$10:$H$32;ПОИСКПОЗ(НАИМЕНЬШИЙ(ЕСЛИ(($B$10:$B$32=$S$3)*($F$10:$F$32=$S$4)*(ЛЕВСИМВ($E$10:$E$32;2)=$S$2);$G$10:$G$32;"");СТРОКА($A1));$G$10:$G$32;);ПОИСКПОЗ(K$9;$B$9:$H$9;));"")
ВВодить как формулу массива.
Что не работает:
- при не заполненном условии  Признак 2 не работает;
- нельзя задать временной отрезок.
Огромное спасибо кто помогал.
Изменено: zelek26 - 11.06.2021 08:33:43
(С)
Страницы: 1
Наверх