避免arrays中不符合条件的元素

好的…下面的行将数组myArr的内容放在单元格A1中

sh.Range("A1").Resize(cnt, 7).Value = myArr

以下是上述线路输出的一些示例logging

 18 5 1 23 15 7 6 23 5 3 10 18 20 15 19 10 25 12 21 15 23 10 14 11 9 7 25 20 24 15 23 20 11 17 2 7 15 3 16 24 22 13 14 4 15 13 6 23 2 20 11 22 24 14 3 6 17 5 13 15 19 6 22 9 13 15 7 24 3 6 

在这一行之前,我需要一个条件,不知道如何编写语法。 我想加上第一个元素( lbound )的所有7个值,并检查总和,并为所有的元素做( ubound )。 只有当总数等于100时, 才能运行上面的行

一旦解决了第一个查询,我还有第二个查询 ,只列出计数,总共有多less个元素总计为100,总共有多less个元素为80,等等….通过添加另一个数组从第一个数组获取信息。 计数将在75到125之间。预期的输出应该是

 75 1 76 0 77 2 . . . 125 1 

这是我正在尝试

 Sub foo() Dim myArr(1 To 10) Dim cnt As Integer, i As Integer myArr(1) = "18,5,1,23,15,7,6" myArr(2) = "23,5,3,10,18,20,15" myArr(3) = "19,10,25,12,21,15,23" myArr(4) = "10,14,11,9,7,25,20" myArr(5) = "24,15,23,20,11,17,2" myArr(6) = "7,15,3,16,24,22,13" myArr(7) = "14,4,15,13,6,23,2" myArr(8) = "20,11,22,24,14,3,6" myArr(9) = "17,5,13,15,19,6,22" myArr(10) = "9,13,15,7,24,3,6" For i = 1 To UBound(myArr) With Application.WorksheetFunction.Sum = .Sum(.Index(myArr, i, 0)) 'if .... '.... 'endif End With Range("A1").Resize(cnt, 7).Value = myArr End Sub 

请参阅第1部分和第2部分以下的聊天: 移到聊天的评论这将您的string拆分为其元素,转换为整数和总和。 然后执行一个检查,看看是否= 100,如果是这样,则添加到一个数组,然后可以写出到表。 我不禁想到,使用这么多的数组可能会有一个更有效的方式,但还没有想到它。

 Sub foo() Dim myArr(1 To 10) Dim TotalsArr(1 to 10) Dim cnt As Integer, i As Integer myArr(1) = "18,5,1,23,15,7,6" myArr(2) = "23,5,3,10,18,20,15" myArr(3) = "19,10,25,12,21,15,23" myArr(4) = "10,14,11,9,7,25,20" myArr(5) = "24,15,23,20,11,17,2" myArr(6) = "7,15,3,16,24,22,13" myArr(7) = "14,4,15,13,6,23,2" myArr(8) = "20,11,22,24,14,3,6" myArr(9) = "17,5,13,15,19,6,22" myArr(10) = "9,13,15,7,24,3,6" Dim tempArr as Variant Dim Val as Variant Dim Total as Long Dim Counter As Long Dim FinalArr() 

第1部分:计算项目总数,并检查是否= 100,然后添加到结果数组。

 Counter = 0 For i = LBound(myArr) to UBound(myArr) Total = 0 tempArr = Split(myArr(i),",") For Each Val in tempArr Total = Total + Val Next Val If Total = 100 Then ReDim Preserve FinalArr(Counter) FinalArr(Counter) = myArr(i) Counter = Counter + 1 End If TotalsArr(i) = Total 'store totals for later use in dictionary Next i For i = LBound(FinalArr) to UBound(FinalArr) Debug.Print FinalArr(i) Next i 

第2部分:计算每个不同的总数。 我们将使用一个字典来存储每个键的总数(总数),并在同一个键被再次find时加上一个值(即count)

 Dim totalsDict As Scripting.Dictionary 'Tools > references > add in microsoft scripting runtime Dim key as Variant Set totalsDict = New Scripting.Dictionary 'If prepopulating with totals to check for in range 75 to 125 ( otherwise comment out next 3 code lines For i = 75 to 125 totalsdict.Add i , 0 Next i For i = LBound(TotalsArr) to UBound(TotalsArr) totalsDict(TotalsArr(i)) = totalsDict(TotalsArr(i)) + 1 'will overwrite adding one to value Next i For Each key in totalsdict.Keys Debug.print key, "," , totalsDict(key) Next key End Sub