Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2010, 11:59   #11
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от Skif-F Посмотреть сообщение
ну да, 65536 - это для Excel 2003. Для Excel 2007 там лежит 1048576.
Так на какой объём будет ссылаться следующее выражение: Range([A1],Cells(Rows.Count,N).Value, если мы работаем в Excel 2007?
Rows.Count - это конструкция уровня приложения. Ссылаться будет на кол-во строк, максимально допустимое в той версии Excel, в которой открыт документ. Я обычно использую не просто Rows.Count, а ActiveSheet.Rows.Count или ссылку на тот лист, с которого считываю/записываю данные. Иначе, при работе в Excel 2007 с документом 2003 обращение к данным с Rows.Count(без явного указания листа данных) вызовет ошибку, т.к. в документе гораздо меньше строк...
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 21.05.2010, 12:04   #12
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
на какой объём будет ссылаться следующее выражение: Range([A1],Cells(Rows.Count,N).Value, если мы работаем в Excel 2007?
Для 2007 - это диапазон ячеек с "A1" по Cells(1048576, N)
Для 2003 - это диапазон ячеек с "A1" по Cells(65536, N)
Rows.Count - это константа, равная количеству строк на листе. Естественно, для 2003 и 2007 это разные числа. Так, например, если требуется определить последнюю заполненную ячейку в столбце "A" и мы не знаем, какая версия Excel установлена у пользователя, то применение выражения Cells(Rows.Count, 1).End(xlUp) будет работать корректно, не зависимо от версии Excel. В то время, как [A65536].End(xlUp) для версии 2007 может вернуть не правильный результат. А выражение [A1048576].End(xlUp) для версии 2003 и вовсе выдаст ошибку.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 21.05.2010, 12:14   #13
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Смысл не в том, к чему мы обращаемся, а к объёму!
Выражением ActiveSheet.Rows.Count мы обращаемся к объёму вот 65536 до МИЛЛИОНА строк. Потом мы этот объём копируем в массивы, сортируем, обрабатываем.
Учитывая, что многие темы здесь задаются начинающими, то эту ошибку они потянут в свои программы и будут жаловаться о медленной работе и ошибках.
Можно использовать выражение ActiveSheet.Rows.Count в проверках типа:
Код:
do while aaa<ActiveSheet.Rows.Count 
aaa=aaa+n
loop
но не:
Код:
Dim a()
a()=Range([A1],Cells(Rows.Count,Columns.Count)).Value
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 21.05.2010, 12:26   #14
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Смысл не в том, к чему мы обращаемся, а к объёму!
Кто "мы"? Если этого не требуется, то к такому объему обращаться глупо. Приведите пример со страниц форума, где Вы это видели. Ни я ни кто-нибудь другой этого не делали ни разу.

Цитата:
a()=Range([A1],Cells(Rows.Count,Columns.Count)).V alue
Вот, как раз это и глупо. Другое дело, если, например
Код:
a = Range([A1], Cells(Rows.Count, 5).End(xlUp)).Value
Тогда мы получим массив из диапазона от "A1" до последней заполненной строки в 5-м столбце. А Вы как предлагаете получать подобный массив?
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 21.05.2010 в 12:31.
SAS888 вне форума Ответить с цитированием
Старый 21.05.2010, 12:33   #15
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Кто "мы"? Если этого не требуется, то к такому объему обращаться глупо. Приведите пример со страниц форума, где Вы это видели. Ни я ни кто-нибудь другой этого не делали ни разу.
из файла примера в этом разделе:
Set x = Range([A2], Cells(Rows.Count, 1).End(xlUp).Offset(, 2))
x.Sort Key1:=[B2], Key2:=[C2]: a = x.Value:

Здесь, конечно, метод Sort проигнорирует всё лишнее, но не факт (мы не знаем, как он реализован), но потом это всё (2^32 строк) помещается в массив а()....
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 21.05.2010, 12:59   #16
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

По-моему, Вы в чем-то заблуждаетесь. Строка кода
Код:
Set x = Range([A2], Cells(Rows.Count, 1).End(xlUp).Offset(, 2))
определит диапазон ячеек от "A2" до ячейки в столбце "C" с номером строки, равным последней заполненной строке в столбце "A". По-моему, такую конструкцию применял именно я. Это потому, что диапазон строк определяется столбцом "A", в то время, как столбец "C" может быть заполнен произвольно или не заполнен вовсе. Где в этой конструкции Вы видите большой объем (диапазон)?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 21.05.2010, 13:07   #17
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Это потому, что диапазон строк определяется столбцом "A", в то время, как столбец "C" может быть заполнен произвольно или не заполнен вовсе. Где в этой конструкции Вы видите большой объем (диапазон)?
А вот здесь моя ошибка! Прошу прощения! Я действительно считал, что в переменную а загружается массив до Rows.Count.
Виноват. Каюсь.
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выделение на одну ячейку больше! Окоча Юра Microsoft Office Excel 12 27.08.2011 16:31
размер страницы в одну ячейку heyjoe Microsoft Office Excel 3 23.08.2009 19:11
Перегнать данные из столбца в одну ячейку KROZORS Microsoft Office Access 2 17.06.2009 17:58
Вставка в одну ячейку ivkoa Microsoft Office Excel 9 22.08.2008 14:16
SQL-запрос на выбор повторяющихся строк stepchild БД в Delphi 2 07.06.2008 10:52