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

Вход

Регистрация

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

 

= Мир MS Excel/Максимальное значение из цикла перебора - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Максимальное значение из цикла перебора (Макросы/Sub)
Максимальное значение из цикла перебора
IgorStorm Дата: Среда, 03.02.2016, 22:03 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 26
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
Добрый вечер. Прошу направить в решении простой задачки: нужно получить максимальное число из цикла перебора, в данном случае наибольший номер последней ячейки самого длинного столбца в UsedRange. Понимаю. что lstr нужно объявить как массив, а потом как-то уже из него вытянуть наибольший, но как пока не доходит, не сталкивался.

[vba]
Код
Sub Test()
        For Each st In ActiveSheet.UsedRange.Columns
lstr = Cells(Rows.Count, st.Column).End(xlUp).Row
Next st
   MsgBox Application.Max(lstr)
        End Sub
[/vba]
 
Ответить
СообщениеДобрый вечер. Прошу направить в решении простой задачки: нужно получить максимальное число из цикла перебора, в данном случае наибольший номер последней ячейки самого длинного столбца в UsedRange. Понимаю. что lstr нужно объявить как массив, а потом как-то уже из него вытянуть наибольший, но как пока не доходит, не сталкивался.

[vba]
Код
Sub Test()
        For Each st In ActiveSheet.UsedRange.Columns
lstr = Cells(Rows.Count, st.Column).End(xlUp).Row
Next st
   MsgBox Application.Max(lstr)
        End Sub
[/vba]

Автор - IgorStorm
Дата добавления - 03.02.2016 в 22:03
_Boroda_ Дата: Среда, 03.02.2016, 22:08 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 10334
Репутация: 4357 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А вот так не пойдет?
[vba]
Код
MsgBox ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count-1
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА вот так не пойдет?
[vba]
Код
MsgBox ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count-1
[/vba]

Автор - _Boroda_
Дата добавления - 03.02.2016 в 22:08
IgorStorm Дата: Среда, 03.02.2016, 22:20 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 26
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
Нет, так не подходит. .End(xlUp).Row - возвращает именно последнюю ячейку, содержащую заполненное значение, а UsedRange.Rows.Count вместе с пустыми "вроде" заполненными
 
Ответить
СообщениеНет, так не подходит. .End(xlUp).Row - возвращает именно последнюю ячейку, содержащую заполненное значение, а UsedRange.Rows.Count вместе с пустыми "вроде" заполненными

Автор - IgorStorm
Дата добавления - 03.02.2016 в 22:20
_Boroda_ Дата: Среда, 03.02.2016, 22:24 | Сообщение № 4
Группа: Модераторы
Ранг: Экселист
Сообщений: 10334
Репутация: 4357 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Вы попробуйте, сами убедитесь.
Или приведите пример, где не так.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВы попробуйте, сами убедитесь.
Или приведите пример, где не так.

Автор - _Boroda_
Дата добавления - 03.02.2016 в 22:24
IgorStorm Дата: Среда, 03.02.2016, 22:43 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 26
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
Файл прикладывать не буду, он очень большой рабочий. Мой макрос (по одному естес-но) нашел верное значение - 28266. Ваш пример выдал 29916. Видимо ниже раньше были данные, сейчас их там нет - пустота, но метод вернул "вроде" заполненные. Впрочем это известный факт.

Мне нужно просто узнать как загнать мои цифры в массив, а потом вернуть максимальную.
 
Ответить
СообщениеФайл прикладывать не буду, он очень большой рабочий. Мой макрос (по одному естес-но) нашел верное значение - 28266. Ваш пример выдал 29916. Видимо ниже раньше были данные, сейчас их там нет - пустота, но метод вернул "вроде" заполненные. Впрочем это известный факт.

Мне нужно просто узнать как загнать мои цифры в массив, а потом вернуть максимальную.

Автор - IgorStorm
Дата добавления - 03.02.2016 в 22:43
_Boroda_ Дата: Среда, 03.02.2016, 23:32 | Сообщение № 6
Группа: Модераторы
Ранг: Экселист
Сообщений: 10334
Репутация: 4357 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Впрочем это известный факт.

Также известный факт, что activesheet.usedrange выравнивает диапазон по последнему значению, в котором есть хоть что-то. Если у Вас дает неверный результат, то это означает только одно - в одной из ячеек строки 29916 что-то есть. Это не обязательно какое-то значение, это может быть форматирование, примечание или что-то еще.
Но, поскольку Вам нужно именно значения и Вы хотите сделать по столбцам, то можно так
[vba]
Код
Sub Test()
    For Each st In ActiveSheet.UsedRange.Columns
        lstr = Cells(Rows.Count, st.Column).End(xlUp).Row
        lstr1 = Application.Max(lstr, lstr1)
    Next st
    MsgBox lstr1
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Впрочем это известный факт.

Также известный факт, что activesheet.usedrange выравнивает диапазон по последнему значению, в котором есть хоть что-то. Если у Вас дает неверный результат, то это означает только одно - в одной из ячеек строки 29916 что-то есть. Это не обязательно какое-то значение, это может быть форматирование, примечание или что-то еще.
Но, поскольку Вам нужно именно значения и Вы хотите сделать по столбцам, то можно так
[vba]
Код
Sub Test()
    For Each st In ActiveSheet.UsedRange.Columns
        lstr = Cells(Rows.Count, st.Column).End(xlUp).Row
        lstr1 = Application.Max(lstr, lstr1)
    Next st
    MsgBox lstr1
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 03.02.2016 в 23:32
doober Дата: Среда, 03.02.2016, 23:33 | Сообщение № 7
Группа: Друзья
Ранг: Обитатель
Сообщений: 364
Репутация: 189 ±
Замечаний: 0% ±

Excel 2007
Зачем вам массив ?[vba]
Код
Sub Test()
lstr = 0
    For Each st In ActiveSheet.UsedRange.Columns
       r = Cells(Rows.Count, st.Column).End(xlUp).Row
         lstr = IIf(lstr > r, lstr, r)
    Next st
    MsgBox lstr
End Sub
[/vba]




Сообщение отредактировал doober - Среда, 03.02.2016, 23:34
 
Ответить
СообщениеЗачем вам массив ?[vba]
Код
Sub Test()
lstr = 0
    For Each st In ActiveSheet.UsedRange.Columns
       r = Cells(Rows.Count, st.Column).End(xlUp).Row
         lstr = IIf(lstr > r, lstr, r)
    Next st
    MsgBox lstr
End Sub
[/vba]

Автор - doober
Дата добавления - 03.02.2016 в 23:33
IgorStorm Дата: Среда, 03.02.2016, 23:36 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 26
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
Спасибо. Все оказалось так просто. Часто приходится работать именно с такими файлами - где много пустот от прошлых значений. с ними работает много пользователей, так что времени чистить нет. Нашел еще вариант, всего одна строка, правда не знаю какой может быть в ней подвох, а так на моем примере работает корректно.

[vba]
Код
lastrow = Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
[/vba]
 
Ответить
СообщениеСпасибо. Все оказалось так просто. Часто приходится работать именно с такими файлами - где много пустот от прошлых значений. с ними работает много пользователей, так что времени чистить нет. Нашел еще вариант, всего одна строка, правда не знаю какой может быть в ней подвох, а так на моем примере работает корректно.

[vba]
Код
lastrow = Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
[/vba]

Автор - IgorStorm
Дата добавления - 03.02.2016 в 23:36
_Boroda_ Дата: Четверг, 04.02.2016, 00:14 | Сообщение № 9
Группа: Модераторы
Ранг: Экселист
Сообщений: 10334
Репутация: 4357 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Финд довольно ненадежен. Он имеет такое гадкое свойство - сохранять предыдущие параметры поиска. Поэтому обязательно указывайте по крайней мере параметр LookIn - или xlFormulas, или xlValues. Вдруг кто-то до Вас искал что-то Финдом в примечаниях и там стоит xlComments?
Попробуйте сначала вручную поискать звезду в примечаниях, а потом запустить свой макрос.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеФинд довольно ненадежен. Он имеет такое гадкое свойство - сохранять предыдущие параметры поиска. Поэтому обязательно указывайте по крайней мере параметр LookIn - или xlFormulas, или xlValues. Вдруг кто-то до Вас искал что-то Финдом в примечаниях и там стоит xlComments?
Попробуйте сначала вручную поискать звезду в примечаниях, а потом запустить свой макрос.

Автор - _Boroda_
Дата добавления - 04.02.2016 в 00:14
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Максимальное значение из цикла перебора (Макросы/Sub)
Страница 1 из 11
Поиск:

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