Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Наименьшее из наибольшего - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Наименьшее из наибольшего (Макросы/Sub)
Наименьшее из наибольшего
RAN Дата: Среда, 16.04.2014, 10:04 | Сообщение № 1
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Мяу...
Заплутался в трех соснах. Переклинило, и другой день плутаю.
Нужно в блоке построчно найти наибольшее (последнее) значение, и выбрать из них наименьшее.

В файле блоки желтые, искомое - зеленое.
Обработка в массиве.
К сообщению приложен файл: 9564360.xls (29.0 Kb)


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеМяу...
Заплутался в трех соснах. Переклинило, и другой день плутаю.
Нужно в блоке построчно найти наибольшее (последнее) значение, и выбрать из них наименьшее.

В файле блоки желтые, искомое - зеленое.
Обработка в массиве.

Автор - RAN
Дата добавления - 16.04.2014 в 10:04
anvg Дата: Среда, 16.04.2014, 10:19 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Как-то так?
[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
[/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
[/vba]

Автор - anvg
Дата добавления - 16.04.2014 в 10:19
Формуляр Дата: Среда, 16.04.2014, 10:27 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Кар-р!
Первое, что в голову пришло, со вспомогательным столбцом.
К сообщению приложен файл: 7171843.xls (36.0 Kb)


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеКар-р!
Первое, что в голову пришло, со вспомогательным столбцом.

Автор - Формуляр
Дата добавления - 16.04.2014 в 10:27
RAN Дата: Среда, 16.04.2014, 10:55 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Кар-Карыч, спасибо, но с доп столбцом не рассматривается.
Это махонький кусочек большого макроса для определения одного из условий расчета.

Андрей, спасибо, почти то, пытаюсь допилить.
Что не совсем то
Массивы выделенных блоков формируются кодом, и в первом блоке нужно получить [A2] = 0.

PS Поглядел внимательнее - у меня все то же, а вот 0 получить не могу.


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Среда, 16.04.2014, 11:03
 
Ответить
СообщениеКар-Карыч, спасибо, но с доп столбцом не рассматривается.
Это махонький кусочек большого макроса для определения одного из условий расчета.

Андрей, спасибо, почти то, пытаюсь допилить.
Что не совсем то
Массивы выделенных блоков формируются кодом, и в первом блоке нужно получить [A2] = 0.

PS Поглядел внимательнее - у меня все то же, а вот 0 получить не могу.

Автор - RAN
Дата добавления - 16.04.2014 в 10:55
anvg Дата: Среда, 16.04.2014, 11:13 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Тогда, пожалуй, так
[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]
 
Ответить
СообщениеТогда, пожалуй, так
[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]

Автор - anvg
Дата добавления - 16.04.2014 в 11:13
RAN Дата: Среда, 16.04.2014, 11:53 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Ура!
Как функция она не подходит, а вот нужное зерно выцепил.

PS я, наверное, не совсем точно написал
Массивы выделенных блоков формируются кодом

Обрабатываться блок элементов массива, начальная и конечная строки которого определяются кодом.
Но это уже просто... :)


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Среда, 16.04.2014, 12:13
 
Ответить
СообщениеУра!
Как функция она не подходит, а вот нужное зерно выцепил.

PS я, наверное, не совсем точно написал
Массивы выделенных блоков формируются кодом

Обрабатываться блок элементов массива, начальная и конечная строки которого определяются кодом.
Но это уже просто... :)

Автор - RAN
Дата добавления - 16.04.2014 в 11:53
Wasilich Дата: Среда, 16.04.2014, 21:52 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Андрей привет! А скажи пожалуйста, данные в строке всегда идут по возрастающей как в примере, или вперемешку! :)
 
Ответить
СообщениеАндрей привет! А скажи пожалуйста, данные в строке всегда идут по возрастающей как в примере, или вперемешку! :)

Автор - Wasilich
Дата добавления - 16.04.2014 в 21:52
RAN Дата: Среда, 16.04.2014, 23:42 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
В моем случае всегда по возрастающей (в одной строке)


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеВ моем случае всегда по возрастающей (в одной строке)

Автор - RAN
Дата добавления - 16.04.2014 в 23:42
Wasilich Дата: Четверг, 17.04.2014, 04:02 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Понятно. Тогда так проще. (Если правильно понял)
[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
[/vba]

Автор - Wasilich
Дата добавления - 17.04.2014 в 04:02
RAN Дата: Четверг, 17.04.2014, 15:39 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Т.е. есть предложение отказаться от массива, и вернуться к ячейкам листа?
А этот массив (размером 1000х15) один из 4 (не самый большой)
И все это крутится совместно
:o :'(


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеТ.е. есть предложение отказаться от массива, и вернуться к ячейкам листа?
А этот массив (размером 1000х15) один из 4 (не самый большой)
И все это крутится совместно
:o :'(

Автор - RAN
Дата добавления - 17.04.2014 в 15:39
Wasilich Дата: Четверг, 17.04.2014, 18:00 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
массив (размером 1000х15)
Я видел самый большой 3х4. :D
есть предложение отказаться от массива, и вернуться к ячейкам листа?
Не, ну, "думайте сами, решайте сами...", :) или жди новых предложений.
 
Ответить
Сообщение
массив (размером 1000х15)
Я видел самый большой 3х4. :D
есть предложение отказаться от массива, и вернуться к ячейкам листа?
Не, ну, "думайте сами, решайте сами...", :) или жди новых предложений.

Автор - Wasilich
Дата добавления - 17.04.2014 в 18:00
RAN Дата: Четверг, 17.04.2014, 18:18 | Сообщение № 12
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
А зачем ждать?
Я уже вчера УРЯяяя мяукал. :D
А сегодня файл уже в работе.

PS
Я видел самый большой 3х4.

Нужно было рабочий файл выложить?
Там в макросе три сотни строк. Сыщик, сыщик, ищи вора? :p

PPS Я в первом посте писал
Обработка в массиве.


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Четверг, 17.04.2014, 18:25
 
Ответить
СообщениеА зачем ждать?
Я уже вчера УРЯяяя мяукал. :D
А сегодня файл уже в работе.

PS
Я видел самый большой 3х4.

Нужно было рабочий файл выложить?
Там в макросе три сотни строк. Сыщик, сыщик, ищи вора? :p

PPS Я в первом посте писал
Обработка в массиве.

Автор - RAN
Дата добавления - 17.04.2014 в 18:18
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Наименьшее из наибольшего (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!