Поиск минимального элемента массива в формате 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 шт):

Автор решения: vikttur

Время - часть суток, 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
→ Ссылка