Добрый вечер. Прошу направить в решении простой задачки: нужно получить максимальное число из цикла перебора, в данном случае наибольший номер последней ячейки самого длинного столбца в 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
Нет, так не подходит. .End(xlUp).Row - возвращает именно последнюю ячейку, содержащую заполненное значение, а UsedRange.Rows.Count вместе с пустыми "вроде" заполненными
Нет, так не подходит. .End(xlUp).Row - возвращает именно последнюю ячейку, содержащую заполненное значение, а UsedRange.Rows.Count вместе с пустыми "вроде" заполненнымиIgorStorm
Файл прикладывать не буду, он очень большой рабочий. Мой макрос (по одному естес-но) нашел верное значение - 28266. Ваш пример выдал 29916. Видимо ниже раньше были данные, сейчас их там нет - пустота, но метод вернул "вроде" заполненные. Впрочем это известный факт.
Мне нужно просто узнать как загнать мои цифры в массив, а потом вернуть максимальную.
Файл прикладывать не буду, он очень большой рабочий. Мой макрос (по одному естес-но) нашел верное значение - 28266. Ваш пример выдал 29916. Видимо ниже раньше были данные, сейчас их там нет - пустота, но метод вернул "вроде" заполненные. Впрочем это известный факт.
Мне нужно просто узнать как загнать мои цифры в массив, а потом вернуть максимальную.IgorStorm
Также известный факт, что 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
Также известный факт, что 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
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]
Зачем вам массив ?[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
Спасибо. Все оказалось так просто. Часто приходится работать именно с такими файлами - где много пустот от прошлых значений. с ними работает много пользователей, так что времени чистить нет. Нашел еще вариант, всего одна строка, правда не знаю какой может быть в ней подвох, а так на моем примере работает корректно.
Спасибо. Все оказалось так просто. Часто приходится работать именно с такими файлами - где много пустот от прошлых значений. с ними работает много пользователей, так что времени чистить нет. Нашел еще вариант, всего одна строка, правда не знаю какой может быть в ней подвох, а так на моем примере работает корректно.
Финд довольно ненадежен. Он имеет такое гадкое свойство - сохранять предыдущие параметры поиска. Поэтому обязательно указывайте по крайней мере параметр LookIn - или xlFormulas, или xlValues. Вдруг кто-то до Вас искал что-то Финдом в примечаниях и там стоит xlComments? Попробуйте сначала вручную поискать звезду в примечаниях, а потом запустить свой макрос.
Финд довольно ненадежен. Он имеет такое гадкое свойство - сохранять предыдущие параметры поиска. Поэтому обязательно указывайте по крайней мере параметр LookIn - или xlFormulas, или xlValues. Вдруг кто-то до Вас искал что-то Финдом в примечаниях и там стоит xlComments? Попробуйте сначала вручную поискать звезду в примечаниях, а потом запустить свой макрос._Boroda_