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

Вход

Регистрация

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

 

= Мир MS Excel/Работа с динамическими массивами - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Работа с динамическими массивами (Макросы/Sub)
Работа с динамическими массивами
sirenkodenis01 Дата: Суббота, 21.08.2021, 16:11 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Добрый день.
Подскажите пожалуйста по поводу работы с динамическими массивами. Зачем в практике используется, скажем для определения верхней границы диапазона Ubound. Например, если нужно в одномерном массиве определить кол-во заполненных значений, для чего создают массив с неопределенной границей, затем прописывают ReDim с константой, а потом в цикле прописывают Ubound(massive), когда можно без использования Ubound просто воспользоваться командой Rows.Count? Ведь второй вариант существенно экономит время на написание кода, получается значительно лаконичнее.
Например, если нужно определить верх границу диапазона, то я обычно прописываю например Cells(Rows.Count,1).End(xlUp).Row. Столько искал информации, но нигде не получается найти объяснение тому, зачем используется UBound и Lbound. Особенно когда например в коротком скрипте используется статичный массив, где заранее известна граница-константа, но затем когда перебирается цикл, то пишут к примеру For i =2 to Ubound(arr), почему если известна граница, не написать просто For i =2 to 10 например?

Заранее большое спасибо!
 
Ответить
СообщениеДобрый день.
Подскажите пожалуйста по поводу работы с динамическими массивами. Зачем в практике используется, скажем для определения верхней границы диапазона Ubound. Например, если нужно в одномерном массиве определить кол-во заполненных значений, для чего создают массив с неопределенной границей, затем прописывают ReDim с константой, а потом в цикле прописывают Ubound(massive), когда можно без использования Ubound просто воспользоваться командой Rows.Count? Ведь второй вариант существенно экономит время на написание кода, получается значительно лаконичнее.
Например, если нужно определить верх границу диапазона, то я обычно прописываю например Cells(Rows.Count,1).End(xlUp).Row. Столько искал информации, но нигде не получается найти объяснение тому, зачем используется UBound и Lbound. Особенно когда например в коротком скрипте используется статичный массив, где заранее известна граница-константа, но затем когда перебирается цикл, то пишут к примеру For i =2 to Ubound(arr), почему если известна граница, не написать просто For i =2 to 10 например?

Заранее большое спасибо!

Автор - sirenkodenis01
Дата добавления - 21.08.2021 в 16:11
bmv98rus Дата: Суббота, 21.08.2021, 16:41 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4099
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
sirenkodenis01, просто эти методы для разных объектов. Rows.Count - это подсчет строк на лист, а Ubound - максимальный индекс в массиве.
А Lbound и Ubound используют еще и при изменении начального индекса м ассива с 0 на 1. Элементов будет столько же но индекс будет на 1 больше. При этом перенос кода в другой проект не требует изменений так как адаптируется само, а в другом проект может быть Option Base 1


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщениеsirenkodenis01, просто эти методы для разных объектов. Rows.Count - это подсчет строк на лист, а Ubound - максимальный индекс в массиве.
А Lbound и Ubound используют еще и при изменении начального индекса м ассива с 0 на 1. Элементов будет столько же но индекс будет на 1 больше. При этом перенос кода в другой проект не требует изменений так как адаптируется само, а в другом проект может быть Option Base 1

Автор - bmv98rus
Дата добавления - 21.08.2021 в 16:41
RAN Дата: Суббота, 21.08.2021, 17:43 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
А Lbound и Ubound используют еще и при изменении начального индекса м ассива с 0 на 1. Элементов будет столько же но индекс будет на 1 больше.

Ведмедь, ну ты и загнул!
В общем, правильнее писать
[vba]
Код
For i = LBound(ar) To UBound(ar)
[/vba]
но, по причине ленивости, и когда точно известна нижняя граница, обычно пишут
[vba]
Код
For i = 0
' или
For i =1
[/vba]
Например, split всегда даст нижнюю границу 0, а массив с листа
[vba]
Код
  ar=[a1:a10].value
[/vba]
всегда даст 1
Option Base 1 игнорим, как вражий класс!


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

Сообщение отредактировал RAN - Суббота, 21.08.2021, 17:45
 
Ответить
Сообщение
А Lbound и Ubound используют еще и при изменении начального индекса м ассива с 0 на 1. Элементов будет столько же но индекс будет на 1 больше.

Ведмедь, ну ты и загнул!
В общем, правильнее писать
[vba]
Код
For i = LBound(ar) To UBound(ar)
[/vba]
но, по причине ленивости, и когда точно известна нижняя граница, обычно пишут
[vba]
Код
For i = 0
' или
For i =1
[/vba]
Например, split всегда даст нижнюю границу 0, а массив с листа
[vba]
Код
  ar=[a1:a10].value
[/vba]
всегда даст 1
Option Base 1 игнорим, как вражий класс!

Автор - RAN
Дата добавления - 21.08.2021 в 17:43
bmv98rus Дата: Суббота, 21.08.2021, 18:26 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4099
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
Ведмедь, ну ты и загнул!
чего это? положим по ленивости кто-то написал 0 to n, а другой кто-то пренес себе в проект, а там BASE чуть иной. иииииии


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение
Ведмедь, ну ты и загнул!
чего это? положим по ленивости кто-то написал 0 to n, а другой кто-то пренес себе в проект, а там BASE чуть иной. иииииии

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

2010
чего это?

Да просто твоя фраза даже после троекратного прочтения в голове не помещается. killed beer


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

Да просто твоя фраза даже после троекратного прочтения в голове не помещается. killed beer

Автор - RAN
Дата добавления - 21.08.2021 в 18:33
sirenkodenis01 Дата: Суббота, 21.08.2021, 19:01 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Большое спасибо за разъяснение!) Всем хорошего дня!
 
Ответить
СообщениеБольшое спасибо за разъяснение!) Всем хорошего дня!

Автор - sirenkodenis01
Дата добавления - 21.08.2021 в 19:01
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Работа с динамическими массивами (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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