Всем доброго времени суток. Прошу рязъяснить что я делаю не так. Суть задачи заключается в том, что есть перечень сотрудников совершающих ежедневно от 1 операции, необходимо выбрать по указанному сотруднику 1-ю и 2-ю операции (самые ранние) с помощью VBA ..но почему-то не выходит у меня. Формулами все получается, но хочу разобраться в VBA. ExceL 2019.
Код
Sub dsd()
Cells(9, 6) = Application.WorksheetFunction.MinIfs(Range("B:B"), Range("A:A"), Cells(1, 6))
Cells(10, 6) = Application.WorksheetFunction.MinIfs(Range("B:B"), Range("A:A"), Cells(1, 6), Range("A:A"), ">" & Cells(9, 6))
End Sub
Mershik, приветствую! Функций листа в VBA стараюсь не использовать (тем более, что МИНЕСЛИ у меня нет), но кодом можно вот так, например (вариант "в лоб", но быстро и коротко)
Код
Код
Option Explicit
'====================================================================================================
Sub GetMin()
Dim arr, arr1x(), r&, i&
Const crit$ = "Олег"
arr = Selection.Value2
If Not IsArray(arr) Then Exit Sub
If UBound(arr, 1) < 2 Then Exit Sub
If UBound(arr, 2) <> 2 Then Exit Sub
ReDim arr1x(UBound(arr, 1) - 1): i = -1
For r = 1 To UBound(arr, 1)
If arr(r, 1) = crit Then
i = i + 1: arr1x(i) = arr(r, 2)
End If
Next r
If i < 1 Then Exit Sub
ReDim Preserve arr1x(i)
Sort_Array1x arr1x, 0, i
MsgBox CDate(arr1x(0)) & " | " & CDate(arr1x(1))
End Sub
'====================================================================================================
Sub Sort_Array1x(arr1x(), l&, u&)
Dim i&, j&, x, y
i = l: j = u: x = arr1x((l + u) \ 2)
Do
Do While arr1x(i) < x: i = i + 1: Loop
Do While x < arr1x(j): j = j - 1: Loop
If i <= j Then y = arr1x(i): arr1x(i) = arr1x(j): arr1x(j) = y: i = i + 1: j = j - 1
Loop Until i > j
If l < j Then Sort_Array1x arr1x, l, j
If i < u Then Sort_Array1x arr1x, i, u
End Sub
'====================================================================================================
P.S.: если по критерию будут попадаться одинаковые даты, а нам этого не надо (то есть нужны 2 первые НЕодинаковые даты), то заменяем наполнение массива на словарь
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Mershik, пожалуйста)) Коллекции совсем не использую, а вот словари и массивы — постоянно Спрашивайте - там нет ничего сложного, но есть немало нюансов
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄