Мяу... Заплутался в трех соснах. Переклинило, и другой день плутаю. Нужно в блоке построчно найти наибольшее (последнее) значение, и выбрать из них наименьшее.
В файле блоки желтые, искомое - зеленое. Обработка в массиве.
Мяу... Заплутался в трех соснах. Переклинило, и другой день плутаю. Нужно в блоке построчно найти наибольшее (последнее) значение, и выбрать из них наименьшее.
В файле блоки желтые, искомое - зеленое. Обработка в массиве.RAN
Public Sub FindM() Dim vData As Variant Dim rowMax As Date, minInMax As Date Dim iRow As Long, iCol As Long vData = ActiveSheet.UsedRange.Value For iRow = 1 To UBound(vData) rowMax = 0 For iCol = 1 To UBound(vData, 2) If IsDate(vData(iRow, iCol)) Then If vData(iRow, iCol) > rowMax Then rowMax = vData(iRow, iCol) End If Next If (minInMax = 0) And (rowMax > 0) Then minInMax = rowMax ElseIf (minInMax > 0) And (rowMax > 0) Then If minInMax > rowMax Then minInMax = rowMax End If Next Debug.Print minInMax End Sub
[/vba]
Как-то так? [vba]
Код
Public Sub FindM() Dim vData As Variant Dim rowMax As Date, minInMax As Date Dim iRow As Long, iCol As Long vData = ActiveSheet.UsedRange.Value For iRow = 1 To UBound(vData) rowMax = 0 For iCol = 1 To UBound(vData, 2) If IsDate(vData(iRow, iCol)) Then If vData(iRow, iCol) > rowMax Then rowMax = vData(iRow, iCol) End If Next If (minInMax = 0) And (rowMax > 0) Then minInMax = rowMax ElseIf (minInMax > 0) And (rowMax > 0) Then If minInMax > rowMax Then minInMax = rowMax End If Next Debug.Print minInMax End Sub
Public Function MinInMaximun(ByVal vData As Variant) As Date Dim rowMax As Date, curMax As Date Dim iRow As Long, iCol As Long curMax = DateSerial(2300, 12, 31) For iRow = 1 To UBound(vData) rowMax = 0 For iCol = 1 To UBound(vData, 2) If IsDate(vData(iRow, iCol)) Then If vData(iRow, iCol) > rowMax Then rowMax = vData(iRow, iCol) End If Next If curMax > rowMax Then curMax = rowMax Next MinInMaximun = curMax End Function
[/vba]
Тогда, пожалуй, так [vba]
Код
Public Function MinInMaximun(ByVal vData As Variant) As Date Dim rowMax As Date, curMax As Date Dim iRow As Long, iCol As Long curMax = DateSerial(2300, 12, 31) For iRow = 1 To UBound(vData) rowMax = 0 For iCol = 1 To UBound(vData, 2) If IsDate(vData(iRow, iCol)) Then If vData(iRow, iCol) > rowMax Then rowMax = vData(iRow, iCol) End If Next If curMax > rowMax Then curMax = rowMax Next MinInMaximun = curMax End Function
Понятно. Тогда так проще. (Если правильно понял) [vba]
Код
Sub qq() Dim i&, k&, min&, s& s = 6 'строка начала блока k = Cells(s, Columns.Count).End(xlToLeft).Column 'последняя колонка 1-й строки min = Cells(s, k) For i = s + 1 To Range("A" & Rows.Count).End(xlUp).Row k = Cells(i, Columns.Count).End(xlToLeft).Column If Cells(i, k) < min Then min = Cells(i, k) Next MsgBox min & " в дату сам переведи." End Sub
[/vba]
Понятно. Тогда так проще. (Если правильно понял) [vba]
Код
Sub qq() Dim i&, k&, min&, s& s = 6 'строка начала блока k = Cells(s, Columns.Count).End(xlToLeft).Column 'последняя колонка 1-й строки min = Cells(s, k) For i = s + 1 To Range("A" & Rows.Count).End(xlUp).Row k = Cells(i, Columns.Count).End(xlToLeft).Column If Cells(i, k) < min Then min = Cells(i, k) Next MsgBox min & " в дату сам переведи." End Sub
Т.е. есть предложение отказаться от массива, и вернуться к ячейкам листа? А этот массив (размером 1000х15) один из 4 (не самый большой) И все это крутится совместно
Т.е. есть предложение отказаться от массива, и вернуться к ячейкам листа? А этот массив (размером 1000х15) один из 4 (не самый большой) И все это крутится совместно RAN