Страницы: 1
RSS
Ограничения Transpose в VBA
 
Я читал, что у Transpose есть ограничения в 5461 (тут http://excelvba.ru/code/Transpose)  
 
Но сейчас попробовал в 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 элементов )  
 
 
P.S. Большой брат П. ))
 
Я тоже старюсь не использовать transpose, надежней конечно самому транспонировать массив.  
______________  
off Паш, ты случаем не складе канцелярских товаров работаешь ?  
А то ники у тебя, в последнее время забавные :)  
Не удивлюсь если завтра Карандаш на планете объявиться :)
Спасибо
 
А я тут голову ломаю - чего-то у меня на столе не хватает. Хотя, ещё не понедельник...
 
Готов поделиться своим хламом со стола:-) Одних зажигалок 6 штук насчитал. 4 пульта.    
А я люблю transpose и index.
Я сам - дурнее всякого примера! ...
 
{quote}{login=R Dmitry}{date=18.01.2012 06:36}{thema=}{post}Я тоже старюсь не использовать transpose, надежней конечно самому транспонировать массив.  
______________  
off Паш, ты случаем не складе канцелярских товаров работаешь ?  
А то ники у тебя, в последнее время забавные :)  
Не удивлюсь если завтра Карандаш на планете объявиться :){/post}{/quote}  
 
Не поверишь, Дим. 7 лет закупщиком проработал в 3-х канцелярских фирмах ))  
Уже 3 месяца без работы сижу, не хочу идти обратно в канцелярию, но никуда не берут ((  
Вчера в Комус ездил на 2-е собеседование, зарплату хорошую предлагают, тоже закупщиком из Китая. Но я как представлю, что опять закупать канцелярию - мне плохо становится. В пятницу на 3-е собеседование пригласили в Комус, потом должна быть проверка на полиграфе.... но так не хочется опять в этот омут скрепки, кнопки, китайцы, перелёты по 9 часов... меня уже тошнит и от китайцев и от канцелярии, что делать... не знаю..  
 
P.S. Спасибо, Серёг, мне Юра уже список составил, я его сохранил себе в файлик, пока хватает ))
 
И ещё Filter :)  
У меня на столе хороший ник стоит - GlueStick.  
Именно стоИт.  
Можно на два растянуть - на Glue и на Stick :)  
 
 
Закупщик - это вроде шпиёна? Раз на полиграфе проверяют?
 
Это типа, чтобы откаты не брал )) Типа купи у меня товар, а я тебе 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
 
ну, пустая ячейка - имеет значение в массиве Empty.  
В общем, с Null не работает с Empty, "", vbNulString работает ))
 
Про запас на ближайшие недели:  
Модем  
Роутер  
Speaker (он же - Динамик)  
Смартфон  
Ночник (днём не использовать)  
Кулер  
Маркер
 
))) спасибо, Юр )) выручаешь )
 
{quote}{login=Юрий М}{date=18.01.2012 11:35}{thema=Офф}{post}Про запас на ближайшие недели:  
Модем  
Роутер  
Speaker (он же - Динамик)  
Смартфон  
Ночник (днём не использовать)  
Кулер  
Маркер{/post}{/quote}  
Юр у тебя что, комп в разобранном виде на столе? :))  
надо бы добавить ИБП, Материнка, Оператива, Веник, Видюха, Проц, Сидюк ... и прочая требедень.. :)))
Спасибо
 
Не - кулер подготовлен для замены (в БП). На столе, чтобы не забыть. Но всё равно никак не заменю :-)
Страницы: 1
Читают тему
Наверх