Поиск минимального элемента массива в формате h:mm (VBA)
Помогите доработать код, чтобы из массива, состоящего из времени и нескольких суток, выводилось в формате h:mm, а не как дробь.

Private Sub CommandButton1_Click()
Dim b(11) As Integer
For i = 2 To 11
b(i) = Worksheets("Лист1").Cells(i, 2).Value
Next i
s_min = b(2)
For i = 2 To 14
If b(i) < s_min Then
s_min = b(i)
End If
Next i
MsgBox "Наименьшее значение: " & s_min
End Sub
Ответы (1 шт):
Время - часть суток, 1 сутки - это 1 (единица). Это значит, что время - дробное число <1.
В самом начале процедуры заложена ошибка: Dim b(11) As Integer - объявление массива ЦЕЛЫХ чисел. Какое бы время не находилось в ячейках, в массив запишется значение, округленное до целого, т.е. 0 или 1.
Размерность объявленного массива начинается с нуля (Dim b(11) - от 0 до 11, 12 элементов), но заполнение в первом цикле начинается с елемента 2.
При заполнении массива из диапазона напрямую размерности начинаются с единицы и массив получает размерность, одинаковую с размером диапазона. Если диапазон данных на листе неразрывен, цикл заполнения массива лишний.
Чтобы вывести результат не дробным числом, а в формате времени - Format(s_min, "hh:mm:ss")
Не нужно забывать об объявлении всех используемых переменных.
Sub MinTime()
Dim aTime()
Dim s_min As Double
Dim i As Long
aTime = Worksheets("Лист1").Range("B2:B11").Value
s_min = 1
For i = 1 To UBound(aTime)
If aTime(i, 1) < s_min Then s_min = aTime(i, 1)
Next i
MsgBox "Наименьшее значение: " & Format(s_min, "hh:mm:ss")
End Sub