关于遍历多维数组AssociateArray(6,12)的(0,x)元素及循环方式的技术咨询
针对VBA数组遍历需求的解决方案
嘿,我来帮你搞定这个问题~
你现在的需求是只遍历AssociateArray中第一维索引为0的那一行(也就是(0,x),x从0到11)的元素,其实完全不需要把For Each嵌套在递增循环里,反而用一个普通的For循环直接遍历第二维索引会更简洁高效,毕竟你已经明确知道要访问的是固定行的元素。
为什么不用嵌套For Each?
VBA里的For Each遍历多维数组时,是按行优先的顺序扫过所有元素(先走完第一行的所有列,再走第二行,以此类推)。如果用For Each遍历整个数组再筛选,会额外遍历数组里其他6行的元素,既冗余又没必要。
推荐的实现代码
直接指定第一维索引为0,循环第二维的x范围即可:
Dim H As Integer Dim vItem As Variant Dim AssociateArray(6, 12) ... ' 数据已填充至AssociateArray ... ' 遍历第一维索引为0的所有元素 Dim x As Integer For x = 0 To 11 vItem = AssociateArray(0, x) Debug.Print vItem Select Case vItem Case "AAA" ' 执行你的操作,比如:MsgBox "找到AAA" Case "BBB" ' 执行你的操作,比如:MsgBox "找到BBB" End Select Next x
如果非要用For Each的话(不推荐)
虽然可以实现,但需要额外计算当前元素的位置,步骤繁琐且效率低,示例如下(仅作参考):
Dim vItem As Variant Dim elementCount As Integer elementCount = 0 For Each vItem In AssociateArray ' 因为数组是行优先,前12个元素就是第一行的所有列(x从0到11) If elementCount < 12 Then Debug.Print vItem Select Case vItem Case "AAA" ' 执行操作 Case "BBB" ' 执行操作 End Select End If elementCount = elementCount + 1 Next vItem
显然第一种方案更直接,既精准又高效,完全符合你的需求。
内容的提问来源于stack exchange,提问作者SidCharming
相关产品推荐
相关产品推荐

