我需要在excel vba中计算,只使用数组循环:
round 0 round 1
9 28
65 84
28 47
84 103
41 60
66 85
115 134
我需要在循环中对第0轮中的值求和,这样总和结果(408)必须除以7,如果不是我想要将一个值与将1 (在本例中为84而不是65)舍入第0轮中的其余值,以便总和结果除以7。将会有这么多的一轮到7轮。我需要VBA代码才能实现这一目标。
备注: 圆形0和圆形1都在一个二维阵列中 我的问题是:有没有办法在多维数组中对不同列的值求和?
附有图片。
我感谢任何帮助或想法。
提前致谢
Excel VBA数组模型: http://im56.gulfup.com/8rDErI.png
这里的示例文件包含宏" Question1.xlsm" http://www.gulfup.com/?TKAAYM
注意:单击绿色大箭头下的链接下载文件。
更新: 这里是文件的另一个宏" Question1.xlsm" :
Sub A1()
Dim arrTemp1() As Integer
Dim sum1 As Integer
arrblkTable1 = Sheets("Sheet1").Range("blkTable1").Value
ReDim Preserve arrTemp1(0 To 1, 1 To 7)
For a = 0 To 1
sum1 = 0
For c = 1 To 7
arrTemp1(a, c) = arrblkTable1(c, 1) + (a * 19)
text6 = text6 & arrTemp1(a, c) & vbCrLf
Worksheets("TEST3").Cells(a + 1, c).Value = arrTemp1(a, c)
sum1 = sum1 + arrTemp1(a, c)
Next c
If XLMod(sum1, 7) = 0 Then
MsgBox "Yes " & sum1
Else
MsgBox "No " & sum1
End If
Next a
MsgBox text6
End Sub
Function XLMod(a, b)
' This replicates the Excel MOD function
XLMod = a - b * Int(a / b)
End Function
更新:这是对上一个宏的新更新:
Sub A1()
Dim arrTemp1(), arrTemp2(), arrSUMs() As Integer
Dim sum1 As Integer
arrblkTable1 = Sheets("Sheet1").Range("blkTable1").Value
arrblkTable2 = Sheets("Sheet1").Range("blkTable2").Value
'-------------------------------- arrTemp1 ------------------------------
ReDim Preserve arrTemp1(0 To 1, 1 To 7)
For a = 0 To 1
sum1 = 0
For c = 1 To 7
arrTemp1(a, c) = arrblkTable1(c, 1) + (a * 19)
text6 = text6 & arrTemp1(a, c) & vbCrLf
Worksheets("TEST3").Cells(a + 1, c).Value = arrTemp1(a, c)
sum1 = sum1 + arrTemp1(a, c)
Next c
If XLMod(sum1, 7) = 0 Then
MsgBox "Yes " & sum1
Else
MsgBox "No " & sum1
For c = 1 To 7
sum1 = sum1 - arrTemp1(a, c)
arrTemp1(a, c) = arrblkTable1(c, 1) + ((a + 1) * 19)
sum1 = sum1 + arrTemp1(a, c)
If XLMod(sum1, 7) = 0 Then
MsgBox "Yes " & sum1 & " " & arrTemp1(a, c)
End If
Next c
End If
Next a
For x = 0 To UBound(arrTemp1)
For y = 1 To UBound(arrTemp1)
text7 = text7 & arrTemp1(x, y) & vbCrLf
Next y
Next x
MsgBox text7
End Sub
Function XLMod(a, b)
' This replicates the Excel MOD function
XLMod = a - b * Int(a / b)
End Function
我现在需要将每个sum1放在一个数组中,我该怎么做?
答案 0 :(得分:0)
如果我理解正确你想要类似的东西:
Sub p()
v = Range("A2:A8")
v1 = Sheets("Sheet1").Range("B2:B8")
s = Application.WorksheetFunction.Sum(v)
b = False
Count = 0
For i = 1 To 7
temp = v
temp(i, 1) = v1(i, 1)
s = Application.WorksheetFunction.Sum(temp)
b = s Mod 7 = 0
If b = True Then
Count = Count + 1
End If
Next
MsgBox Count
End Sub
答案 1 :(得分:0)
如果您可以提供有关您正在尝试解决的问题的更多详细信息,而不是专注于 以这种方式解决问题,那么这可能会有很大帮助。有可能有另一种做法,而这种做法并没有发生在你身上会更加简单。
这不是答案。然而。但是,它需要比评论中允许的更多空间,以确保我们做到了这一点。
对于您的样本数据:
round 0 round 1
9 28
65 84
28 47
84 103
41 60
66 85
115 134
你想要:
如果结果不是0(如本例所示)
第一轮的第一个数字是29
这是你追求的逻辑吗?