Но сейчас попробовал в Excel 2010, у меня срабатывает максимально 65536 элементов (т.е. равное количеству строк в Excel 2003)
Sub Test() Dim i As Long, Arr() ReDim Arr(1 To 65536) For i = 1 To UBound(Arr) Arr(i) = i Next [A1].Resize(UBound(Arr)).Value = Application.Transpose(Arr) End Sub
Не могу протестировать под Excel 2003. Поэтому: Я правильно понимаю, что в Excel 2003 ограничение у Transpose в 5461, а в Excel 2007/2010 в 65536 элементов?
Я тоже не люблю Application.Transpose(), но вот проверил Ваш код на 2003 SP3 - работает! И даже двумерный переворачивает:
Sub Test() Dim i As Long, Arr() ReDim Arr(1 To 2, 1 To 65536) For i = 1 To UBound(Arr, 2) Arr(1, i) = i: Arr(2, i) = i * 2 Next [A1:B1].Resize(UBound(Arr, 2)).Value = Application.Transpose(Arr) End Sub
{quote}{login=Ластик}{date=18.01.2012 04:01}{thema=Ограничения Transpose в VBA}{post}попробовал в Excel 2010, у меня срабатывает максимально 65536 элементов {/post}{/quote}А разве Вы не сами установили ограничение: ReDim Arr(1 To 65536)
5461 - это в http://excelvba.ru/code/Transpose написано. Я раньше на 2000 Экселе работал - там могло и 2000 строк массива не перевернуть, а иногда 5000 ворочало... Т.е. зависело от непонятно чего, но скорее всего от загрузки памяти. Вот с тех пор и не люблю.
Юр, я конечно сам ограничение поставил 65536, т.к. 65537 уже выдаёт ошибку № 13 Дим, ограничение в 5461 написано на сайте Игоря (EducatedFool) http://excelvba.ru/code/Transpose Игорь, вот и я не могу понять то у него есть ограничение, то оно маленькое, то оно большое ))
Ладно, теперь буду считать, что во всех версия Excel (2003/2007/2010) ограничение по Transpose в 65536 элементов )
Я тоже старюсь не использовать transpose, надежней конечно самому транспонировать массив. ______________ off Паш, ты случаем не складе канцелярских товаров работаешь ? А то ники у тебя, в последнее время забавные :) Не удивлюсь если завтра Карандаш на планете объявиться :)
{quote}{login=R Dmitry}{date=18.01.2012 06:36}{thema=}{post}Я тоже старюсь не использовать transpose, надежней конечно самому транспонировать массив. ______________ off Паш, ты случаем не складе канцелярских товаров работаешь ? А то ники у тебя, в последнее время забавные :) Не удивлюсь если завтра Карандаш на планете объявиться :){/post}{/quote}
Не поверишь, Дим. 7 лет закупщиком проработал в 3-х канцелярских фирмах )) Уже 3 месяца без работы сижу, не хочу идти обратно в канцелярию, но никуда не берут (( Вчера в Комус ездил на 2-е собеседование, зарплату хорошую предлагают, тоже закупщиком из Китая. Но я как представлю, что опять закупать канцелярию - мне плохо становится. В пятницу на 3-е собеседование пригласили в Комус, потом должна быть проверка на полиграфе.... но так не хочется опять в этот омут скрепки, кнопки, китайцы, перелёты по 9 часов... меня уже тошнит и от китайцев и от канцелярии, что делать... не знаю..
P.S. Спасибо, Серёг, мне Юра уже список составил, я его сохранил себе в файлик, пока хватает ))
Это типа, чтобы откаты не брал )) Типа купи у меня товар, а я тебе 5%-10% от заказа буду на личный счёт перечислять ) На полиграфе во многих конторах проверяют. Я тут недавно ходил на собеседование в небольшую компьютерную контору, у них тоже сказали полиграф нужно проходить, но денег мало предложили и далеко от дома ездить, сам отказался
The_Prist, Спасибо, Дим. Но я хочу ещё сам поискать... А то вдруг не подойду, скажут "кого ты нам привёл" ))
Слэн, Толь, видно если ограничение в 5461 элемент сняли в Excel XP и выше (т.е. это ограничение было в Excel 97 & 2000), а вот ограничение в 255 символов так и осталось, получаются ограничения на данный момент такие:
1) Массив не может содержать больше 65536 элементов 2) Массив не может содержать пустые (Null) значения 3) Массив не может содержать элементов, длина которых превышает 255 знаков
Вот потестировал. Сотому элементу присваиваю Null - всё, при выгрузке на лист Ошибка №13
Sub Test() Dim i As Long, Arr() ReDim Arr(1 To 65536) For i = 1 To UBound(Arr) If i = 100 Then Arr(i) = Null 'vbNullString Else Arr(i) = i End If Next [A1].Resize(UBound(Arr)).Value = Application.Transpose(Arr) End Sub
а с vbNullString - нормально, т.к. это строка нулевой длины )))
ну, и на всякий случай потестировал с 255 количество символов
так работает
Sub Test() Dim i As Long, Arr(), iStr1$, iStr2$ ReDim Arr(1 To 2) For i = 1 To 255 iStr1 = iStr1 & "p" iStr2 = iStr2 & "p" Next i Arr(1) = iStr1 Arr(2) = iStr2 [A1].Resize(UBound(Arr)).Value = Application.Transpose(Arr) End Sub
А если написать For i = 1 To 256, то опять ошибка №13
Так что выходит:
1) Массив не может содержать больше 65536 элементов 2) Массив не может содержать пустые (Null) значения 3) Массив не может содержать элементов, длина которых превышает 255 знаков
Тут, наверное, нужно определиться, что понимать под пустыми: вот такой массив на чистом листе ведь принимается: Arr = Range(Cells(1, 1), Cells(65000, 2)).Value
{quote}{login=Юрий М}{date=18.01.2012 11:35}{thema=Офф}{post}Про запас на ближайшие недели: Модем Роутер Speaker (он же - Динамик) Смартфон Ночник (днём не использовать) Кулер Маркер{/post}{/quote} Юр у тебя что, комп в разобранном виде на столе? :)) надо бы добавить ИБП, Материнка, Оператива, Веник, Видюха, Проц, Сидюк ... и прочая требедень.. :)))