【发布时间】:2011-11-22 18:01:09
【问题描述】:
关于变体的问题。我知道 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)
所以——这让我开始思考——我一定是在这里遗漏了什么。存储不同数据类型数组的最佳方式是什么?或者,假设没有办法做到这一点——存储混合数据类型数组的最佳编码实践是什么?
【问题讨论】:
-
JMax 为您可能真正的问题提供了答案。有关使用变体时的权衡讨论,请参见此处:stackoverflow.com/q/5488314/58845
-
您可以创建一个数组数组,其中每个包含的数组都属于特定类型。例如,您应该能够通过 BigArray(3)(4) 进行索引。迪克的 cmets 仍然适用。
标签: arrays excel vba types variant