如何对来自不同列+ EXCEL VBA的数组中的值求和

时间:2015-05-22 09:50:02

标签: arrays excel vba loops excel-vba

我需要在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放在一个数组中,我该怎么做?

2 个答案:

答案 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

你想要:

  1. 汇总第0轮的所有数值(9 + 65 + 28 + 84 + 41 + 66 + 115)= 408
  2. 取总和(408)mod 7并查看结果是否为0
    1. 408/7 = 58.28,所以(408 mod 7)<> 0
  3. 如果结果不是0(如本例所示)

    • 开始将第1轮的数字替换为第0轮的数字
      1. 总和(28 + 65 + 28 + 84 + 41 + 66 + 115)= 427
      2. 427/7 = 61(427 mod 7)= 0
      3. 现在是您的有效结果集。
    • 第一轮的第一个数字是29

      1. 总和(29 + 65 + 28 + 84 + 41 + 66 + 115)= 428
      2. 428/7 = 61.14 so(428 mod 7)<> 0
      3. 将第1轮中的下一个数字替换为第0轮的下一个数字
      4. 总和(9 + 84 + 28 + 84 + 41 + 66 + 115)= 427
      5. 现在是您的有效结果集。
    • 这是你追求的逻辑吗?

    • 如果你到第1轮结束时会发生什么,而你却找不到总数(mod 7 = 0)?