Excel VBA: варианты в переменных массива

Вопрос по вариантам. Я понимаю, что варианты в Excel vba являются типом данных по умолчанию и также неэффективны (с точки зрения чрезмерного использования в больших приложениях). Однако я регулярно использую их для хранения данных в массивах, которые имеют несколько типов данных. Текущий проект, над которым я работаю, - это, по сути, задача, которая требует огромной оптимизации очень плохого кода (c.7000 строк) - и это заставило меня задуматься; Это можно обойти?

Объяснить; код часто хранит данные в переменных массива. Поэтому рассмотрим набор данных из 10 столбцов на 10000. Столбцы представляют собой несколько разных типов данных (строковые, двойные, целые, даты и т. Д.). Предполагая, что я хочу сохранить их в массиве, я бы обычно;

dim myDataSet(10,10000) as variant

Но мои знания говорят, что это будет действительно неэффективно с кодом, оценивающим каждый элемент, чтобы определить, какой это тип данных (когда на практике я знаю, что я ожидаю). Кроме того, я теряю контроль, который дает мне измерение отдельных типов данных. Итак, (предполагая, что первые 6 являются строками, следующие 4 удваиваются для простоты объяснения сути), я мог бы;

dim myDSstrings(6,10000) as string
dim myDSdoubles(4,10000) as double

Это возвращает мне контроль и эффективность, но также немного неуклюже (на практике типы смешаны и различны), и в итоге у меня появляется нечетное количество элементов в каждом, и в итоге приходится присваивать их индивидуально в коде - а не по массе). Итак, это случай;

myDSstrings(1,r) = cells(r,1)
myDSdoubles(2,r) = cells(r,2)
myDSstrings(2,r) = cells(r,3)
myDSstrings(3,r) = cells(r,4)
myDSdoubles(3,r) = cells(r,5)
..etc...

Что намного страшнее, чем;

myDataSet(c,r) = cells(r,c)

Так что - это заставило меня задуматься - я должен что-то здесь упустить. Каков оптимальный способ хранения массива данных разных типов? Или, если предположить, что нет никакого способа сделать это - что было бы лучшим методом кодирования для хранения массива смешанных типов данных?

Ответы на вопрос(2)

Ваш ответ на вопрос