Нет. Массив это и так набор байтов. Но в нём могут быть строки. Они располагаются в другом куске памяти. В массиве на них только указатели хранятся (в структуре Variant). Поэтому без цикла никак.
Dim a()
Dim b(1, 3)
Dim c As Range
Dim d As Object
Set d = CreateObject("scripting.dictionary")
d.Add 1, 1
d.Add 2, 2
Set c = Range("a1")
a = Array(b, c, d)
bedvit, плохо знаешь Мишу)) Он показал, что с помощью функции Array() можно создать массив из чего угодно и циклом это не считается (он есть, но мы его не видим)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Еще раз, данные в сообщении 2 - это как реализовано хранение в памяти. Циклы будут ВСЕГДА. Если вы их завернете, в какую либо функцию (к примеру Array()), и будите смело бегать с флагом - я сделал это без циклов - это тонкий (или толстый) троллинг И где на выходе набор байтов, не вижу.
bedvit, Виталий , я к тому что в массиве может быть такая разно типовая чехарда, которая и циклом то вытаскивается не очень, а про записать разом и вовсе молчу.
bedvit: Если вы их завернёте и будете бегать с флагом "я сделал это без циклов" - это тонкий (или толстый) троллинг
я же потому и написал
Цитата
Jack Famous: циклом это не считается (он есть, но мы его не видим)
— подавляющее большинство пользователей Планеты (кроме местных), если не видят цикл в VBA, то считают, что его нет совсем ([1] и [2])
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Чисто теоретически, если массив числовой (variant): 1.мы можем получить на него указатель, и сразу увидеть массив байтов. Задача выполнена. Потом просто нужно вспомнить структуру варианта: Первое поле – VARTYPE, которое на самом деле является typedef-ом для unsigned short. Следующие три поля – WORD, еще один typedef для unsigned short. Итак, VARIANT – это 8 байт плюс размер union. Union содержит достаточно места для своего самого большого члена, в данном случае это 8 байт (для double, currency или date). Итак, VARIANT – это 16 байт. Т.е. для double каждые вторые 8 байт из 16 это нужно нам число. 2.Применяем эти знания 3.Профит...
Цитата
БМВ, написал: в массиве может быть такая разно типовая чехарда, которая и циклом то вытаскивается не очень
Это да, но есть замечательная класс и метод, который пишет и читает вариант в поток/из потока (набор байт): CComVariant::ReadFromStream CComVariant::WriteToStream К примеру, так я пишу все сохранения пользователей хранимые в массиве вариантов сразу в файл (причем это и строки и числа)
К сожалению это С/С++ (причем с циклами). Для VBA не взлетит, надо делать обертки.
Ссылки на другие объекты и массивы не преобразуются в значения. Преобразуются только базовые, локализованные (в памяти) типы данных. Здесь или цикл по массиву (как же без него) или обход дерева по объекту.