ок 1 [vba][code] Function Scorost(Isp As Range) As String Application.Volatile Dim last, date_max_speed As Integer Dim a&, b&, m&, k&, i&, n&, w&, dist&, klass_max_speed_kur&, reza_max_speed_kur&, ves_max_speed_kur&, last_speed&, last_ves&, last_uspeh&, last_uroven&, max_speed_uroven& ' Dim aver_urov_dist#, aver_speed_kur#, aver_urov_kur#, uspeh_max_speed_kur#, max_speed_kur# Dim going_max_speed_kur$, kur$, r_type$, su$, s$, f$, l$, go$ Dim v(), arr(), arr_dist(), arr_speed_kur(), arr_urov_kur() Dim last_date, today, date_max_speed_kur As Date With Isp ' i = .Count ' ' If i = 1 Then Exit Function ' s = .Item(i) ' a = 0 ' b = 0 ' last_date = 0 f = "" l = "" ReDim arr_dist(0) ReDim arr_speed_kur(0) ReDim arr_urov_kur(0) arr_dist(0) = 0 arr_speed_kur(0) = 0 arr_urov_kur(0) = 0 max_speed_kur = 0 Scorost = "" v = .Resize(i, 76).Value ' today = v(i, 2) ' kur = v(i, 4) ' dist = v(i, 30) ' r_type = v(i, 7) ' su = v(i, 8) ' go = v(i, 9) ' ' w = v(i, 18) ' End With ' For i = i - 1 To 1 Step -1 ' If v(i, 1) = s And v(i, 30) >= dist - 20 And v(i, 30) <= dist + 20 And v(i, 7) = r_type And IsNumeric(v(i, 64)) = True Then ' a = a + 1 ' ReDim Preserve arr_dist(a - 1) ' arr_dist(a - 1) = v(i, 76) ' If v(i, 4) = kur And v(i, 8) = su Then ' b = b + 1 ReDim Preserve arr_speed_kur(b - 1) ReDim Preserve arr_urov_kur(b - 1) arr_speed_kur(b - 1) = v(i, 75) arr_urov_kur(b - 1) = v(i, 76) If v(i, 9) = go Then ' If last_date = 0 Then ' last_date = v(i, 2) ' last = today - last_date ' last_speed = v(i, 64) ' last_uroven = v(i, 76) ' last_ves = v(i, 34) ' last_uspeh = v(i, 36) ' End If If v(i, 64) > max_speed_kur Then ' max_speed_kur = v(i, 64) ' max_speed_uroven = v(i, 76) ' date_max_speed_kur = v(i, 2) ' date_max_speed = today - date_max_speed_kur ' ' go_max_speed_kur = v(i, 9) ' ves_max_speed_kur = v(i, 34) ' klass_max_speed_kur = v(i, 65) ' reza_max_speed_kur = v(i, 33) ' uspeh_max_speed_kur = v(i, 36) ' End If End If End If End If Next aver_urov_dist = WorksheetFunction.Median(arr_dist) ' aver_speed_kur = WorksheetFunction.Median(arr_speed_kur) ' aver_urov_kur = WorksheetFunction.Median(arr_urov_kur) ' Scorost = max_speed_kur & " ; " & max_speed_uroven & " ; " & date_max_speed & " ; " & ves_max_speed_kur & " ; " & klass_max_speed_kur & " ; " & reitzabega_max_speed_kur & " ; " & uspeh_max_speed_kur & " ; " & last_speed & " ; " & last_uroven & " ; " & last & " ; " & last_ves & " ; " & last_uspeh & " ; " & aver_speed_kur & " ; " & aver_urov_kur & " ; " & b & " ; " & aver_urov_dist & " ; " & a End Function [/code][/vba]