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

Вопрос о вариантах. Я знаю, что варианты в Excel vba являются как типом данных по умолчанию, так и неэффективными (с точки зрения чрезмерного использования в больших приложениях). Однако я регулярно использую их для хранения данных в массивах с несколькими типами данных. Текущий проект, над которым я работаю, по сути, является задачей, которая требует массивной оптимизации очень плохого кода (около 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)

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

14
задан Surferosa 22 September 2011 в 11:11
поделиться