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

Вход

Регистрация

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

 

= Мир MS Excel/не выводит массив с числом элементов >655536 - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » не выводит массив с числом элементов >655536 (Макросы/Sub)
не выводит массив с числом элементов >655536
Udik Дата: Среда, 01.07.2015, 19:54 | Сообщение № 1
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Функция Transpose() выдает ошибку Type mismatch при попытке вывести массив с числом элементов более 65536. Можно это как-то обойти, задействовать другой способ быстрого вывода одномерного массива на лист, или только перебором?

[vba]
Код

Public Sub test()
Dim arr1(1 To 65537) As String
Dim arr2(1 To 100) As String

Dim i As Byte
Dim r1 As Long
Dim startRow As Byte

Dim strRow As Byte
Dim c1 As Integer

Range("A1:E10").Select 'чистим диапазон
Selection.ClearContents
Cells(1, 1).Select

For i = 1 To 10
     arr1(i) = "arr1: " & i
     arr2(i) = "arr2: " & i
     Cells(i, 1).Value = arr1(i) 'строка для контроля выводится в 1 столбец
     Cells(i, 2).Value = arr2(i) 'строка для контроля выводится во 2 столбец
Next i

Cells(1, 3).Resize(10) = Application.WorksheetFunction.Transpose(arr2)
Cells(1, 4).Resize(10) = Application.WorksheetFunction.Transpose(arr1) 'большой массив - здесь ошибка

End Sub
[/vba]
К сообщению приложен файл: 4002971.xlsm (18.1 Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеФункция Transpose() выдает ошибку Type mismatch при попытке вывести массив с числом элементов более 65536. Можно это как-то обойти, задействовать другой способ быстрого вывода одномерного массива на лист, или только перебором?

[vba]
Код

Public Sub test()
Dim arr1(1 To 65537) As String
Dim arr2(1 To 100) As String

Dim i As Byte
Dim r1 As Long
Dim startRow As Byte

Dim strRow As Byte
Dim c1 As Integer

Range("A1:E10").Select 'чистим диапазон
Selection.ClearContents
Cells(1, 1).Select

For i = 1 To 10
     arr1(i) = "arr1: " & i
     arr2(i) = "arr2: " & i
     Cells(i, 1).Value = arr1(i) 'строка для контроля выводится в 1 столбец
     Cells(i, 2).Value = arr2(i) 'строка для контроля выводится во 2 столбец
Next i

Cells(1, 3).Resize(10) = Application.WorksheetFunction.Transpose(arr2)
Cells(1, 4).Resize(10) = Application.WorksheetFunction.Transpose(arr1) 'большой массив - здесь ошибка

End Sub
[/vba]

Автор - Udik
Дата добавления - 01.07.2015 в 19:54
Pelena Дата: Среда, 01.07.2015, 20:01 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19188
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
Попробуйте без транспонирования с двумерным массивом
[vba]
Код
Dim arr1 (1 To 65537, 1 To 1) As String
[/vba]


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеПопробуйте без транспонирования с двумерным массивом
[vba]
Код
Dim arr1 (1 To 65537, 1 To 1) As String
[/vba]

Автор - Pelena
Дата добавления - 01.07.2015 в 20:01
Udik Дата: Среда, 01.07.2015, 20:20 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Ой, чует сердце, придётся кайлушку в руки брать, в смысле перебор задействовать <_< Пойду испытывать

==
на сей раз сердце ошиблось :)

Проблема решена.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Среда, 01.07.2015, 20:33
 
Ответить
СообщениеОй, чует сердце, придётся кайлушку в руки брать, в смысле перебор задействовать <_< Пойду испытывать

==
на сей раз сердце ошиблось :)

Проблема решена.

Автор - Udik
Дата добавления - 01.07.2015 в 20:20
Макрописец Дата: Среда, 01.07.2015, 20:28 | Сообщение № 4
Группа: Заблокированные
Ранг: Форумчанин
Сообщений: 128
Репутация: 7 ±
Замечаний: 100% ±

Excel 2010
А зачем Вам вообще выгружать массивы?


ТЕРПЕНИЕ И ТРУД - ВСЁ ПЕРЕТРУТ!
 
Ответить
СообщениеА зачем Вам вообще выгружать массивы?

Автор - Макрописец
Дата добавления - 01.07.2015 в 20:28
Udik Дата: Среда, 01.07.2015, 20:37 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Цитата Макрописец, 01.07.2015 в 20:28, в сообщении № 4
А зачем Вам вообще выгружать массивы?

Потому что в реальной задаче у меня массив строк под 1 лям, и его надо показать весь. Можно в отдельный файл, но это будет не так красиво для конечного пользователя. :)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение
Цитата Макрописец, 01.07.2015 в 20:28, в сообщении № 4
А зачем Вам вообще выгружать массивы?

Потому что в реальной задаче у меня массив строк под 1 лям, и его надо показать весь. Можно в отдельный файл, но это будет не так красиво для конечного пользователя. :)

Автор - Udik
Дата добавления - 01.07.2015 в 20:37
Макрописец Дата: Среда, 01.07.2015, 20:41 | Сообщение № 6
Группа: Заблокированные
Ранг: Форумчанин
Сообщений: 128
Репутация: 7 ±
Замечаний: 100% ±

Excel 2010
его надо показать весь

Зачем?


ТЕРПЕНИЕ И ТРУД - ВСЁ ПЕРЕТРУТ!
 
Ответить
Сообщение
его надо показать весь

Зачем?

Автор - Макрописец
Дата добавления - 01.07.2015 в 20:41
Manyasha Дата: Среда, 01.07.2015, 20:53 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Udik, у функции Transpose есть ограничения, аргумент - массив не может содержать больше 65536 элементов.
Если нужно транспонировать такой большой массив, попробуйте UDF


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеUdik, у функции Transpose есть ограничения, аргумент - массив не может содержать больше 65536 элементов.
Если нужно транспонировать такой большой массив, попробуйте UDF

Автор - Manyasha
Дата добавления - 01.07.2015 в 20:53
Udik Дата: Среда, 01.07.2015, 21:03 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Да мне главное было вывести массив на лист, трюк с псевдодвумерным массивом сработал. Транспонирование я использовал только из-за того, что одномерные массивы напрямую не хотели выводиться.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Serge_007 - Среда, 01.07.2015, 22:18
 
Ответить
СообщениеДа мне главное было вывести массив на лист, трюк с псевдодвумерным массивом сработал. Транспонирование я использовал только из-за того, что одномерные массивы напрямую не хотели выводиться.

Автор - Udik
Дата добавления - 01.07.2015 в 21:03
Udik Дата: Среда, 01.07.2015, 21:05 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Цитата Макрописец, 01.07.2015 в 20:41, в сообщении № 6
Зачем?


А Вы с какой целью интересуетесь? :)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение
Цитата Макрописец, 01.07.2015 в 20:41, в сообщении № 6
Зачем?


А Вы с какой целью интересуетесь? :)

Автор - Udik
Дата добавления - 01.07.2015 в 21:05
Макрописец Дата: Среда, 01.07.2015, 21:05 | Сообщение № 10
Группа: Заблокированные
Ранг: Форумчанин
Сообщений: 128
Репутация: 7 ±
Замечаний: 100% ±

Excel 2010
Udik,
Может, если вы изложите суть всей объёмной задачи, для коей делаете массивы, Вам предложат более рациональное решение, и даже возможно без массивов.


ТЕРПЕНИЕ И ТРУД - ВСЁ ПЕРЕТРУТ!

Сообщение отредактировал Макрописец - Среда, 01.07.2015, 21:07
 
Ответить
СообщениеUdik,
Может, если вы изложите суть всей объёмной задачи, для коей делаете массивы, Вам предложат более рациональное решение, и даже возможно без массивов.

Автор - Макрописец
Дата добавления - 01.07.2015 в 21:05
Udik Дата: Среда, 01.07.2015, 21:14 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Ну пожалуйста. Есть строка, её определённым образом надо обработать, в результате получаются различные варианты на выходе. Нужно предоставить все возможные варианты. Можно выводить каждый вариант сразу на лист и обойтись без массива, но тогда возрастёт количество обращений к ячейкам. Количество вариантов - степень двойки от колиества знаков, т.е. при 20 становится больше 1 000 000.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Serge_007 - Среда, 01.07.2015, 22:18
 
Ответить
СообщениеНу пожалуйста. Есть строка, её определённым образом надо обработать, в результате получаются различные варианты на выходе. Нужно предоставить все возможные варианты. Можно выводить каждый вариант сразу на лист и обойтись без массива, но тогда возрастёт количество обращений к ячейкам. Количество вариантов - степень двойки от колиества знаков, т.е. при 20 становится больше 1 000 000.

Автор - Udik
Дата добавления - 01.07.2015 в 21:14
Макрописец Дата: Среда, 01.07.2015, 21:18 | Сообщение № 12
Группа: Заблокированные
Ранг: Форумчанин
Сообщений: 128
Репутация: 7 ±
Замечаний: 100% ±

Excel 2010
Есть строка, её определённым образом надо обработать

Зачем и как обработать?
Изначально что нужно-то? выдать пользователям какие-то конкретные данные?


ТЕРПЕНИЕ И ТРУД - ВСЁ ПЕРЕТРУТ!

Сообщение отредактировал Макрописец - Среда, 01.07.2015, 21:18
 
Ответить
Сообщение
Есть строка, её определённым образом надо обработать

Зачем и как обработать?
Изначально что нужно-то? выдать пользователям какие-то конкретные данные?

Автор - Макрописец
Дата добавления - 01.07.2015 в 21:18
Udik Дата: Среда, 01.07.2015, 21:54 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Да и эти данные получаются после обработки строк внутри макроса. Каждый вариант заносится в массив, а потом разом выводится в конце.

Мы уже от темы ушли, пора прекращать, пока модераторы репрессии не стали применять массово :)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Serge_007 - Среда, 01.07.2015, 22:19
 
Ответить
СообщениеДа и эти данные получаются после обработки строк внутри макроса. Каждый вариант заносится в массив, а потом разом выводится в конце.

Мы уже от темы ушли, пора прекращать, пока модераторы репрессии не стали применять массово :)

Автор - Udik
Дата добавления - 01.07.2015 в 21:54
Макрописец Дата: Четверг, 02.07.2015, 10:47 | Сообщение № 14
Группа: Заблокированные
Ранг: Форумчанин
Сообщений: 128
Репутация: 7 ±
Замечаний: 100% ±

Excel 2010
Udik,
Ясно. Желаю удачи во всём.


ТЕРПЕНИЕ И ТРУД - ВСЁ ПЕРЕТРУТ!
 
Ответить
СообщениеUdik,
Ясно. Желаю удачи во всём.

Автор - Макрописец
Дата добавления - 02.07.2015 в 10:47
Мир MS Excel » Вопросы и решения » Вопросы по VBA » не выводит массив с числом элементов >655536 (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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