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

Вход

Регистрация

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

 

= Мир MS Excel/Определение наименьшего значения строки объекта Range - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Определение наименьшего значения строки объекта Range (Макросы/Sub)
Определение наименьшего значения строки объекта Range
TD_MElec Дата: Среда, 14.04.2021, 23:42 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 73
Репутация: 1 ±
Замечаний: 0% ±

Excel 2019
Доброго дня.
Пишу функцию типа Range, возвращающую адрес ячейки содержащей определенный текст. Всего может быть три варианта текста, и если на листе имеются два и более варианта, то необходимо вернуть ту ячейку, которая находится в меньшей строке.
Имеются объекты cell1, cell2 и cell3. Как красиво определить наименьший среди cell1.row, cell2.row, cell3.row, причем любой или все, могут быть Nothing - Empty. И потом вернуть соответствующий cellX функции.
Поделитесь опытом, о великие повелители больших и сложных таблиц :)


Сообщение отредактировал TD_MElec - Среда, 14.04.2021, 23:49
 
Ответить
СообщениеДоброго дня.
Пишу функцию типа Range, возвращающую адрес ячейки содержащей определенный текст. Всего может быть три варианта текста, и если на листе имеются два и более варианта, то необходимо вернуть ту ячейку, которая находится в меньшей строке.
Имеются объекты cell1, cell2 и cell3. Как красиво определить наименьший среди cell1.row, cell2.row, cell3.row, причем любой или все, могут быть Nothing - Empty. И потом вернуть соответствующий cellX функции.
Поделитесь опытом, о великие повелители больших и сложных таблиц :)

Автор - TD_MElec
Дата добавления - 14.04.2021 в 23:42
Nic70y Дата: Четверг, 15.04.2021, 08:55 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 8759
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
зачем для такой простой задачи писать функцию?
Код
=МИН(ЕСЛИОШИБКА(ПОИСКПОЗ("*"&B1:B3&"*";$A$1:$A$7;);""))
ну или покажите, что Вы там написали в файле.


ЮMoney 41001841029809
 
Ответить
Сообщениезачем для такой простой задачи писать функцию?
Код
=МИН(ЕСЛИОШИБКА(ПОИСКПОЗ("*"&B1:B3&"*";$A$1:$A$7;);""))
ну или покажите, что Вы там написали в файле.

Автор - Nic70y
Дата добавления - 15.04.2021 в 08:55
TD_MElec Дата: Четверг, 15.04.2021, 09:14 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 73
Репутация: 1 ±
Замечаний: 0% ±

Excel 2019
Дело в том, что нет данных о том, что есть ли искомый текст вообще на листе или его нет.
А если он находится, то к тому самому диапазону будет применяться другая процедура.

Вот, что я написал на данный момент:
[vba]
Код
Dim cell1 As Range
Dim cell2 As Range
Dim cell3 As Range
Set cell1 = Cells.Find("Текст1", LookIn:=xlValues, LookAt:=1, SearchOrder:=xlByColumns, MatchCase:=0)
Set cell2 = Cells.Find("Текст2", LookIn:=xlValues, LookAt:=1, SearchOrder:=xlByColumns, MatchCase:=0)
Set cell3 = Cells.Find("Текст3", LookIn:=xlValues, LookAt:=1, SearchOrder:=xlByColumns, MatchCase:=0)
[/vba]
 
Ответить
СообщениеДело в том, что нет данных о том, что есть ли искомый текст вообще на листе или его нет.
А если он находится, то к тому самому диапазону будет применяться другая процедура.

Вот, что я написал на данный момент:
[vba]
Код
Dim cell1 As Range
Dim cell2 As Range
Dim cell3 As Range
Set cell1 = Cells.Find("Текст1", LookIn:=xlValues, LookAt:=1, SearchOrder:=xlByColumns, MatchCase:=0)
Set cell2 = Cells.Find("Текст2", LookIn:=xlValues, LookAt:=1, SearchOrder:=xlByColumns, MatchCase:=0)
Set cell3 = Cells.Find("Текст3", LookIn:=xlValues, LookAt:=1, SearchOrder:=xlByColumns, MatchCase:=0)
[/vba]

Автор - TD_MElec
Дата добавления - 15.04.2021 в 09:14
Pelena Дата: Четверг, 15.04.2021, 09:43 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19182
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Если дополнить Ваш макрос, то можно так
[vba]
Код
    Dim cell1 As Range, t1 As Long
    Dim cell2 As Range, t2 As Long
    Dim cell3 As Range, t3 As Long, t_min As Long
    
    Set cell1 = Cells.Find("Текст1", LookIn:=xlValues, LookAt:=1, SearchOrder:=xlByColumns, MatchCase:=0)
    If cell1 Is Nothing Then t1 = Rows.Count + 1 Else t1 = cell1.Row
    
    Set cell2 = Cells.Find("Текст2", LookIn:=xlValues, LookAt:=1, SearchOrder:=xlByColumns, MatchCase:=0)
    If cell2 Is Nothing Then t2 = Rows.Count + 1 Else t2 = cell2.Row
    
    Set cell3 = Cells.Find("Текст3", LookIn:=xlValues, LookAt:=1, SearchOrder:=xlByColumns, MatchCase:=0)
    If cell3 Is Nothing Then t3 = Rows.Count + 1 Else t3 = cell3.Row
    
    t_min = Application.Min(t1, t2, t3)
    If t_min = Rows.Count + 1 Then MsgBox "ни один текст не найден" Else MsgBox t_min
[/vba]
или циклом
[vba]
Код
   Dim cell As Range, t As Long, t_min As Long
    Dim arr, i As Long

    arr = Array("Текст1", "Текст2", "Текст3")
    t_min = Rows.Count + 1

    For i = 0 To UBound(arr)
        Set cell = Cells.Find(arr(i), LookIn:=xlValues, LookAt:=1, SearchOrder:=xlByColumns, MatchCase:=0)
        If Not cell Is Nothing Then
            If cell.Row < t_min Then t_min = cell.Row
        End If
    Next cell

    If t_min = Rows.Count + 1 Then MsgBox "ни один текст не найден" Else MsgBox t_min
[/vba]


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЕсли дополнить Ваш макрос, то можно так
[vba]
Код
    Dim cell1 As Range, t1 As Long
    Dim cell2 As Range, t2 As Long
    Dim cell3 As Range, t3 As Long, t_min As Long
    
    Set cell1 = Cells.Find("Текст1", LookIn:=xlValues, LookAt:=1, SearchOrder:=xlByColumns, MatchCase:=0)
    If cell1 Is Nothing Then t1 = Rows.Count + 1 Else t1 = cell1.Row
    
    Set cell2 = Cells.Find("Текст2", LookIn:=xlValues, LookAt:=1, SearchOrder:=xlByColumns, MatchCase:=0)
    If cell2 Is Nothing Then t2 = Rows.Count + 1 Else t2 = cell2.Row
    
    Set cell3 = Cells.Find("Текст3", LookIn:=xlValues, LookAt:=1, SearchOrder:=xlByColumns, MatchCase:=0)
    If cell3 Is Nothing Then t3 = Rows.Count + 1 Else t3 = cell3.Row
    
    t_min = Application.Min(t1, t2, t3)
    If t_min = Rows.Count + 1 Then MsgBox "ни один текст не найден" Else MsgBox t_min
[/vba]
или циклом
[vba]
Код
   Dim cell As Range, t As Long, t_min As Long
    Dim arr, i As Long

    arr = Array("Текст1", "Текст2", "Текст3")
    t_min = Rows.Count + 1

    For i = 0 To UBound(arr)
        Set cell = Cells.Find(arr(i), LookIn:=xlValues, LookAt:=1, SearchOrder:=xlByColumns, MatchCase:=0)
        If Not cell Is Nothing Then
            If cell.Row < t_min Then t_min = cell.Row
        End If
    Next cell

    If t_min = Rows.Count + 1 Then MsgBox "ни один текст не найден" Else MsgBox t_min
[/vba]

Автор - Pelena
Дата добавления - 15.04.2021 в 09:43
TD_MElec Дата: Четверг, 15.04.2021, 10:45 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 73
Репутация: 1 ±
Замечаний: 0% ±

Excel 2019
Pelena , спасибо!
Вы мой кумир!

Беру Ваш цикл, работает отлично.
 
Ответить
СообщениеPelena , спасибо!
Вы мой кумир!

Беру Ваш цикл, работает отлично.

Автор - TD_MElec
Дата добавления - 15.04.2021 в 10:45
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Определение наименьшего значения строки объекта Range (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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