【问题标题】:vba loop through array, store values to arrayivba循环遍历数组,将值存储到数组
【发布时间】:2020-09-17 11:10:06
【问题描述】:

我有一些数据,存储在数组中,例如

Dim arrA, arrB, arrC, arrAi, arrBi
Dim i as integer, x as integer

for i = 1 to 100

    if cells(i,1).value = "criteria" then ' just add value to array when it meets some criteria
        x = x + 1
        arrA(x) = cells(i,1).value
        arrB(x) = cells(i,2).value
        arrC(x) = cells(i,3).value
    end if

next i

redim preserve arrA(1 to x)
redim preserve arrB(1 to x)
redim preserve arrC(1 to x)

数据看起来像

arrA:26.1 40.2 80.3 26.0 41.3 78.7 25.8 40.8 80.0

arrB:10 11 10 66 67 64 32 32 33

arrC: 1 2 3 1 2 3 1 2 3

由于 arrA 26.1、26.0、25.8(位置 1、4、7)中的值属于第 1 组(引用 arrC 中相同位置的值),我想将 26.1 26.0 25.8 存储到 arrAi 和 10 66 32到 arrBi 进行后续计算。

如上所述,我如何遍历这 3 个数组并将值存储到另一个数组?

提前致谢。

【问题讨论】:

  • 因此,如果您的 arrC 具有重复值,则找到它们各自位置的索引并交换 ArrayA 和 ArrayB 的值
  • 那么2,5,8位置它也属于同一个组(组2)?
  • 请注意,Dim arrA 不会为数组提供维度。所以你应该先做一个Dim arrA(100)然后把数据放进去。之后的Redim 是没有用的。
  • @PaulOgilvie 感谢您的提醒。我将整理我的代码。数组很新。
  • 我认为您只需要使用 1 个数组而不是三个数组来存储数据..(数组维度将为 2)然后从数组(来自第三列)中找到唯一数据,然后使用该唯一数据并检查数组(第三列是否相等,然后将其存储在 ArrI 中...实际上您只需要对数组进行排序..

标签: arrays vba loops


【解决方案1】:

请尝试下一个方法:

Sub handleArraysFromArrays()
 'your existing code...
 'but you fistly must declare
  Dim arrA(1 To 100), arrB(1 To 100), arrC(1 To 100)
 '....
 'your existing code
 '...
 Dim k As Long, kk As Long
 
 ReDim arrAi(1 To UBound(arrA))
 ReDim arrBi(1 To UBound(arrA))
 For i = 1 To UBound(arrC)
    If arrC(i, 1) = 1 Then k = k + 1: arrAi(k, 1) = arrA(i, 1)
    If arrC(i, 1) = 2 Then kk = kk + 1: arrBi(kk, 1) = arrA(i, 1)
 Next i
 ReDim Preserve arrAi(1 To k): ReDim Preserve arrBi(1 To kk)
 Debug.Print UBound(arrAi), UBound(arrBi)
End Sub

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多