Мое почтение, джентльмены! Cериализация и десериализация типа данных Variant, используемый в COM, VB, VBA, C++ и т.д. Поддерживаются базовые типы и массивы. Объекты не сериализуются. В некоторой степени - аналог CComVariant::ReadFromStream и CComVariant::WriteToStream
Использование простое, как обычная функция (предварительно подключив или открыв надстройку по ссылке чуть ниже и COM в автоматическом/ручном режиме):
Код
Sub TestVariantSerialization()
'Dim bVBA As New BedvitCOM.VBA 'раннее связывание
Dim bVBA As Object: Set bVBA = CreateObject("BedvitCOM.VBA") 'позднее связывание
Dim t, arr, byteArr
Range("A:B").value2 = "Tst Srl ёя"
t = Timer
byteArr = bVBA.VariantSerialization(Range("A:B").value2)
arr = bVBA.VariantDeserialization(byteArr)
Debug.Print "VariantSerialization+VariantDeserialization " & Timer - t & " s."
Range("D:E").value2 = arr
End Sub
Особенности: 1. Cериализация в байтовый массив 2. Размер массива не может превышать 2^32 элементов (около 4Гбайт). Это ограничение самого COM - массива. В С++ (в другом контейнере) сохранял файлы боле 4,5 Гб. 3. Реализован похожий механизм (shared string table), как и в Excel, для оптимизации размера одинаковых строк.