【问题标题】:Excel VBA variable use: Is it better to use multiple variables or one array to store informationExcel VBA变量使用:使用多个变量还是一个数组存储信息更好
【发布时间】:2014-01-08 21:55:10
【问题描述】:

我已经使用 VBA 大约一个月了,这个论坛对于我的第一个“编程”语言来说是一个很好的资源。随着我开始熟悉 VBA 数组,我开始想知道存储变量的最佳方式是什么,而且我敢肯定这里有人知道可能是编程新手问题的答案:

例如,有 10 个 String 变量彼此独立使用或 String 变量数组彼此独立使用之间有什么区别(独立我的意思是它们在数组中的位置无关紧要它们在程序中的使用)。我使用的一些代码可能有大约 9 个公共变量。将它们设置为一个数组有什么好处,尽管我不需要保留它们的顺序 vis 彼此?例如我本来可以的

Public x As String
Public y As String
Public v As String
Public w As String

或者

Public arr(1 to 4) As String
arr(1) = x
arr(2) = y
arr(3) = v
arr(4) = w

就我需要对代码做什么而言,这两个版本在功能上是等效的。但是有理由使用其中一个而不是另一个吗?

与此相关,我可以将数组转置为 Excel 字段,并使用 xlUpxlDown 在数组中移动各种值。但是我也可以通过类似的方式在数组中移动,方法是在“抽象地”保存的数组中查找具有特定值或位置的元素。* 有时我发现,一旦将数组值转置到工作表中,使用 @987654327 操作它们会更容易@ 和 xlDown。除了必须有专门的工作表空间来执行此操作之外,这是否比遍历“抽象”* 数组(如果 Applications.ScreenUpdating = False)更糟糕(时间、处理能力、可靠性等)?

*这对数学家/严肃的程序员来说可能意味着一些技术性的东西——我想说的是一个不使用工作表网格的可视化显示的数组。

编辑:

感谢您提供有趣的答案。我不确定我的问题的第二部分是否完全算作第二个问题,因此我违反了论坛的规则,或者它是否已连接,但我很乐意勾选也考虑过它的答案

【问题讨论】:

  • 更好是一个非常主观的术语。对于小型数据集/属性类型数据,特定变量提供更清晰的代码和更快的访问。但是你不能用字段/属性样式变量做所有事情,并且在有数据的情况下需要数组或字典或其他集合类型。
  • 使用数组而不是电子表格要好得多——几乎总是如此。有时我会在重新填充数组之前使用 Excel 过滤器或排序例程的工作表。请注意,您也可以使用arr = Array("String 1", "String 2", "String 3") 快速创建变体数组。

标签: arrays performance excel vba


【解决方案1】:

除非您需要按顺序或通过索引# 动态地引用它们,否则不要将数组用作临时变量的分组。更难阅读。

在内存方面,它们应该几乎相同,但阵列上的开销会稍多一些。

【讨论】:

  • 好点,另外,由于边界检查和第二个内存地址步骤,在 VB 中访问数组有更多开销(很小,速度很慢)。
【解决方案2】:

正如其他人所指出的,对于不相关或不属于“一组”值的变量,没有必要使用数组。但是,如果您发现自己正在这样做:

Dim email1 as String, email2 as String, email3 as String, _
    email4 as String, email5 as String

那么你应该考虑一个数组是否是一个更好的方法。

对于您问题的第二部分:如果您在 VBA 中使用数组,那么最好直接在内存中使用它们,而不是将它们转储到工作表并从那里导航它们。

将所有内容保存在内存中会更快,并消除依赖关系,例如必须确保有一个“临时”工作表:这种依赖关系会使您的代码的可重用性降低并且更脆弱。

【讨论】:

  • + 1 涵盖两个问题!
猜你喜欢
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
  • 2015-05-03
  • 1970-01-01
  • 2015-11-03
  • 2017-01-03
  • 1970-01-01
  • 2018-09-17
相关资源
最近更新 更多